我目前正在研究Java8最新版本的G1 GC。
我对“巨大的分配”有意见,所以我想知道我的区域有多大。
我怎样才能知道设置的区域大小有多大?
如何自己计算区域大小?
谢谢
发布于 2018-01-19 18:03:24
Java-8中的G1区域大小基于startingHeapSize/2048,舍入到1MB到32 1MB之间的第一个幂次方;不支持<1MB或>32 1MB的区域大小。
您还可以通过-XX:G1HeapRegionSize=n设置区域大小(注意,该值具有相同的-2/范围限制)。
因此,JVM似乎倾向于2048至4095之间的区域计数(假设堆在2GB至128 2GB之间)。
通常,这些是每个堆大小范围的区域大小:
<4GB - 1MB
<8GB - 2MB
<16GB - 4MB
<32GB - 8MB
<64GB - 16MB
64GB+ - 32MB注意,MB实际上是MiB,GB实际上是GiB。
发布于 2017-10-17 09:30:07
在启动期间,JVM根据堆的大小计算区域大小。堆的默认值是物理内存的1/4或1GB (以较小者为准)。请参考这。
区域大小可以根据堆大小从1MB到32 MB不等。目标是不超过2048个地区。
可以通过在启动脚本中指定-XX:G1HeapRegionSize=XX来覆盖大小。
发布于 2020-07-04 17:47:53
关于“如何发现设置了多大的区域大小?”,与其计算,您可以使用-Xlog:gc*标志(Java9或更高版本)启动java,应该在一开始就打印该标志:
[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-bithttps://stackoverflow.com/questions/46786601
复制相似问题