码迷,mamicode.com
首页 > 其他好文 > 详细

jvm的垃圾回收

时间:2019-01-13 02:01:32      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:标记   size   object   回收对象   root   带来   垃圾   不可   调用   

参考: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的垃圾回收

标签:标记   size   object   回收对象   root   带来   垃圾   不可   调用   

原文地址:https://www.cnblogs.com/lvcongblog/p/10261458.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!