【问题标题】:Java Heap Size - Young Generation Size without AdaptiveSizePolicyJava 堆大小 - 没有 AdaptiveSizePolicy 的年轻代大小
【发布时间】:2014-07-24 00:46:27
【问题描述】:

今天我在调整我的 java 堆大小时发现了一个奇怪的行为。作为衡量我年轻一代规模的参数,我选择:

-XX:NewSize=2100M
-XX:MaxNewSize=2100M

另外,我关闭了 AdaptiveSizePolicy:

-XX:-UseAdaptiveSizePolicy

根据这三个参数,我的年轻代应该一直是 2100M。但是当我查看我的 gc-log 时,大小只有 1900 MB (~89%)。当尝试不同的大小时,日志中的年轻代大约是相同的百分比 (~89%)。

整个堆为 5 GB。在日志文件中,整个堆的大小很好(~ 4,97 GB)。我使用的收集器是用于年轻代的 PSYoungGen 和用于老年代的 ParallelOldGC。

有人能简单解释一下为什么年轻一代的规模小于应有的规模吗?

【问题讨论】:

  • 你能发布 gc 日志吗?

标签: java garbage-collection heap-memory


【解决方案1】:

您是否可能只关注伊甸园空间而不是整个年轻一代?

-XX:NewSize controls 'Maximum size of new generation (in bytes)' 这不仅仅是'Eden space',它还用于管理两个'Survivor space'。这些之间的比率可以使用 -XX:SurvivorRatio 来控制

this link

例如,我使用安装了 visualGC 插件的 visualVM 来检查使用以下 VM 参数 -XX:NewSize=256M 和 -XX:SurvivorRatio=4 运行的 java 进程。

我的伊甸园空间是 170.750M 我的幸存者 0 是 42.625M 我的幸存者 1 是 42.625M

170.750 + 42.625 + 42.625 = 256M

【讨论】:

  • 感谢您的回答。也许你是对的,听起来合乎逻辑。但是当我有一个像“39.910: [GC 39.910: [ParNew: 261760K->0K(261952K), 0.2314667 secs] 262017K->26386K(1048384K), 0.2318679 secs]”这样的日志文件行时,我认为是“261952K " 括号中是整个年轻代的大小(伊甸园 + 2 个幸存者空间)。在我的日志文件中,这个值与配置的不同,例如我配置了 -XX:NewSize=2500M 并且日志文件说我的年轻一代是 2225M (~ 89%)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-23
  • 1970-01-01
  • 2014-07-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
相关资源
最近更新 更多