java 垃圾回收机制
2014-09-22 17:40
113 查看
早期的垃圾回收采用引用计数(reference
counting)的机制。每个对象包含一个计数器。当有新的指向该对象的引用时,计数器加1。当引用移除时,计数器减1。当计数器为0时,认为该对象可以进行垃圾回收。
(1)引用计数法
堆中每一个对象都有一个引用计数。当新创建一个对象,或者有变量被赋值为这个对象的引用,则这个对象的引用计数加1;当一个对象的引用超过生存期或者被设置一个新的值时,这个对象的引用计数减1。当对象的引用计数变为0时,就可以被当作垃圾收集。
这种方法的好处是垃圾收集较快,适用于实时环境。缺点是这种方法无法监测出循环引用。例如对象A引用对象B,对象B也引用对象A,则这两个对象可能无法被垃圾收集器收集。因此这种方法是垃圾收集的早期策略,现在很少使用。
(2)跟踪法
这种方法把每个对象看作图中一个节点,对象之间的引用关系为图中各节点的邻接关系。垃圾收集器从一个或数个根结点遍历对象图,如果有些对象节点永远无法到达,则这个对象可以被当作垃圾回收。
容易发现,这种方法可以检测出循环引用,避免了引用计数法的缺点,较为常用。
counting)的机制。每个对象包含一个计数器。当有新的指向该对象的引用时,计数器加1。当引用移除时,计数器减1。当计数器为0时,认为该对象可以进行垃圾回收。
(1)引用计数法
堆中每一个对象都有一个引用计数。当新创建一个对象,或者有变量被赋值为这个对象的引用,则这个对象的引用计数加1;当一个对象的引用超过生存期或者被设置一个新的值时,这个对象的引用计数减1。当对象的引用计数变为0时,就可以被当作垃圾收集。
这种方法的好处是垃圾收集较快,适用于实时环境。缺点是这种方法无法监测出循环引用。例如对象A引用对象B,对象B也引用对象A,则这两个对象可能无法被垃圾收集器收集。因此这种方法是垃圾收集的早期策略,现在很少使用。
(2)跟踪法
这种方法把每个对象看作图中一个节点,对象之间的引用关系为图中各节点的邻接关系。垃圾收集器从一个或数个根结点遍历对象图,如果有些对象节点永远无法到达,则这个对象可以被当作垃圾回收。
容易发现,这种方法可以检测出循环引用,避免了引用计数法的缺点,较为常用。
相关文章推荐
- Java的垃圾回收机制详解和调优
- Java的垃圾回收(Garbage Collection)机制
- JVM详解之Java垃圾回收机制详解和调优
- 【转载】 全面分析Java的垃圾回收机制
- 深刻剖析经典面试题之二:Java与C#的垃圾回收机制
- Java与C#的垃圾回收机制
- Java的垃圾回收机制
- java的垃圾回收机制详解和调优
- Java与C#的垃圾回收机制
- java中的垃圾回收机制
- Java垃圾回收机制浅解
- 全面分析Java的垃圾回收机制
- java中的垃圾回收机制GC
- Java垃圾回收机制详解和调优
- Java的垃圾回收机制详解和调优
- JAVA垃圾回收机制与内存泄露问题
- Java的垃圾回收机制详解和调优大全
- 深刻剖析经典面试题之二:Java与C#的垃圾回收机制
- 全面分析Java的垃圾回收机制
- JVM详解之Java垃圾回收机制详解和调