【问题标题】:How to restrict the memory usage of Java application packed in a jar (-Xmx doesn't seem to work) on Windows如何在 Windows 上限制打包在 jar 中的 Java 应用程序的内存使用(-Xmx 似乎不起作用)
【发布时间】:2009-09-18 11:01:48
【问题描述】:

我想限制 Java 应用程序的最大堆大小,但它似乎不起作用。我正在通过 Windows 中的 bat 从 jar 包中运行应用程序。蝙蝠内容:

@Echo off
set CLASSPATH=.
java -Xmx32m -classpath %CLASSPATH% -jar MyApplication.jar

这应该将最大堆大小限制为 32 兆字节。但是,当我使用应用程序执行消耗内存的操作时,Windows 任务管理器显示内存消耗至少达到 70 兆字节……我什至尝试使用 -Xmx2m 但这没有任何区别。

所以,我不完全确定问题出在哪里。内存使用中当然包含堆栈等,但程序使用的内存应该主要是堆空间......

Java 版本好像是 1.6.0_14。

对于那些对我所追求的东西感兴趣的人,我想看看我的应用程序在堆空间用完时会如何处理某些函数。

编辑:嗯.. 当使用JConsole 进行监控时,堆使用量实际上被限制为 32M,这让我感到惊讶。必须使用更多内存...

感谢您的想法, 图子

【问题讨论】:

    标签: java memory jar memory-management


    【解决方案1】:

    我不认为 TaskManager 专门显示堆内存。它包括当时程序正在使用的所有内存。

    为了分析堆内存,您可以使用分析器(如 Yourkit)并查看是否遵守堆限制 -Xmx。这也将帮助您分析您感兴趣的程序部分。

    【讨论】:

    • 是的,我检查了控制台,确实遵守了堆限制,堆空间和其他内存使用之间的差异只是我预期的不同。有了 20M,我确实成功获得了 .OutOfMemoryError: Java heap space
    【解决方案2】:

    嗯...它不完全那样工作。

    虽然-Xmx32m 与您在任务管理器中看到的内容之间存在关系,但它不是一对一的。了解任务管理器不会报告您的堆大小,而是 JVM 消耗的所有内存,您的代码只是其中的一个子集。

    【讨论】:

    • 是的,理论上我知道,只是没想到差距这么大。
    • 它可能很大。我今天刚刚发布了一个问题......我的服务器 JVM 正在消耗最大堆大小的 3 倍!
    【解决方案3】:

    您看到的是堆大小和永久代的总和。您可以使用 -XX:MaxPermSize 命令行参数调整烫发大小。例如,这会将其设置为 128m。

    java -Xmx32m -XX:MaxPermSize=128m ...
    

    【讨论】:

    • 您忘记提及 JVM 消耗的内存。这不是微不足道的。
    【解决方案4】:

    尝试设置 -Xmx128 并查看是否出现 OutOfMemoryError。然后,这应该确认它至少已被设置。

    【讨论】:

      【解决方案5】:

      也许您实际上并没有使用那么多内存,但 JVM 是通过拉入外部库等来实现的。

      要测试这个理论,您可以使用 Runtime 类查看总内存和已用内存。

      【讨论】:

        【解决方案6】:

        要记住不同的点,可以最大限度地减少程序的内存使用。

        这是 IBM 的一个很好的列表。我发现它有时很方便。

        http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.express.doc/info/exp/ae/rprf_javamemory.html

        【讨论】:

          猜你喜欢
          • 2012-08-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-02
          • 2012-05-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多