Java GC概念:CMSInitiatingOccupancyFraction
我配置了以下内存选项: export MEM_OPTS=“-Xmx2560m-Xms2560m-XX:NewSize=786m-XX:MaxNewSize=786m-XX:+UseTLAB-XX:MaxPermSize=512m” GC参数如下所示: 导出GC1_OPTS=“-XX:+UseConMarkSweepGC-XX:+UseParNewGC-XX:CMSinitiatingOccinecyFraction=50-XX:+CMSClassEnsweepIngenabled-XX:+CMSClassUnloadingEnabled-XX:+CMSParallelRemarkEnabled-XX:+UseAptivegBoundary” export GC2_OPTS=“-XX:+ExplicitGCInvokesConcurrent” 我想知道CMS什么时候运行。它会在2560MB内存的50%之后运行,还是在512MB内存的50%之后运行 这个概念是什么Java GC概念:CMSInitiatingOccupancyFraction,java,jakarta-ee,memory,memory-management,Java,Jakarta Ee,Memory,Memory Management,我配置了以下内存选项: export MEM_OPTS=“-Xmx2560m-Xms2560m-XX:NewSize=786m-XX:MaxNewSize=786m-XX:+UseTLAB-XX:MaxPermSize=512m” GC参数如下所示: 导出GC1_OPTS=“-XX:+UseConMarkSweepGC-XX:+UseParNewGC-XX:CMSinitiatingOccinecyFraction=50-XX:+CMSClassEnsweepIngenabled-XX:+CMS
我的总堆内存为=2560+786+512 MB。。。。正确的?或者“-XX:NewSize=786m-XX:MaxNewSize=786m”表示非堆。请解释这个概念。两者都不是。在老一代的占有率达到50%后,它将有资格运行,其中老一代的大小是堆的大小减去新一代的大小:2560m-786m=1792m,因此在老一代达到896m之后。但这并不总是唯一的参数。如果希望它成为唯一的参数,您可能需要添加-XX:+UseCMsiniatingOccupancy(尽管根据我的经验,CMS实际上在阈值触发,即使没有它) 总结如下:
是堆内存总量-Xmx
/-XX:NewSize
是堆内新一代的大小范围-XX:MaxNewSize
- 不同之处在于老一代人的规模范围
/-XX:PermSize
是永久生成的大小范围,它是非堆内存-XX:MaxPermSize