如何知道G1垃圾回收器使用的区域大小?
我目前正在研究最新的Java 8版本中的G1 GC。
我在“巨型分配”方面遇到问题,因此我想知道我的区域大小有多大。
如何了解区域大小设置的大小?
如何自行计算区域大小?
谢谢
我目前正在研究最新的Java 8版本中的G1 GC。
我在“巨型分配”方面遇到问题,因此我想知道我的区域大小有多大。
如何了解区域大小设置的大小?
如何自行计算区域大小?
谢谢
Java-8 中的 G1 区域大小基于 1MB 和 32MB 之间的第一次幂 2 并向下舍入;不支持区域大小 <1MB 或 >32MB。startingHeapSize/2048
您还可以通过 设置区域大小(注意,该值具有相同的 2 次幂/范围限制)。-XX:G1HeapRegionSize=n
因此,实际上JVM似乎偏向于2048和4095之间的区域计数(假设堆在2GB和128GB之间)。
通常,这些是每个堆大小的区域大小范围:
<4GB - 1MB
<8GB - 2MB
<16GB - 4MB
<32GB - 8MB
<64GB - 16MB
64GB+ - 32MB
请注意,MB 实际上是 MiB,而 GB 实际上是 GiB
区域大小由 JVM 在启动期间根据堆的大小计算。堆的默认值为物理内存的 1/4 或 1GB(以较小者为准)。请参考此内容。
区域大小可以从 1 MB 到 32 MB 不等,具体取决于堆大小。目标是拥有不超过2048个区域。
您可以通过在启动脚本中指定来覆盖大小。-XX:G1HeapRegionSize=XX