JVM选项-Xms和-Xmx被忽略。

4
我有一个应用程序在浏览器上运行(如果有影响,是IE),在尚未激活的Windows上(如果有影响)。我已经在JVM控制面板中设置了环境变量为-Xms5m -Xmx5m(我也做了-Xms16m和-Xmx16m)。
当我运行应用程序并使用jconsole监视进程的pid时,它告诉我我正在使用比我的设置堆要多得多的空间,而不是抛出堆空间不足的错误(我正在尝试特别获得此错误)。根据jconsole,它使用15-20Mb。我已经重新启动了计算机,并关闭了所有浏览器设置此选项。
有人知道为什么参数被忽略吗?
如果有任何信息缺失,请告诉我。
只是提醒,jconsole明确表示我的堆内存使用量为20MB。我非常清楚,由于JVM、库、堆栈等的加载,可能会使用更多的内存。我遇到的问题是堆超过了我指定的堆大小。
即使它是在环境变量中唯一设置的选项(我甚至删除了-Xms16m以确保Java VisualVm正在更新,但-Xmx16m没有出现),Java VisualVm中也没有列出-Xmx16m选项。有人知道为什么会这样吗?
我已经尝试了Java RE版本6从27到31,它们都缺少Java VisualVm选项中的Xmx选项,并且它们只有-Xms16m。

你是如何传递值的? - Bhavik Ambani
我通过打开控制面板,搜索Java并选择它,然后转到Java选项卡并单击查看按钮,最后设置运行时参数(然后单击确定、应用、关闭浏览器、重新启动计算机等)来传递值。 - Jason Zhu
可能是 https://dev59.com/D2w15IYBdhLWcg3wtd4g 的重复问题,Java 似乎忽略了 -Xms 和 -Xmx 选项。 - kgautron
1
可能是 https://dev59.com/vVTTa4cB1Zd3GeqPsGhb 的重复问题。 - viking
3
在VisualVM中,您可以查看运行进程的命令行参数和最大堆大小(以确认是否被忽略)。 - Peter Lawrey
1个回答

3

如同已经多次回答过的(我目前找不到链接),运行时参数仅控制程序允许从堆中分配多少内存。JRE本身使用更多内存来管理堆,因此-Xms-Xmx参数与程序实际使用的内存量没有很好的相关性(如果有的话)。


我正在使用jconsole检查堆内存使用情况,可能jconsole给出的读数不正确,但我正在使用应用程序的模拟终端告诉我相同的信息。您还推荐使用哪些工具来检查堆内存使用情况? - Jason Zhu
2
我认为你的不耐烦并不适当。他正在使用JConsole来确定堆大小。JConsole应该是准确的,这表明将JVM配置参数传递下去确实存在问题。 - Confusion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接