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?