我配置了以下内存选项:
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。请解释这个概念。
答案 0 :(得分:25)
都不是。它将有资格在老一代占用率达到50%之后运行,其中老一代的大小是堆的大小减去新一代的大小:2560m - 786m = 1792m,所以这将是在老一代达到896米。但这并不总是唯一的参数。如果你想让它成为唯一的参数,你可能想要添加-XX:+ UseCMSInitiatingOccupancyOnly(尽管根据我的经验,CMS实际上会触发阈值,即使没有它)。
总结:
-Xmx
是总堆内存-XX:NewSize
/ -XX:MaxNewSize
是该堆内新一代的大小范围-XX:PermSize
/ -XX:MaxPermSize
是永久代的大小范围,即非堆内存