虚拟机(四).内存分配策略

本文详细解析了Java中的MinorGC和FullGC过程,解释了对象如何从Eden区迁移至Survivor区及老年代,阐述了大对象与老对象的判定标准,以及内存分配担保机制的工作原理。

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

1.Minor GC和Full GC

2.对象优先放到Eden中

3.大对象放到老年代中

4.老对象放到老年代中

5.内存分配担保

 

1.Minor GC和Full GC

Minor GC:发生在新生代的垃圾回收。

Full GC:发生在老年代的垃圾回收。

Full GC的时间大概在Minor GC的10倍以上

 

2.对象优先放到Eden中

前文说过,新生代会使用复制算法,而虚拟机是采用8:1:1来配置新生代的内存空间的。8的那一份叫Eden,两个1的都叫survivor。对于Eden中的对象,进行Minor GC之后,活下来的会进入survivor中。

当new了一个对象,这个对象会被优先放到Eden中,只有经历过最少一次的Minor GC,才会进入survivor中

 

3.大对象放到老年代中

所谓大对象,就是那种连续占用很大内存空间的对象,这种对象会直接进入老年代

 

4.老对象放到老年代中

(1).什么叫老对象?由2知道,每次Minor GC后,survivor中对象都可能会发生变化。一个对象经历一次Minor GC没死,就会加一岁,当它年满15岁,就会被认为是老对象,进入老年代。

(2).上面是固定的形成老对象的方法,成为老对象还有一种方法:当survivor中某一年纪的对象占内存空间的总和大于总survivor空间的一半时,这个年纪及以上年纪的对象会被认为是老对象从而被放到老年代

 

5.内存分配担保

因为新生代使用的是复制算法,存活的对象是放在survivor中的,当某一次存活的对象超过survivor内存时,此时会看老年代。老年代根据情况看看要不要进行内存分配担保(可以认为是银行的贷款)

(1).当新生代的对象内存总和小于老年代的最大连续空闲内存时,这是安全的。

(2).当老年代的最大连续空闲内存时大于新生代平均晋升到老年代的大小,这是有风险的,但是还是会执行。

(3).万一哪一次,新生代晋升到老年代的大小超过了老年代最大连续空闲内存,那么就会进行一次Full GC

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹏哥哥啊Aaaa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值