我目前正在研究最新 Java 8 版本中的 G1 GC。
我对“巨大的分配”有疑问,所以我想知道我的区域大小有多大。
如何找出区域大小设置的大小?
我如何自己计算区域大小?
谢谢
最佳答案
Java-8 中的 G1 区域大小基于 startingHeapSize/2048
并在 1MB 和 32MB 之间向下舍入到 2 的第一个幂;不支持 <1MB 或 >32MB 的区域大小。
您还可以通过 -XX:G1HeapRegionSize=n
设置区域大小(注意,该值具有相同的 2 次幂/范围限制)。
所以实际上 JVM 似乎偏向于 2048 到 4095 之间的区域计数(假设堆在 2GB 到 128GB 之间)。
一般来说,这些是每个堆大小范围的区域大小:
<4GB - 1MB
<8GB - 2MB
<16GB - 4MB
<32GB - 8MB
<64GB - 16MB
64GB+ - 32MB
注意,MB 实际上是 MiB,GB 实际上是 GiB
关于java - 如何知道 G1 垃圾收集器使用的区域大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46786601/