3

我们可以使用 JVM 参数来限制分配给 JVM 堆等的内存。

我想知道我们是否可以在开发期间在 java 程序中硬编码这些值,而不是在运行程序时在命令行中添加 JVM 参数。可能吗?

4

3 回答 3

1

您是否尝试在运行时更改堆大小?您不能这样做,因为堆大小值必须在 JVM 启动时设置,然后无法更改。

于 2013-11-08T09:36:23.913 回答
1

不,你不能这样做。您可以做的就是在命令行中添加参数来管理堆大小。

一个肮脏的解决方案可能是生成另一个具有不同堆大小的进程,但我认为这不是您要寻找的。这里有一个例子。

于 2013-11-08T09:39:15.323 回答
1

我的第一个问题应该是,你为什么要设置它?服务器 JVM 将最大值设置为主内存大小的 1/4,这对于大多数应用程序来说是合理的。您可以通过构建自己的 JVM 来更改它,或者您可以创建一个别名,例如

alias java="java -Xmx30g"

您可以做的是定期检查内存使用情况,如果使用更多,则终止该进程。这当然是一个非常糟糕的主意。

相反,您可以做的是使用相同的参数但使用您想要的最大堆大小再次运行程序。即你可以Runtime.exec。

您无法更改它,因为它在启动时保留了最大内存大小。

顺便说一句,有一个普遍的误解,认为堆是唯一重要的内存。这不是真的,因为 JVM、线程堆栈、本机内存等都使用一些内存,因此您可以将堆设置为 100 MB,但 JVM 可能使用 300 MB。

于 2013-11-08T09:45:39.460 回答