java - 如何知道 G1 垃圾收集器使用的区域大小?

标签 java g1gc

我目前正在研究最新 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/

相关文章:

java - G1GC中如何触发Old Generation的回收

java - 为什么 G1GC 日志中对堆使用情况的描述不同

java - 封装和/或组织数据的策略

java - 使用 G1GC 时很少有长时间的 GC 暂停

java - G1 GC - 大型后台 I/O 导致 JVM 无响应 - 8 秒暂停

java - 从字符串转换日期和/或时间时转换失败

java - 由于卡表验证失败导致 JVM 与 G1 GC 崩溃

java - 多线程追加器队列上的慢队列尾部

java - 自定义@RequestParam类型处理程序

java - 如何在jsp中显示SQL的结果?