如何知道 G1 垃圾收集器使用的区域大小?
How to know region size used of G1 garbage collector?
我目前正在研究最新的 Java 8 版本中的 G1 GC。
我对 "Humongous Allocation" 有疑问,所以我想知道我的区域大小有多大。
如何知道设置的区域大小有多大?
如何自己计算区域大小?
谢谢
区域大小是JVM在启动时根据堆的大小计算出来的。
堆的默认值是物理内存的 1/4 或 1GB(以较小者为准)。参考 this.
区域大小可以从 1 MB 到 32 MB 不等,具体取决于堆大小。目标是不超过 2048 个区域。
您可以通过在启动脚本中指定 -XX:G1HeapRegionSize=XX
来覆盖大小。
G1 region-size in Java-8是根据startingHeapSize/2048
向下舍入到1MB到32MB之间的2的1次方;不支持 <1MB 或 >32MB 的区域大小。
您还可以通过 -XX:G1HeapRegionSize=n
设置区域大小(注意,该值具有相同的 power-of-2/range 限制)。
所以实际上 JVM 似乎偏向于 2048 到 4095 之间的区域计数(假设堆在 2GB 到 128GB 之间)。
通常这些是每个堆大小范围的区域大小:
<4GB - 1MB
<8GB - 2MB
<16GB - 4MB
<32GB - 8MB
<64GB - 16MB
64GB+ - 32MB
注意,MB实际上是MiB,GB实际上是GiB
关于“我怎样才能知道设置的区域大小有多大?”,而不是计算你可以使用 -Xlog:gc*
标志启动 java(Java 9 或更高版本) ,应该在最开始打印:
[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
要查看区域大小,请使用 jinfo -flags your_pid
Non-default VM flags: -XX:G1HeapRegionSize=1048576 -XX:InitialHeapSize=1054867456 -XX:MarkStackSize=4194304 -XX:MaxHeapSize=5368709120 -XX:MaxNewSize=3221225472 -XX:MinHeapDeltaBytes=1048576 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseG1GC
我目前正在研究最新的 Java 8 版本中的 G1 GC。
我对 "Humongous Allocation" 有疑问,所以我想知道我的区域大小有多大。
如何知道设置的区域大小有多大?
如何自己计算区域大小?
谢谢
区域大小是JVM在启动时根据堆的大小计算出来的。 堆的默认值是物理内存的 1/4 或 1GB(以较小者为准)。参考 this.
区域大小可以从 1 MB 到 32 MB 不等,具体取决于堆大小。目标是不超过 2048 个区域。
您可以通过在启动脚本中指定 -XX:G1HeapRegionSize=XX
来覆盖大小。
G1 region-size in Java-8是根据startingHeapSize/2048
向下舍入到1MB到32MB之间的2的1次方;不支持 <1MB 或 >32MB 的区域大小。
您还可以通过 -XX:G1HeapRegionSize=n
设置区域大小(注意,该值具有相同的 power-of-2/range 限制)。
所以实际上 JVM 似乎偏向于 2048 到 4095 之间的区域计数(假设堆在 2GB 到 128GB 之间)。
通常这些是每个堆大小范围的区域大小:
<4GB - 1MB
<8GB - 2MB
<16GB - 4MB
<32GB - 8MB
<64GB - 16MB
64GB+ - 32MB
注意,MB实际上是MiB,GB实际上是GiB
关于“我怎样才能知道设置的区域大小有多大?”,而不是计算你可以使用 -Xlog:gc*
标志启动 java(Java 9 或更高版本) ,应该在最开始打印:
[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
要查看区域大小,请使用 jinfo -flags your_pid
Non-default VM flags: -XX:G1HeapRegionSize=1048576 -XX:InitialHeapSize=1054867456 -XX:MarkStackSize=4194304 -XX:MaxHeapSize=5368709120 -XX:MaxNewSize=3221225472 -XX:MinHeapDeltaBytes=1048576 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseG1GC