我正在使用 jconsole 查看我的 tomcat,并试图了解为什么堆大小在 0.4GB 和 1GB 之间变化。
我以为我告诉过它从~1GB 开始并且使用不超过~6GB。
谁能解释一下发生了什么事。
我的命令行有以下内存和 GC 选项:java -XX:NewSize=700m -XX:MaxNewSize=700m -Xms1202m -Xmx6014m -XX:MaxPermSize=256m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:SurvivorRatio=20 -XX:ParallelGCThreads=4
答案1
-Xmsn Specify the initial size, in bytes, of the memory allocation pool
您已告诉它从 1GB 开始。
-Xmxn Specify the maximum size, in bytes, of the memory allocation pool.
您已告诉它最多使用 6GB。
我没有发现您所看到的内容和屏幕截图描述的行为之间有任何矛盾。-XX:MaxNewSize 将强制 JVM 从 700Mo 开始。但是,我在互联网上找不到太多关于此选项的文档,所以我不能确定。
然后,您的应用程序运行,分配对象,有时,垃圾收集器会继续工作,释放内存。您只是没有达到您在开始时指定的限制值(当然是因为您的应用程序当前不需要它)。您需要的最小内存约为 370Mo。
您的配置没有任何问题(也许除了这个我无法理解的 -XX:NewMemorySize),您的应用程序的行为也没有问题。