Java GC概念:CMSInitiatingOccupancyFraction

时间:2012-09-12 14:10:22

标签: java java-ee memory memory-management

我配置了以下内存选项:

export MEM_OPTS =“ - Xmx2560m -Xms2560m -XX:NewSize = 786m -XX:MaxNewSize = 786m -XX:+ UseTLAB -XX:MaxPermSize = 512m”

GC参数如下:

export GC1_OPTS =“ - XX:+ UseConcMarkSweepGC -XX:+ UseParNewGC -XX: CMSInitiatingOccupancyFraction = 50 -XX:+ CMSPermGenSweepingEnabled -XX:+ CMSClassUnloadingEnabled -XX:+ CMSParallelRemarkEnabled -XX:+ UseAdaptiveGCBoundary “ export GC2_OPTS =“ - XX:+ ExplicitGCInvokesConcurrent”

我想知道,当CMS运行时。它会在2560 MB的50%之后运行,还是在512 MB内存的50%之后运行。

概念是什么?

我的总内存将是= 2560 + 786 + 512 MB ....对吗?或者“-XX:NewSize = 786m -XX:MaxNewSize = 786m”适用于NON Heap。请解释这个概念。

1 个答案:

答案 0 :(得分:25)

都不是。它将有资格在老一代占用率达到50%之后运行,其中老一代的大小是堆的大小减去新一代的大小:2560m - 786m = 1792m,所以这将是在老一代达到896米。但这并不总是唯一的参数。如果你想让它成为唯一的参数,你可能想要添加-XX:+ UseCMSInitiatingOccupancyOnly(尽管根据我的经验,CMS实际上会触发阈值,即使没有它)。

总结:

  • -Xmx是总堆内存
  • -XX:NewSize / -XX:MaxNewSize是该堆内新一代的大小范围
  • 差异是老一代的大小范围
  • -XX:PermSize / -XX:MaxPermSize是永久代的大小范围,即非堆内存
相关问题