如果对象大小大于固定大小区域且小于固定大小区域的一半,GC1如何分配对象?
How GC1 allocates objects if size of object bigger than fixed-size region and less than half of the fixed-size region?
查看文档
oracle gc1 description
我还没有找到 GC1 算法如何为大小大于区域大小(例如 1% 到 20%)的对象分配内存的答案。据记载,对于大于一半区域大小的对象,将像 Humongous Object 一样进行分配。
从逻辑上讲,它也应该使用多个区域。但是:
1) How close should they be? Should they be contiguous?
2) Can other objects be located in the region, fitted to the rest of
the region size, where second part of object located?
它们应该有多近?它们应该是连续的吗?
- 超过 space 区域大小一半的对象被视为
巨大的物体。它们直接分配在 special humongous
区域免费,连续区域立即制作
终身一代的一部分(而不是伊甸园)。
以上内容来自 Optimizing Java 一书中关于 G1 gc 的注释。巨大的区域是连续的。
是否可以在区域中放置其他对象,以适应区域大小的其余部分,对象的第二部分位于何处?
第二个答案的以下文档来自https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/g1_gc_tuning.html#humongous
- 因为每组 StartsHumongous 和 ContinuesHumongous
regions 只包含一个巨大的对象,末尾之间的 space
巨大的物体和最后一个区域的末端
对象未使用。对于比 a 稍大的物体
堆区域大小的倍数,这个未使用的 space 会导致
堆变得支离破碎。
根据上面的文档,space 中不会分配其他对象。
查看文档 oracle gc1 description 我还没有找到 GC1 算法如何为大小大于区域大小(例如 1% 到 20%)的对象分配内存的答案。据记载,对于大于一半区域大小的对象,将像 Humongous Object 一样进行分配。 从逻辑上讲,它也应该使用多个区域。但是:
1) How close should they be? Should they be contiguous?
2) Can other objects be located in the region, fitted to the rest of the region size, where second part of object located?
它们应该有多近?它们应该是连续的吗?
- 超过 space 区域大小一半的对象被视为 巨大的物体。它们直接分配在 special humongous 区域免费,连续区域立即制作 终身一代的一部分(而不是伊甸园)。
以上内容来自 Optimizing Java 一书中关于 G1 gc 的注释。巨大的区域是连续的。
是否可以在区域中放置其他对象,以适应区域大小的其余部分,对象的第二部分位于何处?
第二个答案的以下文档来自https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/g1_gc_tuning.html#humongous
- 因为每组 StartsHumongous 和 ContinuesHumongous regions 只包含一个巨大的对象,末尾之间的 space 巨大的物体和最后一个区域的末端 对象未使用。对于比 a 稍大的物体 堆区域大小的倍数,这个未使用的 space 会导致 堆变得支离破碎。
根据上面的文档,space 中不会分配其他对象。