在我们的项目中,我们使用Tomcat 7服务器,我们需要将堆大小增加到6 GB。我们项目中的一些进程使用了这个内存。在我们的进程完成后,我们在代码中应用了垃圾收集。我们使用Java VisualVM跟踪内存分配。这儿存在一个问题。当我们的进程完成时,使用的堆大小减少但JVM提供的堆大小(6gb)不会减少,因此我们的本地计算机在处理新进程时遇到一些困难。所以我的问题是,有没有办法将堆大小减小到使用堆大小级别?我们怎样才能做到这一点。我希望我能清楚地问我的情况。谢谢你的建议。
答案 0 :(得分:4)
此行为因实现而异,但默认的Sun / Oracle行为会(最终)将(某些)内存返回给OS(可能)。可以使用-XX:MinHeapFreeRatio=<minimum> and -XX:MaxHeapFreeRatio=<maximum>更改默认值。
默认情况下,虚拟机会在每个集合中增大或缩小堆,以尝试将可用空间的比例保持为特定范围内每个集合的活动对象。
答案 1 :(得分:2)
Eclipse release heap back to system
以上链接有助于我们解决问题。
我们补充说
-XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=25 -Xms256m -Xmx4096m
到Tomcat VM参数。