堆里面的分区:Eden,survival from to,老年代,各自的特点。

本文详细解析了Java中Eden区及Survival区的对象生命周期,包括Minor GC如何进行清理及对象晋升老年代的条件,例如对象年龄达到阈值、大对象直接晋升等。

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

Eden区的对象都是朝生夕死,发生minor gc的时候会清除eden区和survival区的,把存活的对象移到另一个Survival区,该survial区由老年代保证。当在年轻代中对象经过多次minor gc以后还存活,达到老年代的年纪,就会移动到老年代,还有就是大对象在年轻代无法存储,直接转到老年代,还有可能因为担保而进入老年代的。


在Java中,内存管理是由JVM(Java Virtual Machine)自动进行的,但你可以通过`Xms` `Xmx` 参数设置初始大小最大大小。然而,Eden、Survivor(通常分为From SpaceTo Space)、年代(Old Generation)是HotSpot JVM中的默认分代模型,它们之间的比例不是直接设置为特定值的。 默认情况下,Eden区用于存放新创建的对象,Survivor区用于对象的存活测试,而年代主要存放长期存活的对象。在设置大小时,你可以指定整个的大小,但这并不意味着可以直接分配给每个区域的具体数值。 如果你想要调整新生代(包括Eden两个Survivor空间)的比例,可以使用以下参数: - `-XX:NewRatio`:这是Eden空间与总的新生代空间的比例。例如,`-XX:NewRatio=3`表示新生代占总的1/4,其余75%是年代。 如果你想更精细地控制各个子区的大小,尤其是年轻代,可以使用以下参数: - `-XX:InitialHeapSize` 或 `-Xms`: 设置初始大小。 - `-XX:MaxHeapSize` 或 `-Xmx`: 设置最大大小。 - `-XX:MinHeapFreeRatio` `-XX:MaxHeapFreeRatio`: 分别设置最小最大空闲比列。 - `-XX:SurvivorRatio`: 设置Survivor区的大小相对于Eden区的比例。 至于你提到的"eden 200m, survivor 20m, 年代 1g",这可能不是一个标准配置,因为JVM内部的分区是动态的,而且这些值通常是根据垃圾回收策略应用程序的行为自适应调整的。如果要手动指定,你需要确保总不超过最大大小,并且满足上述参数的要求。 如果你真的想尝试这个配置,请先备份重要数据,然后在命令行中运行JVM启动选项,如: ```sh java -XX:NewRatio=3 -XX:InitialHeapSize=200M -XX:MaxHeapSize=1G -XX:SurvivorRatio=5 -XX:MaxTenuringThreshold=<适当阈值> ... ``` 记得替换 `<适当阈值>` 为合适的对象晋升到年代的年龄阈值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值