jvm的垃圾回收

Posted lvcongblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jvm的垃圾回收相关的知识,希望对你有一定的参考价值。

参考:https://www.cnblogs.com/xiaoxi/p/6486852.html

 

1.如何判断对象已死

  即不在被任何途径引用的对象

a.引用计数法

   每当有一个地方引用该对象时,则计数器加1,否则减1,当为-1时则表示对象已死,但是Java语言中没有用到这个算法,可以用对象的相互引用来证明

 /**
 * 虚拟机参数:-verbose:gc
 */
public class ReferenceCountingGC
{
    private Object instance = null;
    private static final int _1MB = 1024 * 1024;
    
    /** 这个成员属性唯一的作用就是占用一点内存 */
    private byte[] bigSize = new byte[2 * _1MB];
    
    public static void main(String[] args)
    {
        ReferenceCountingGC objectA = new ReferenceCountingGC();
        ReferenceCountingGC objectB = new ReferenceCountingGC();
        objectA.instance = objectB;
        objectB.instance = objectA;
        objectA = null;
        objectB = null;
        
        System.gc();
    }
}

b.根收索

技术分享图片

以GC root为收索起点,当一个对象没有引用链时则表明对象不可用

 

回收过程:当对象没有引用链的时候,则会被进行第一标记和筛选(条件是没有覆盖finaliza或者该方法已被虚拟机调用过),如果判定要执行finaliza方法,会把其放到队列,然后由虚拟机自动去执行,

如何finaliza中没有成功的拯救,那么它被再次标记,表明即将回收。

 

3.回收算法

  a.标记回收算法:标记需要回收的对象,标记结束回收对象。效率不高且带来大量的碎片空间

  b.复制算法:把内存两块,使用其中一块来开销,当回收时,把未被回收的分配到另一块中。现代的分带回收中的新生带使用这种方法

  c.标记整理算法:前面与标记回收算法一样,但是后面不是是把所有的往一端移动。老年代使用这种算法

4.分带收集

  技术分享图片

 

 

 

 

 























以上是关于jvm的垃圾回收的主要内容,如果未能解决你的问题,请参考以下文章

JVM的垃圾回收机制 总结(垃圾收集回收算法垃圾回收器)

JVM的垃圾回收机制 总结(垃圾收集回收算法垃圾回收器)

JVM垃圾回收器

JVM垃圾回收机制 (垃圾判断,垃圾回收算法,垃圾回收器,五种引用)jvm

JVM垃圾回收优化实战-G1垃圾回收器

JVM垃圾回收篇(垃圾回收算法)