Java GC概念:CMSInitiatingOccupancyFraction

VJS*_*VJS 12 java memory memory-management java-ee

我有以下内存选项配置:

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.请解释这个概念.

Fra*_*eau 27

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

总结一下:

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