Answers:
除了堆(由-Xms
和指定-Xmx
)之外,您还需要包括非堆区域。这些包括
DirectByteBuffer
从中提取s),最初是64mbJVM本身的工作空间也只有几十mb。
您还应该注意使用服务器类计算机时Sun JVM的自动调整大小。随着时间的流逝,服务器类别(2Gb内存,一个以上内核)的定义遭受了折旧,现在大多数机器都能够触发-server
优化。我的建议始终是指定-Xms
和-Xmx
设置,然后通过,-server
除非您可以想到一个很好的理由。
使用-Xmx选项,可以限制JVM保留的堆大小... JVM还需要其他资源...
“感谢内存” *是一篇很好的文章,解释了JVM如何使用内存...
除此之外,您可以尝试使用IBM的JVM,它应该可以与Tomcat一起使用,不知道某些免费的JVM实现是否可以正常工作。
但是,我认为内存不足的计算机不会对您有任何好处。Java只需要内存。
*由于新用户无法提交超链接,因此您必须自己查找该文章……这是Google上的第一款“感谢ibm的感谢”。
还可以尝试使用JRockit JVM,它的内存占用更少。您仍然可以免费下载BEA授权的JRockit版本。即Oracle接管BEA之前的版本。
有关下载链接,请参见http://forums.oracle.com/forums/thread.jspa?threadID=816133&tstart=0。
我发现的一种有用的技术是使用JMX监视来准确查看堆与permgen空间使用了多少内存。
如此处http://tomcat.apache.org/tomcat-6.0-doc/monitoring.html所述,在Tomcat中设置JMX。
然后使用JConsole(JDK 5或JDK 6附带)-内存标签将跟踪一段时间内的内存消耗。
另外-提防Web应用程序的软重启。如果重新加载Web应用程序,则不会垃圾收集permgen空间,并且该空间会随着时间的推移而累积。您需要完全停止/启动Tomcat,以便回收permgen空间。