Sim*_*eon 10 java garbage-collection memory-management
问题基本上包含在标题中.
假设您的应用程序已达到其JVM -Xmx限制.当该应用程序需要更多内存时,是否强制进行垃 (在HotSpot JVM中)
我无法解释的第二个奇怪的事情是,我目前有一个运行-Xmx = 2048m的应用服务器,"top"命令(在linux上)为其进程报告2.7g.
那么应用程序如何/何时允许超过其-Xmx?
谢谢,
Tom*_*icz 11
实际上,当年轻代已满(不是整个堆)时会触发正常的GC,并且当幸存者空间中没有剩余空间时会触发主要GC,因此需要将某些对象迁移到旧代.
Xmx参数仅指定堆的大小.Java进程占用更多内存,因为堆只是Java进程的一部分,我想你还有其他java进程包含的内容,如本机库,perm gen以及应用程序生成的本机内存分配.
这是一篇描述内存分配的好文章:http: //www.ibm.com/developerworks/java/library/j-nativememory-linux/
是的,如果 JVM 达到堆限制(并且可能更快),它肯定会调用 GC。如果这没有帮助,它将抛出OutOfMemoryErrors。
您看到更大进程内存消耗的原因是该-Xmx选项仅限制 Java 堆空间(Java 对象分配的位置)。JVM 还使用了其他几个内存区域:线程堆栈空间、“永久代”(存储类及其代码的地方)、通过 分配的“直接”内存ByteBuffers、由本机库分配的内存等。对于某些这些额外的内存区域存在其他允许限制它们的配置选项,例如-Xss,但有些甚至不受 JVM 的控制。