Java JVM分配了太多的空间

Java JVM分配了太多的空间,java,tomcat,jvm,Java,Tomcat,Jvm,我已经运行了两个使用nginx集群的tomcat实例。在我的Tomcat上,我将Infinispan作为分布式缓存运行。当我将大约4mio记录插入缓存时,会发生一些奇怪的事情。在图1中你可以看出我的意思。JVM正在分配比以往任何时候都需要的更多的内存,并且在使用后不会释放内存 JVM参数: Xmx8g XX:NewRatio=4 XX:生存率=8 XX:+UseCompressedOops XX:+UseConMarkSweepGC XX:+UseParNewGC XX:+DisableE

我已经运行了两个使用nginx集群的tomcat实例。在我的Tomcat上,我将Infinispan作为分布式缓存运行。当我将大约4mio记录插入缓存时,会发生一些奇怪的事情。在图1中你可以看出我的意思。JVM正在分配比以往任何时候都需要的更多的内存,并且在使用后不会释放内存

JVM参数:

  • Xmx8g
  • XX:NewRatio=4
  • XX:生存率=8
  • XX:+UseCompressedOops
  • XX:+UseConMarkSweepGC
  • XX:+UseParNewGC
  • XX:+DisableExplicitGC
  • XX:+仅使用CMSINITIATING职业
  • XX:+CMSClassUnloadingEnabled
  • XX:+cmsscavengebeforever备注
  • XX:CMSInitiatingOccupancyFraction=68
  • XX:MaxHeapFreeRatio=20
  • XX:MinHeapFreeRatio=10
您能否向我解释一下,为什么即使我将MAXHeapFreeRatio设置为20%,JVM也不会释放分配的内存?

您可以参考,看看这里注意到的问题是否适用于您,以及为什么您没有看到预期的内存释放

tl;dr版本是,人们似乎已经发现串行GC配置是唯一真正关注最小/最大堆比率选项的配置,但对于您的特定情况,这可能有所不同


可能有助于了解GC的行为。

我尝试了串行GC配置,但JVM不会释放内存。