首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java堆空间有哪些不同之处?

Java堆空间有哪些不同之处?
EN

Stack Overflow用户
提问于 2014-01-12 06:28:01
回答 1查看 395关注 0票数 0

在JConsole中,我看到了不同的堆空间“伊甸园”、“幸存者”、“老城”。它们之间的区别是什么?

EN

回答 1

Stack Overflow用户

发布于 2014-01-12 07:54:50

请参阅Memory Management in the Java HotSpotTM Virtual Machine白皮书。

Java将堆划分为两个空间,称为“新一代”和“老一代”。新一代被进一步划分为伊甸园和幸存者空间。

之所以有新的和旧的世代,是因为Java程序中几乎所有的对象都只存在很短的一段时间,并且如果可以在不检查所有长期对象的情况下释放所有短期对象,垃圾收集将会快得多。例如,程序通常具有配置设置和共享数据对象,这些对象在程序的整个生命周期中都有效,而像StringBuilders这样的对象在创建它们的方法甚至还没有返回之前就一直在被创建,它们已经变成了垃圾。理想情况下,在几次方法调用后创建的所有临时对象都可以立即回收,而不会浪费时间查看其他任何东西。

Java如何区分短期对象和长期对象?通过将它们放在不同的存储桶中,并计算它们存活下来的垃圾收集数量。全新的物体进入伊甸园空间。Eden空间经常被垃圾收集,但在检查时,那里几乎所有的东西都已经是垃圾了。少数不是垃圾的对象被移动到Survivor空间。Survivor空间中的对象被标记为它们存活下来的垃圾收集量。一些对象变得不可访问,并相对较快地被垃圾收集,但另一些对象保持可访问,并且在经历了一定数量的垃圾收集后,Java假定它们是长期对象,并将它们提升到老一代。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21068698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档