JVM堆分配

时间:2014-05-29 17:25:20

标签: java memory-management

在我们的项目中,我们使用Tomcat 7服务器,我们需要将堆大小增加到6 GB。我们项目中的一些进程使用了​​这个内存。在我们的进程完成后,我们在代码中应用了垃圾收集。我们使用Java VisualVM跟踪内存分配。这儿存在一个问题。当我们的进程完成时,使用的堆大小减少但JVM提供的堆大小(6gb)不会减少,因此我们的本地计算机在处理新进程时遇到一些困难。所以我的问题是,有没有办法将堆大小减小到使用堆大小级别?我们怎样才能做到这一点。我希望我能清楚地问我的情况。谢谢你的建议。

2 个答案:

答案 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参数。