【JVM】垃圾收集算法思想---GC (二)


         JVM在做垃圾回收的时候,会检查堆中的所有对象是否会被这些根集对象引用,不能够被引用的对象就会被垃圾收集器回收。


1.      标记-清除算法(Mark-Sweep)

         分为“标记”和“清楚”两个阶段:标记所有需要回收的对象,完成标记后统计收回被标记的对象。

         缺点:效率问题---标记和清楚的过程比较浪费时间;

         空间问题---标记清除后会产生大量不连续的内存碎片。

 

 

 

 

 

 

2.      复制算法(Copying)

         将可用内存划分为大小相等的两块,每次只使用其中一块,当其中一块内存使用完了,就将还活着的对象复制到另一块上面,然后在把之前的内存一次性清除。然后再把剩余的可用空间进行平均两分。

         优点:提高了效率。

         缺点:在对象存活率较高时执行的复制次数比较多,并且空间浪费很严重(50%)。

 


      (多数商业是虚拟机采用这种收集算法,经研究表明,新生代中的对象98%是朝生夕死---存活周期比较长,所以不需要完全按照1:1的比例进行内存的分割,而是将内存划分为一个Eden空间和两个survivor空间。具体的回收机制是这样:回收时,将Eden和survivor中还存活的对象复制到另一个surivor 中,然后清空Eden和survivor,然后周而复始。其中Hotspot虚拟机默认的Eden和survivor的大小比例是8:1。当survivor内存被占满时,会从Eden中重新分配出一块内存)

 

3.      标记-整理算法(Mark-Compact)

          该算法与标记—清除算法类似,但是在标记后不是进行清除操作,而是进行存活对象的移动操作,既清除掉死掉的对象然后将仍然存活的对象进行整理移动。

 

 

4.      分代收集算法(Generational Collection)

         根据对象的存活周期不同将内存划分几块。例如一般Java堆分为新生代和老年代,其中新生代中的对象存活周期短,老年代中的对象存活周期长,这样针对如此情况,在新生代采用复制算法,在老年代采用标记—清除或者标记—整理来进行内存回收,这样可以很好的节约资源和提高内存。




1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下 4载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论 62
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值