JAVA垃圾回收器如何工作

停止-复制(stop and copy)

将所有存货的对象从当前的堆复制到另一个堆,没有被复制的全部都是垃圾。

这种方式效率会降低,原因有两个。

1. 得有2个堆,在这2个堆之间来回使用。也就是需要多使用一个堆的空间。

2.当程序进入稳定状态后,可能只会产生少量、甚至没有垃圾,但是仍然会来回复制,就显得很浪费。


标记-清扫(mark and sweep)

从堆栈和静态存储区出发,遍历所有的引用,从而找出所有存活的对象,并且对这些对象进行标记。

当标记工作做完后,就进行清理工作。但是这种方式速度非常慢,只有在产生少量垃圾或不产生垃圾时,速度就会很快。


按代分配策略

这种策略认为大多数对象的寿命是短暂的,把对象按寿命长短进行划分。刚生成不久的对象被划分为最年轻的一代,虚拟机对这部分进行最为频繁的回收行为。

当这个堆中有对象的长时间存在时,则将其划分到较为年长的一代中,年长的堆的回收频率也较低。


渐进式收集策略

在进行垃圾回收的时候,需要将程序停止,影响了用户的体验。渐进式收集策略采用分步回收的方式,例如先收集20%的内存中的垃圾,剩下的80%则不受影响。

收集完成后,接着收集下一个区域的垃圾。


自适应技术

在合适的阶段,切换合适的回收策略。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值