我在一台服务器上有内存问题。这是亚马逊的一个微实例,因此它的内存非常有限(空闲-m说是603MB)。所以我才开始
-server -Xmx290m -Xms290m -XX:MaxPermSize=65m
然而,"java“进程占用了总内存的86%,即5.18亿内存。518-355 = 163 MB的间接费用。这看起来很可疑,尤其是考虑到:
问题服务器上的java版本是:
java version "1.7.0_09-icedtea"
OpenJDK Runtime Environment (amzn-2.3.3.13.amzn1-x86_64)
OpenJDK 64-Bit Server VM (build 23.2-b09, mixed mode)
本地运行时与服务器上运行时之间的巨大差异使我排除了以下选项:应用程序中存在一些昂贵的堆外对象(例如字节缓冲区)(而且我无论如何都不使用这些对象)。我知道JVM的开销各不相同,但堆的1/2以上的开销听起来太大了。那么是什么原因造成了这种情况呢?或者这是一种正常的方式?
发布于 2013-01-03 16:28:35
选择GC可能会影响堆大小开销,因为每个GC方案必须留出一些内存来管理堆。而且,在这么小的VM上,您可能不会从64位中获益多少。32位jvm将占用更少的堆,即使使用默认情况下应该打开的CompressOOPS。因此,使用您最喜欢的垃圾收集器,选择一个为您提供最佳开销和延迟的垃圾收集器。
https://stackoverflow.com/questions/14134536
复制相似问题