如何在Windows上限制打包在jar中的Java应用程序的内存使用量(-Xmx似乎不起作用)

Tou*_*uko 5 java memory memory-management jar

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

@Echo off
set CLASSPATH=.
java -Xmx32m -classpath %CLASSPATH% -jar MyApplication.jar
Run Code Online (Sandbox Code Playgroud)

这应该限制最大堆大小32兆字节.但是,当我使用应用程序消耗内存时,Windows任务管理器显示内存消耗至少达到大约70兆字节...我甚至尝试使用-Xmx2m,但这没有任何区别.

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

Java版本似乎是1.6.0_14.

对于那些对我所追求的感兴趣的人,我试图看看我的应用程序在堆空间不足时如何使用某些函数.

编辑:嗯..我很惊讶在使用JConsole进行监控时,堆使用率实际上限制在32M .得到更多的内存......

谢谢你的想法,Touko

vpr*_*m86 5

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

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


Stu*_*son 5

嗯...它并不是那样的.

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