Java错题总结(3-6页)

本文详细解析了Java编程中的常见错误,包括静态方法调用的特殊情况,CMS垃圾回收器的工作原理及其各个阶段。此外,还讨论了抽象类与接口的区别,多态在构造函数中的体现,以及不同情况下`finally`块如何影响返回值。最后,介绍了Java中的几种阻塞队列特性以及`try-catch-finally`语句块中的返回逻辑。
摘要由CSDN通过智能技术生成

package NowCoder;
class Test {
    public static void hello() {
        System.out.println("hello");
    }
}
public class MyApplication {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Test test=null;
        test.hello();//有问题吗?
    }
}

没问题。

静态方法不依赖与对象生存,所以对象为null时仍然是可以调用的。

静态方法的使用不依靠对象,只看类型,在编译时就确定了

以前认为,类的静态属性/方法只能通过【类名.方法名】/【类名.属性名】来访问,只能说我先入为主了。。我们类的静态成员不依赖实例对象,静态成员在类编译的时候就已经被创建好了,经测试后发现,无论是是使用类名,还是使用我们定义的类变量都是可以访问的,哪怕它已经被实例化

值得一说的是有些人以为是空指针,这里你们所说的空指针必须是去引用堆对象才会有空指针

而这个hello是static类型的,人家static的方法本身就没有指针,所以当然不会有空指针

--------------------------------------------------------------------------------------

CMS垃圾回收器在那些阶段是没用用户线程参与的

  • 初始标记
  • 并发标记
  • 重新标记
  • 并发清理
    
    

CMS全称 Concurrent Mark Sweep,是一款并发的、使用标记-清除算法的垃圾回收器,以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器,对于要求服务器响应速度的应用上,这种垃圾回收器非常适合。

CMS的基础算法是:标记—清除。

它的过程可以分为以下6个步骤:

  1. 初始标记(STW initial mark)
  2. 并发标记(Concurrent marking)
  3. 并发预清理(Concurrent precleaning)
  4. 重新标记(STW remark)
  5. 并发清理(Concurrent sweeping)
  6. 并发重置(Concurrent reset)

  1. 初始标记:在这个阶段,需要虚拟机停顿正在执行的任务,官方的叫法STW(Stop The Word)。这个过程从垃圾回收的"根对象"开始,只扫描到能够和"根对象"直接关联的对象,并作标记。所以这个过程虽然暂停了整个JVM,但是很快就完成了
  2. 并发标记:这个阶段紧随初始标记阶段,在初始标记的基础上继续向下追溯标记。并发标记阶段,应用程序的线程和并发标记的线程并发执行,所以用户不会感受到停顿
  3. 并发预清理:并发预清理阶段仍然是并发的。在这个阶段,虚拟机查找在执行并发标记阶段新进入老年代的对象(可能会有一些对象从新生代晋升到老年代, 或者有一些对象被分配到老年代)。通过重新扫描,减少下一个阶段"重新标记"的工作,因为下一个阶段会Stop The World。
  4. 重新标记:这个阶段会暂停虚拟机,收集器线程扫描在CMS堆中剩余的对象。扫描从"根对象"开始向下追溯,并处理对象关联。
  5. 并发清理:清理垃圾对象,这个阶段收集器线程和应用程序线程并发执行
  6. 并发重置:这个阶段,重置CMS收集器的数据结构,等待下一次垃圾回收。

        CMS不会整理、压缩堆空间,这样就带来一个问题:经过CMS收集的堆会产生空间碎片,CMS不对堆空间整理压缩节约了垃圾回收的停顿时间,但也带来的堆空间的浪费。

        为了解决堆空间浪费问题,CMS回收器不再采用简单的指针指向一块可用堆空 间来为下次对象分配使用。;而是把一些未分配的空间汇总成一个列表,当JVM分配对象空间的时候,会搜索这个列表找到足够大的空间来hold住这个对象。

        从上面的图可以看到,为了让应用程序不停顿,CMS线程和应用程序线程并发执行,这样就需要有更多的CPU,单纯靠线程切 换是不靠谱的。并且&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值