GC算法与分类(Java虚拟机)
一 . GC算法总结
1.引用计数(淘汰)
2.标记-清除
3.标记-压缩
4.复制算法
-新生代
二 . 理解分代思想:
1.依据对象的存活周期进行分类,短命对象为新生代,长命对象归为老年代.
2.根据不同年代的特点,选取合适的收集算法
- 少量对象存活,适合复制算法
- 大量对象存活,适合标记清理或者标记压缩
所有的算法,都需要能够识别一个垃圾对象, 因此需要给出一个可触及性的定义.
三. 可触及性.
1.可触及的
- 从根节点可以触及这个对象
2. 可复活的
- 一旦所有引用被释放,就是可复活状态
- 因为在finalize()中可能复活该对象
3. 不可触及的
- 在finalize()后,可能会进入不可触及状态
- 不可触及的对象不可能复活
- 可以回收
下面一个例子帮助理解
所以: 避免使用finalize(); === 什么是finalize(),点击链接
根
- 栈中引用的对象
- 方法区中静态成员或者常量引用的对象(全局对象)
- JNI方法栈中引用的对象
GC引起的全局停顿: