我配置了以下内存选项:
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+512MB,对吧?
或者"-XX:NewSize=786m -XX:MaxNewSize=786m"
代表NON堆?
请解释一下这个概念。
两者都没有。在旧一代的占用率达到50%后,它将有资格运行,其中旧一代大小是堆的大小减去新一代的大小:2560m-786m=1792m,因此这将是在老一代达到896m之后。但这并不总是唯一的参数。如果您希望它成为唯一的参数,您可能需要添加-XX:+UseCMSInitiatingOccupancyOnly(尽管根据我的经验,CMS实际上在阈值时触发,即使没有它)。
总结:
-Xmx
是堆内存总量-XX:NewSize
/-XX:MaxNewSize
是堆内新一代的大小范围- 不同的是老一代的体型范围
-XX:PermSize
/-XX:MaxPermSize
是永久生成的大小范围,它是非堆内存