HotSpot新生代的垃圾回收分配比例8:1:1

新生代中的对象98%是朝生夕死的,所以并不需要按照1: 1的比例来划分内存空间,而是将内存分为一块较大的Eden空间和两块较小的Survivor空间,每次使用Eden和其中的一块Survivor。当回收时,将Eden和Survivor中还存活着的对象一次性地拷贝到另外一块Survivor空间上,最后清理掉Eden和刚才用过的Survivor的空间。HotSpot虚拟机默认Eden和Survivor的大小比例是8: 1,也就是每次新生代中可用内存空间为整个新生代容量的90%(80%+10%),只有10%的内存是会被“浪费”的。当然,98%的对象可回收只是一般场景下的数据,我们没有办法保证每次回收都只有不多于10%的对象存活,当Survivor空间不够用时,需要依赖其他内存(这里指老年代)进行分配担保( Handle Promotion )。内存的分配担保就好比我们去银行借款,如果我们信誉很好,在98%的情况下都能按时偿还,于是银行可能会默认我们下一次也能按时按量地偿还贷款,只需要有一个担保人能保证如果我不能还款时,可以从他的账户扣钱,那银行就认为没有风险了。内存分配担保也是一样的,如果另一块的Survivor没有足够的内存空间,存放上一次新生代收集下来的存活对象,这些对象则直接通过分配担保机制进入老年代。
图解:
HotSpot新生代的垃圾回收分配比例8:1:1_第1张图片
以上知识均来源于该书籍,有钱的小伙伴可以去购买正版书籍支持一下。
提取码:123456
《深入理解Java虚拟机JVM高级特性与最佳实践(周志明)》
https://306t.com/file/28095605-451122608

你可能感兴趣的:(深入理解java虚拟机)