判断对象是否存活的算法
——>根搜索算法:GC Roots Tracing
当一个对象到GC Roots没有任何引用链相连,证明对象不可用。
垃圾收集算法:
1. 标记-清除算法
算法:不用的标记一下,再清除
缺点:效率不高,清除完了有很多不连续的内存碎片。
2. 复制算法
算法:一块较大的Eden空间和两块较小的Survivor空间,回收时将eden和survivor上还没死的对象复制到另一块survivor上。
优点:实现简单,运行高效。
缺点:对象存活率较高时要执行太多的复制操作,效率会变低。
3. 标记-整理算法
万一对象100%存活,老年代用复制算法就不行了,所以老年代要用标记-整理算法。
算法:不用的标记一下,在清除,再把所有不用的对象向一端移动。
4. 分代收集算法
把Java堆分成新生代和老年代,对新生代使用复制算法,对老年代使用标记—整理。
3.4 垃圾收集器
3.4.1 Serial收集器
Stop the World,单线程,运行于Client模式下虚拟机很好的选择。
3.4.2 ParNew收集器
Serial的多线程版本,Server模式下虚拟机的首选新生代收集器。