如果对象的大小大于固定大小区域且小于固定大小区域的一半,GC1如何分配对象?

时间:2018-08-13 19:32:03

标签: java memory garbage-collection allocation

查看文档 oracle gc1 description 我尚未找到答案,GC1算法如何为大小大于区域大小(例如从1%到20%)的对象分配内存。据记载,对于大于区域大小一半的对象,将像Humongous Object一样进行分配。 从逻辑上讲,它也应该使用多个区域。但是:

  

1)它们应该有多近?它们应该是连续的吗?

     

2)是否可以将其他物体放置在该区域中,并适合   区域大小,对象的第二部分位于何处?

1 个答案:

答案 0 :(得分:1)

它们应该有多近?它们应该是连续的吗?

  • 对象占用的空间大于区域大小的一半 巨大的物体。它们直接以特殊的巨大分配 区域,它们是免费的,连续区域,可立即创建 终身制一代的一部分(而不是伊甸园)。

以上内容摘自G1 gc的《优化Java》一书中的注释。巨大的区域是连续的。

是否可以将其他对象放置在与对象第二部分所在的区域相符的区域中?

以下第二个答案的文档来自https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/g1_gc_tuning.html#humongous

  • 因为每个单独的 StartsHumongous ContinuesHumongous 集 区域仅包含一个巨大的物体,末端之间的空间 巨大物体的距离和最后一个区域的末端(由 对象未使用。对于刚好大于 堆区域大小的倍数,此未使用的空间可能导致 堆变得零散。

根据上述文档,该空间中不会分配其他对象。