【JVM】GC垃圾回收(三)——零落成泥碾作尘,只有香如故

【引子】

         当世界上最后一个记得我的生命也忘记了我的时候,我该如何自处呢?我想我会最后看一眼我深爱的故乡,然后将占用这个世界的最后一缕精华也散去,让灵魂永归沉寂。GC垃圾回收机制也是如此,每一个最终消亡的对象,都会从堆中完全消失,只有它为我们对数据处理后的结果依然留存。

【正文】

         那么JVM的是如何把已经失去所有引用的对象拿走的呢?

         下面介绍几种经典的算法思想

          1.标记-清楚算法

         

             就是先标上对象已死,然后释放空间

             但是有两个不足:a. 标记和清除两个过程,都是一块一块内存处理的,效率比较低

                                       b.清除后,产生大量内存碎片,不好利用

         

       2.复制算法:针对不足a,  

           

        只用一半内存,然后这半个需要内存回收的时候,把存在的对象复制一份存到原先空余的连续地址上

        这样清除的时候,可以一下子释放整个半个的内存

        因为新生代的对象98%是朝生夕死的, 所以不需要按照1:1比例来划分内存空间 。  而是将内存分为一块较大的Eden空间和两块较小的Survivor空间。每次使用Eden和其中一块Survivor,当回收时,将 还存活着的对象一次性地复制到另外一块Survivor空间上,最后清理Eden和刚才用过的Survivor。 Eden和Survivor大小比例是8:1.      

  3.标记-整理算法 

          


           因为存活率较高时,复制算法要复制过多的对象,所以效率会变低。 如果不想要浪费50%的空间,就需要有额外的空间进行分配担保,以应对被使用的内存中所有对象都100%存活的极端情况,所以老年代一般不能直接选用这种算法。

【总结】

         零落成泥碾作尘,只有香如故。          

                       


评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农胖虎-java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值