面试题,谈谈你对java垃圾收集器的理解


面试中经常会问Java垃圾收集器相关的东西,我想以下答案才是面试官想要的。内容来自周志明著《深入理解Java虚拟机》的总结

1、哪些内存需要回收

通过根搜索法,对经过一次标记之后,仍没有复活的对象。

哪些对象可以作为根:虚拟机栈中引用的对象、方法去中的类静态属性引用对象、方法区中的常量引用的对象、本地方法栈JNI的引用对象

        注意:很多时候应聘的人会回答通过引用计数法来判断,虽然引用计数法效率很高,但Java中并没有采用,因为无法解决对象之间相互引用的问题

2、何时回收

在eden区满,无法为新生代对象分配内存的时候触发minor(少量的)  gc;进去老年代的对象无法分配足够的内存空间 触发full  gc;

minor gc:频繁,速度快

        full gc:一般比minor gc 慢10倍以上

3、如何回收

       新生代对象,使用复制的算法

       老年代,标记--清除算法

       新生代、老年代都有相应的收集器,并且种类繁多,大多都是相互配合使用的,有的并行,有的串行,有的先暂停在收集等等,这一块内容较多,详情请参见《深入 理解Java        虚拟机》

       

你可能感兴趣的:(面试题,谈谈你对java垃圾收集器的理解)