JVM垃圾回收算法

jvm垃圾回收算法及思想

1.标记清除算法

算法分为标记跟清除两个步骤:

  • 标记出所有需要被回收的对象
  • 标记完成后统一回收所有被标记的对象

从效率跟空间上来看这种算法存在不足:标记跟清除都需要扫描所有对象,有些对象是常驻内存的,存在着很多多余的操作;清除之后空间存在很多的不连续,以后创建对象地址分配无法找到连续的内存,会频繁的触发垃圾回收。


2.复制算法

该算法是为了解决效率问题,将内存分为相同的两块,每次GC的触发会将存活的对象复制到另一边,然后需要回收的一遍全部清除,这样的方式在效率上提升显著,然而代价太高。

现在的商业虚拟机采用这样算法进行回收,这里面会存在集合名词:

  • Eden Space : 新生区(一个人(对象)出来(new 出来)后会在Eden Space区)
  • Survivor Space:幸存区(用于保存在eden space内存池中经过垃圾回收后没有被回收的对象)
  • Tenured Gen:老年代(用于保持已经在survivor space内存池中存在了一段时间的对象)

结合深入理解jvm书籍理解:Eden Space 与Survivor Space的内存比例为8:1,由于创建对象频繁,Eden Space需要大比例内存,如果触发GC是,将采用复制算法将存活的对象复制到Survivor Space;当Survivor Space空间不足时,GC触发会将还存活的对象放入 Tenured Gen,整个过程从业务上优化了复制算法,从而显著的提高了JVM的GC性能。

需要明白的一点,GC收集器分为不同的类型,实际上在根据真实的业务需要去选择适配的收集器,并没有一个万能的收集器,这也是HotSpot存在多个不同收集器的原因。

来源:深入理解JVM

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值