【问题标题】:How can I optimize the memory usage of JVM?如何优化JVM的内存使用?
【发布时间】:2011-09-06 01:47:01
【问题描述】:

我想问一下这里有没有人知道如何优化JVM的内存使用? 我们正在使用调用 JVM 的 java 服务包装器 (YAJSW),物理内存使用量约为 40MB。我想减少这个,比如说 5-10MB。我如何做到这一点?

到目前为止,我只有以下配置:

java =-Xmx1024m

我也试过这个:

java =-Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:SurvivorRatio=2 -XX:PermSize=256m -XX:MaxPermSize=256m

但是这些配置设置根本没有任何区别。什么是正确的配置设置?或者,我还需要做什么来优化它?

提前感谢您的回答。

【问题讨论】:

  • 您提供的数字有点奇怪...您说您想将内存使用量减少到 5-10 MB,并且您将其设置为更多(堆为 1G,PermSize 为 256M) .
  • 我真的不知道要使用的正确参数。如果我减小堆大小,则被服务包装的应用程序可能会受到影响。无论如何,您是否建议我减少堆大小和 PermSize?这些的可容忍值是多少? (512 用于堆,64 用于 PermSize?)
  • 我看不出所提供的任何选项应该如何影响最小内存使用量?我会尝试 -XX:+UseCompressedStrings 或 -XX:+UseCompressedOops (在 64 位 VM 上)之类的东西 - 实际上,如果内存很重要,我希望你使用 32 位 VM,所以第二个不应该有帮助。
  • @Voo:我实际上使用的是 64 位 VM。我尝试使用 -XX:+UseCompressedStrings 但是
  • ..但它也没有任何区别。

标签: optimization jvm java-service-wrapper


【解决方案1】:

您是在谈论常驻内存还是虚拟内存?在我的机器上,main 中的一个简单的while(true); 没有其他任何东西已经为我提供了 10 MB 的常驻内存,这主要是因为内存映射的 r/o 库(libc、libm、librt、libpthread ...)和 jars。如果可能的话,进一步减少内存占用,或者在任何重要的应用程序中减少到 10 MB,只会意味着更多的分页,从而降低速度。

另一方面,我的机器上的虚拟内存为 1.1 GB,如有必要,可以减少,但为什么要这样做?未使用的虚拟内存并不真正花费任何成本。

编辑:除此之外,您可能还想看看其他 HotSpot VM Options,尤其是 MaxHeapFreeRatio。

【讨论】:

  • 是的,我说的是常驻内存。我尝试了 MaxHeapFreeRatio,到目前为止,我根本没有看到任何区别。但是,谢谢你的链接:)
  • 如果您关心 10MB 的常驻内存使用量,是否意味着您同时运行大量应用程序实例?如果是,也许,您应该考虑切换到内存中不断为大量客户端服务的应用程序?
【解决方案2】:

documentation for YAJSW 声明:

包装器内存要求
YAJSW 的灵活性是有代价的。将 java 用于包装进程有很多优点。然而,我们为更高的内存占用付出了 java 的代价。虽然 JSW 包装器只需要几 k 的内存,但 YAJSW 的最小虚拟内存要求是 90 MB 和 40 MB 物理内存。该值因操作系统和功能而异。

如果您的应用程序可以在 32 位内存限制内运行,您可以使用 community edition of Tanuki,因为它占用的空间较小。

【讨论】:

    猜你喜欢
    • 2022-09-27
    • 2014-05-05
    • 2014-04-25
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    相关资源
    最近更新 更多