JVM垃圾回收之复制算法

  1. 复制算法的核心就是,将原有的内存空间一分为二,每次只用其中的一块,在垃圾回收时,将正在使用的对象复制到另外一个内存空间中,然后将该内存空间清空,交换两个内存的角色,完成垃圾回收。
  2. 如果内存中的垃圾对象较多,需要复制的对象就较少,这种情况下适合使用该方式并且效率比较高,反之,则不适合。
  3. 优点:在垃圾对象多的情况下,效率较高。清理后,内存无碎片。
  4. 缺点:在垃圾对象少的情况下,不适用,如:老年代内存。分配的2块内存空间,在同一个时刻,只能使用一般,内存使用率较低。

在这里插入图片描述垃圾回收
在这里插入图片描述 复制对象
在这里插入图片描述 交换角色
在这里插入图片描述

  • 实际运用

在这里插入图片描述

  1. 在GC开始的时候,对象只会存在于Eden区和名为“From”的Survivor区,Survivor区"To"是空的。
  2. 紧接着进行GC,Eden区中所有存货的对象都会被复制到“To”,而在“From”区中,仍存活的对象会根据他们的年龄值来决定去向。年龄到达一定值(年龄阀值,可以通过-XX:MaxTenuringThreshold来设置)的对象会被移动到年老代中,没有达到阀值的对象会被复制到“To”区域。
  3. 经过这次GC后,Eden区和From区已经被清空。这个时候,“From”和“To”会交换他们的角色,也就说新的“To”就是上次GC前的“From”,新的“From”就是上次GC前的To”。不管怎样,都会保证名为To的Survivor区域是空的。
  4. GC会一直重复这样的过程,直到“To”区被填满之后,会将所有对象移动到年老代中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值