Java使用比分配内存更多的内存

使用以下Java选项启动Apache Tomcat(Atlassian Confluence)实例:

JAVA_OPTS="-Xms256m -Xmx512m -XX:MaxPermSize=256m -Djava.awt.headless=true "

不过,我发现在启动后,它可以快速浏览虚拟服务器上可用的大部分内存。

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 6082 root      19   0 1105m 760m  16m S  0.7 74.2   5:20.51 java

不应该将总体消耗的内存(堆+ PermGen)保持在使用-Xmx指定的内存下? 这导致的问题之一是我无法使用关闭脚本关闭服务器,因为它尝试产生具有256MB内存的JVM,由于该JVM不可用而失败。


总的Tomcat内存消耗应该计算在不低于Xmx + XX:MaxPermSize (在你的情况下,768MB),但我记得在某处看到它可以超越它。 Xmx只是堆空间,而PermGen在堆外(类)。


例如,本地库可以轻松地在Java堆外部分配内存。

Direct ByteBuffer也可以这样做:http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html

直接缓冲区的内容可能位于正常垃圾收集堆的外部,因此它们对应用程序内存占用量的影响可能不明显。

分配巨大的直接ByteBuffers有很好的理由。

http://ehcache.org/documentation/offheap_store.html

链接地址: http://www.djcxy.com/p/85069.html

上一篇: Java using more memory than the allocated memory

下一篇: why doesn't make work on a c++ compile with a reference address pointer?