首页 > 搜索 > 老年代回收算法,Java的垃圾回收机制、年轻代与老年代

老年代回收算法,Java的垃圾回收机制、年轻代与老年代

互联网 2020-10-26 09:29:01
在线算命,八字测算命理

目录1 被判定为垃圾的标准2 判定对象是否为垃圾的算法2.1 引用计数法2.2 可达性分析算法3 垃圾回收的算法3.1 标记-清除算法(Mark and Sweep)3.2 复制算法(Copying)适用于对象存活率低的场景(年轻代中),因为需要复制的对象少。年轻代与老年代后面会介绍到。3.3 标记整理(Compacting)适合存活率高(例如老年代中)3.4 分代收集算法(Generational Collector)后面的垃圾回收器等等有机会再补充。

1 被判定为垃圾的标准

没有被其它对象引用

2 判定对象是否为垃圾的算法引用计数法可达性分析算法2.1 引用计数法

通过判断对象的引用数量来决定对象是否可以被回收每个对象实例都有一个引用计数器,被引用则+1,完成引用则-1。任何引用计数为0的都可以被当做是垃圾。

优点执行效率高(只需要查找出引用计数为0的即可),程序受影响小缺点当出现循环引用的时候(父对象有一个对子对象的引用,子对象又反过来引用父对象。或者出现两个对象相互引用),引用计数不可能为0,也就是不能被回收,可能造成内存泄露比如:在这里插入图片描述

2.2 可达性分析算法

通过判断对象的引用链是否可达来判断对象是否可回收在这里插入图片描述什么对象可以作为GC 的root对象在这里插入图片描述

3 垃圾回收的算法3.1 标记-清除算法(Mark and Sweep)

标记:从根集合进行扫描,对存活的对象进行标记。清除:对堆内存进行线性遍历,回收不可达对象内存。在这里插入图片描述

3.2 复制算法(Copying)适用于对象存活率低的场景(年轻代中),因为需要复制的对象少。年轻代与老年代后面会介绍到。分为对象面和空闲面对象在对象面中创建存活的对象会被复制到空闲面复制之后将对象面中所有对象全部清除在这里插入图片描述3.3 标记整理(Compacting)适合存活率高(例如老年代中)

标记:从根集合进行扫描标记存活的对象清除:移动所有存活的对象,按照内存地址次序依次排列,然后将末端地址以后的所有对象清除在这里插入图片描述

3.4 分代收集算法(Generational Collector)

年轻代、老年代、永久代?在这里插入图片描述在这里插入图片描述年轻代:进可能快速收集生命周期短的对象一般分为:一个Eden区,两个survivor区在这里插入图片描述年轻代回收演示(Minor GC):在这里插入图片描述对象在什么时候会进入老年代1、当年龄到达默认最大值时,对象会晋升老年代。默认15,可通过该参数设置在这里插入图片描述2、Survivor中放不下的3、新生成的大对象在这里插入图片描述分代收集算法特点:在这里插入图片描述**老年代:**存放生命周期较长的对象,使用标记-清理或标记-整理方法Major GC 是清理永久代。Full GC 是清理整个堆空间—包括年轻代和永久代。Full GC比 Minor GC慢 ,但执行频率低触发条件:在这里插入图片描述常用调优参数在这里插入图片描述分代收集的GC分类:

Minor GC (年轻代中的垃圾收集,采用复制算法)Full GC 老年代中,由于对老年代的回收一般会伴随年轻代,所以叫做Full GC后面的垃圾回收器等等有机会再补充。
免责声明:非本网注明原创的信息,皆为程序自动获取互联网,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责;如此页面有侵犯到您的权益,请给站长发送邮件,并提供相关证明(版权证明、身份证正反面、侵权链接),站长将在收到邮件12小时内删除。

相关阅读

一周热门

查看更多