垃圾回收机制笔记

1.对象怎么判定已死:

1.对象引用计数法
每个对象都有一个引用计数器,当引用计数器归零时,即可判定对象已死。但是在互相引用的情况下,无法判定他们是否已死。

2.图论(节点不可达)
    从GC root对象开始,如果发现有一个点,或者一个区域不可达,即判定这个区域的对象已死。

GC ROOT对象:
    1.方法区静态变量的对象引用的对象。
    2.方法区常量引用的对象引用的对象。
    3.方法栈中局部变量表中的对象引用的对象。
    4.本地方法栈的对象引用的对象。

2.方法区回收:

1.常量回收
    没其他地方引用这个字面量了。
2.类卸载(同时满足)
    1>.这个类在程序没有任何实例的存在。
    2>.类加载器被回收了。
    3>.字节码对象没有被任何地方使用,没反射的功能存在了。

3.怎么回收?

回收算法:
1.标记清除
    容易产生大量的碎片,内存利用率越来越低。

2.标记-复制-清除
    内存划分为两等份,回收一份后,直接复制到另一份。解决碎片的问题,但是整个内存的利用效率太低。

3.标记-整理-清除
    把存活对象,向内存的一边移动,然后进行边界之外的内存进行清除。方法区的 大多对象时长久存活的,一般选择整个方式。

4.分代复制算法
    应用于堆这种有大量的朝生夕灭的对象的区域,新生代分为一个Eden区和两个survive区,比例8:1:1。第一次进行MinorGC回收时,存活的进行survive区,到达一定年龄或者条件时进入老年代。

内存分代图

永久区是方法区,年轻代和老年代是堆。

4.回收的策略:

1.对象优先分配Eden区,大对象直接进行老年代,长期存活的对象进入老年代。

2.年龄计数器,达到一定年龄即进入老年代。

3.动态判断年龄,当相同年龄的对象的值大于Surviver空间的一半,大于等于这个年龄  的对象进入老年代。

4.空间担保:
    MinorGC后可能出现,存活对象大于survive空间的大小,那就需要老年代作为担保人。
    MinorGC时,判断前面进入老年代的平均值是否大于老年代剩下的值,大于FullGC,小于并且担保打开,进行MinorGC,否则上一步。如果担保失败,那再进行一次FullGC。
    为了减少FullGC的次数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值