How to know region size used of G1 garbage collector?

The region size is calculated by the JVM during startup based on the size of the heap. Heap's default value is 1/4th of your physical memory or 1GB (whichever is smaller). Refer this.

The region sizes can vary from 1 MB to 32 MB depending on the heap size. The goal is to have no more than 2048 regions.

You can override the size by specifying -XX:G1HeapRegionSize=XX in the startup script.


Regarding "How can I find out how big the region size is set?", instead of calculating you can launch java with -Xlog:gc* flag (Java 9 or later), which should print in the very beginning:

[0.003s][info][gc,heap] Heap region size: 1M
[0.004s][info][gc     ] Using G1
[0.004s][info][gc,heap,coops] Heap address: 0x00000000fc000000, size: 64 MB, Compressed Oops mode: 32-bit

G1 region-size in Java-8 is based on startingHeapSize/2048 and rounded DOWN to the first power of 2 between 1MB and 32MB; region sizes <1MB or >32MB are not supported.

you can also set the region-size via -XX:G1HeapRegionSize=n (note, the value has the same power-of-2/range restrictions).

so actually the JVM seems biased towards a region count between 2048 and 4095 (assuming a heap between 2GB and 128GB).

in general these are the region-sizes per heap-size range:

 <4GB -  1MB
 <8GB -  2MB
<16GB -  4MB
<32GB -  8MB
<64GB - 16MB
64GB+ - 32MB

note, MB is actually MiB and GB is actually GiB

Tags:

Java

G1Gc