如何知道G1垃圾收集器使用的区域大小?

kei*_*iki 8 java g1gc

我目前正在研究最新Java 8版本的G1 GC。

我在“庞大的分配”方面遇到了问题,所以我想知道我的区域大小。

我如何找出设定的区域大小?

我如何自己计算区域大小?

谢谢

Ron*_*lds 11

Java-8中的G1区域大小基于1 startingHeapSize/2048到32 MB之间的整数,并向下舍入为2的第一幂;不支持区域大小<1MB或> 32MB。

您还可以通过设置区域大小-XX:G1HeapRegionSize=n(请注意,该值具有相同的2的幂/范围限制)。

因此,实际上JVM似乎偏向于2048和4095之间的区域计数(假设堆介于2GB和128GB之间)。

通常,这些是每个堆大小范围的区域大小:

 <4GB -  1MB
 <8GB -  2MB
<16GB -  4MB
<32GB -  8MB
<64GB - 16MB
64GB+ - 32MB
Run Code Online (Sandbox Code Playgroud)

请注意,MB实际上是MiB,GB实际上是GiB