对JVM的学习—内存分配策略

文章详细阐述了Java垃圾收集器的几个关键策略:对象通常在Eden区分配,大对象直接进入老年代以避免复制,长期存活的对象会晋升到老年代,当Survivor空间中相同年龄对象的总和超过其一半时,这些对象可直接晋升,以及在MinorGC前进行空间分配担保以确保安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

策略一:对象优先在Eden区分配

策略二:大对象直接进入到老年代

大对象要求大额的连续的内存空间,直接进入老年代是为了避免,大对象在Eden区和两个Survivor区来回复制。

策略三:长期存活的对象进入老年代

对象在Eden区诞生,经过第一次Minor GC后仍然存活,然后如果被Survivor容纳,就会被挪到Survivor区年龄记为1,每熬过一次Minor GC后加一岁,超过一定年龄后就会被晋升入老年代(默认年龄为15)

策略四:动态对象年龄判断

如果在Survivor空间中相同年龄所有对象大小的总和大于 Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,无须等到要求的年龄。

策略五:空间分配担保

在发生Minor GC之前,虚拟机必须先检查老年代最大可用的连续空间是否大于新生代所有对象总 空间,如果这个条件成立,那这一次Minor GC可以确保是安全的。如果不成立,则虚拟机会先查看设置是否允许担保失败(Handle Promotion Failure);如果允 许,那会继续检查老年代最大可用的连续空间是否大于历次晋升到老年代对象的平均大小,如果大 于,将尝试进行一次Minor GC,尽管这次Minor GC是有风险的;如果小于,或者设置不允许冒险,那这时就要改为进行一次Full GC。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值