(注意,当我说"JVM"时,我的意思是"Hotspot",我正在运行最新的Java 1.6更新.)
示例情况:
我的JVM在-Xmx设置为1gb的情况下运行.目前,堆已经分配了500mb,其中使用了450mb.该程序需要在堆上加载另外200 MB.目前,堆中有300mb的"可收集"垃圾(我们假设它们都是最老一代的.)
在正常操作下,JVM会将堆增长到700 MB左右,并在它到达时进行垃圾收集.
在这种情况下我想要的是JVM首先gc,然后分配新的东西,这样我们最终的堆大小保持在500mb,而使用的堆在350mb.
是否有JVM参数组合可以做到这一点?
我们在tomcat服务器上部署了一个Web应用程序.我们运行了某些预定的作业,之后堆内存达到峰值并且稳定下来,一切似乎都很好.然而,系统管理员抱怨内存使用情况(Linux上的"top")不断增加预定作业的数量.什么是堆内存和CPU内存之间的相互关系?可以通过任何JVM设置进行控制吗?我使用JConsole来监控系统.
我通过JConsole强制进行垃圾收集,并且堆使用率下降,但是Linux上的内存使用量仍然很高,并且从未降低.
任何想法或建议会有很大帮助吗?