笔记:标记-复制算法

本文详细介绍了JVM新生代垃圾收集器中常用的标记-复制算法,该算法利用新生代对象的短暂特性,高效地处理垃圾。在HotSpot虚拟机中,新生代被划分为Eden和两个Survivor空间,每次GC后仅复制存活对象至另一Survivor空间。当Survivor空间不足时,对象会通过分配担保进入老年代。这种设计确保了内存的有效使用,同时提供了应对高存活率情况的安全保障。
摘要由CSDN通过智能技术生成

以下内容来自《深入理解JVM虚拟机第三版》,仅做笔记使用:

1、什么时候使用标记-复制算法


由于新生代对象具有朝生夕死的特点,所以大部分新生代收集器选择使用标记-复制算法(因为仅复制存活对象,而新生代每次标记的存活对象是很少的)。

2、算法的具体实施


在算法的具体实施上,HotSpot虚拟机的Serial、ParNew等新生代收集器把新生代分为一块较大的Eden空间和两块较小的 Survivor空间,每次分配内存只使用Eden和其中一块Survivor。发生垃圾收集时,将Eden和Survivor中仍然存活的对象一次性复制到另外一块Survivor空间上,然后直接清理掉Eden和已用过的那块Survivor空间。HotSpot虚拟机默认Eden和Survivor的大小比例是8∶1,也即每次新生代中可用内存空间为整个新生代容量的90%(Eden的80%加上一个Survivor的10%),只有一个Survivor空间,即10%的新生代是会被“浪费”的。

3、内存担保


但任何人都没有办法百分百保证每次回收都只有不多于10%的对象存活,因此还有一个充当罕见情况的“逃生门”的安全设计,当Survivor空间不足以容纳一次Minor GC之后存活的对象时,就需要依赖其他内存区域(实际上大多就是老年代)进行分配担保。
内存的分配担保好比我们去银行借款,如果我们信誉很好,在98%的情况下都能按时偿还,于是 银行可能会默认我们下一次也能按时按量地偿还贷款,只需要有一个担保人能保证如果我不能还款时,可以从他的账户扣钱,那银行就认为没有什么风险了。内存的分配担保也一样,如果另外一块 Survivor空间没有足够空间存放上一次新生代收集下来的存活对象,这些对象便将通过分配担保机制直 接进入老年代,这对虚拟机来说就是安全的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值