JVM有哪些垃圾回收算法

1.新生代的垃圾回收算法是复制算法

2.新生代内存空间不足,会触发Minor GC回收掉新生代垃圾对象

新生代内存有两块内存区域

方法一:标记整理算法-------不好的垃圾回收思路

     直接对一块内存空间,回收垃圾对象,保留存活对象

问题:

       内存碎片太多,会造成大量的内存浪费.很多的内存碎片无法使用.

 

方法二: -------合理的垃圾回收思路

 复制算法:

       把新生代内存划分为两块内存区域,然后只使用一块内存,待那块内存快满的时候,把里面存活的对象一次性转移到另一块内存区域中,保证没有内存碎片,接着一次性回收原来的那块内存区域中的垃圾,再次空出来一块内存区域,两块内存区域就这么重复循环使用.

        缺点:

                 只有一半的内存可以使用,内存的使用效率低.

          复制算法的优化: Eden区和Survivor区

                绝大多数的对象都是周期非常短的对象,只有很少是长期存活的对象.

3.由复制算法衍生出来的新生的分区

      真正的复制算法是把新生代内存对象分为三块. 1个Eden区 和2个Survivor区 

      Eden区占80%  Survivor区占10%

     这样做的好处:

          只有10% 的内存空间是闲置的,90%的内存空间被使用上了.

         平时使用的是一块Eden区和一块Survivor区.

          Eden:Survivor=8:1

          对象刚开始时分配在Eden区,Eden区快满时,触发垃圾回收.此时把Eden区中的存活对象一次性转移到一块空着的Survivor区中,接着Eden区被清空,再次分配新对象到Eden区.     Eden区和一块Suivivor区中都是有对象的,其中Survivor区里存放的是上一次MinorGC后存活的对象.  如果下次Eden区满,再次触发MInor GC,就会把Eden区和放着上一次Minor GC后存活对象的Suivivor区中的存活对象,转移到另一块的Suivivor区中.

         始终保持一块Survivor区是空着的,就这样一直循环使用这三块内存区域. 

          这样垃圾回收的性能,内存碎片的控制,内存使用的效率都非常好.

                              

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值