gpt4 book ai didi

java - 在标记-清除-压缩的紧凑阶段之后,空闲内存块是否会进入伊甸园?

转载 作者:行者123 更新时间:2023-11-30 05:47:07 25 4
gpt4 key购买 nike

据我所知,堆中有一个用于年轻对象的实体空间和一个用于旧对象的实体空间。收集期间,对象会在两个区域中移动,但在第二个区域中,它们也会被压缩。我的问题是为什么它们被压缩,释放的固体区域用于什么,伊甸园还是新的大旧对象?

最佳答案

让我们看看 HotSpot 堆(其他实现可能有所不同)。

Young代分为三个区域,Eden空间和两个survivor空间。大多数对象最初是使用简单(非常快)的指针碰撞方法在 Eden 空间中分配的。为了避免线程争用,每个应用程序线程都有自己的线程本地分配 block (TLAB)。当 GC 发生在这里时, Activity 对象被复制到幸存者空间之一。 Activity 对象在复制到老年代之前会在幸存者空间之间复制多次(由保有阈值决定)。这就是在 Minor GC 期间移动对象的方式。

不同的算法对老年代的GC(major GC)的处理方式不同。例如,CMS 可以识别 Activity 对象之间的间隙,并将它们添加到列表中,以便为正在升级的对象分配空间。在某些时候,碎片变得太大,并且发生完全压缩收集。在此期间,所有对象都被重新定位为在堆底部连续,因此不存在间隙。

为了回答您的问题,旧一代被压缩以消除碎片。然后,压缩数据上方的内存区域将用于在 Minor GC 期间提升对象。年轻一代和老一代仍然是分开的。

关于java - 在标记-清除-压缩的紧凑阶段之后,空闲内存块是否会进入伊甸园?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54656614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com