gpt4 book ai didi

java - JVM 开销太大

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:34:38 24 4
gpt4 key购买 nike

我在一台服务器上遇到了内存问题。这是一个亚马逊微型实例,因此它的内存非常有限(free -m 表示 603 MB)。这就是为什么我用

开始 tomcat
-server -Xmx290m -Xms290m -XX:MaxPermSize=65m

但是,“java”进程占用了大约 86% 的总内存,即 518M。 518-355 = 163 MB 开销。这看起来很多,而且很可疑,尤其是考虑到:

  • 在另一个微型实例上的另一个 jvm 版本上运行的类似应用程序没有这么大的开销
  • 在本地运行的同一应用程序仅产生 40 MB 的开销。它在本地运行 Windows 7,64 位。

有问题的服务器上的 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 的堆作为开销听起来太大了。那可能是什么原因呢?或者这是一种正常的方式?

最佳答案

GC 的选择可能会影响堆大小开销,因为每个 GC 方案都必须留出一些内存来管理堆。此外,在如此小的 VM 上,您可能不会从 64 位中获益太多。一个 32 位的 jvm 将占用更少的堆,即使在使用 CompressOOPS 时也是如此,这应该是默认打开的。因此,请使用您最喜欢的垃圾收集器,选择一个能为您提供最佳开销和延迟组合的垃圾收集器。

关于java - JVM 开销太大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14134536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com