对象内存分配

本文深入探讨了Java垃圾回收机制的细节,包括对象在不同代的分配策略、MinorGC与FullGC的区别、大对象直接进入老年代的条件、长期存活对象的判断标准以及动态年龄判定等关键概念。

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

1 对象优先在eden 分配

注意Minor GC 和Full GC 区别

新生代GC(Minor GC) :指发生在新生代的垃圾回收动作 ,因为java大多数对象都具有朝生夕灭的特点,所以Minor GC 非常频繁 ,回收效率也比较快
老年代GC(Full GC/Major GC) :指发生在老年代的垃圾回收动作,一旦出现了MajorGC 通常带有一次的MinorGC (但不一定绝对) . MajorGC 一般会比MinorGC快10倍以上

2 大对象直接进入老年代 大对象: 连续内存空间的java对象

例外 :若出现朝生夕灭且大对象的情况, 在新生区采用复制算法收集内存的同时,进入了老年代.那么产生了新老拷贝的情况出现,而虚拟机给了一种可以调节的方法 --XX:PretenureSizeThreshold参数,让大于这个参数的值直接进行老年代,这样就避免在Eden和survivor区直接发生大内存的拷贝

注意:PretenureSizeThreshold参数 只对Serial 和ParNew 两块收集器有效

3长期存活的对象直接进入老年代 那么如何判断这个对象是否长期存活的标准呢? java虚拟机在这里有一定的规则规范 ----对象年龄计数器 当对象每次在Minor GC 存活 , 并能被Survivor容纳的话 对象年龄为1 并且每次在survivor经历一次MinorGC 年龄就加一岁 ,默然到达15岁就直接进入老年代

通过--XX:MaxTenuringThreshold 来进行设置

4 动态年龄的判定

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

5空间搭配担保 在发生MinorGC的时候,虚拟机会进行检测 每次晋升到老年代平均大小是否大于老年代的剩余空间大小,如果大于这进行FULLgc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

你今天学习了吗?

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

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

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

打赏作者

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

抵扣说明:

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

余额充值