内存回收策略
1、标记清除
优点:简单
缺点:存在大量的碎片
2、标记整理(老生代)
优点:、
缺点:
3、复制(适用于新生代)
优点:简单,高效
缺点:因为实现上需要有一个区域作为复制区域,所以浪费内存
可达性分析
GC Root:虚拟机栈
方法区静态变量
方法区的常量引用的对象
本地方法栈
引用
强引用
软引用(内存不足之前不会回收)
弱引用(下一次GC回收)
虚引用
finalize执行过程:
1、回收之前先判断是否需要执行finalize(覆盖了finalize方法而且没有执行过finalize方法)
2、如果需要执行finalzie,则加入F-Queue,然后等待一个低优先级的线程去执行队列的finalize方法。如果执行完毕,GC会对队列的对象再一次标记,如果需要清除则会清除,所以该方法是逃脱被GC的最后机会。
3、finalize的执行与否是不确定的,finalize线程的执行与否也是不确定的。
回收方法区:
1、类的实例都被回收
2、类的classloader都被回收
3、类的Class对象没在任何的地方被引用
垃圾回收策略
1、分代
2、大对象直接进入老年代(避免mirror gc)
3、空间分配担保(mirror gc可能引起full gc)
4、full gc不较慢
原文:http://www.cnblogs.com/YDDMAX/p/5263737.html