JVM 垃圾回收

接上篇文章, 本篇文章主要总结 Garbage Collector 的相关知识点. 1. 存活判定 存活判定一般依据引用计数或者可达性分析, 引用计数时, 某一个对象每一个地方引用它, 计数器加一, 某引用失效, 计数器减一, 计数器为0的对象不可使用. 缺点在于难以解决对象互相引用的问题. 可达性分析是利用 GC Roots 从这些节点向下搜索, 当一个对象从 GC Roots 不可达, 则认为该回收. 可以当作 GC Roots 的为: i. 本地变量(虚拟机栈) ii. 静态属性引用(方法区) iii. 常量引用(方法区) iv. JNI(Native 方法引用) 当对象被标记为不可达时, 如果该对象没必要执行 finalize() 方法, 则会被认为死亡. 如果需要执行 finalize(), 那么会将该对象加入 F-Queue, 由 Finalize 线程执行该方法. 执行过 finalize() 的方法对象不会再次执行该方法. 此时对象真正死亡. PermGen 也会回收废弃的常量和无用的类, … Continue reading “JVM 垃圾回收”