我们可以使用JVM参数来限制为JVM堆等分配的内存。
我想知道我们是否可以在开发期间在java程序中对这些值进行硬编码,而不是在运行程序时在命令行中添加JVM参数。有可能吗?
答案 0 :(得分:1)
您是否尝试在运行时更改堆大小?您无法执行此操作,因为必须在JVM启动时设置堆大小值,然后才能更改。
答案 1 :(得分:1)
不,你不能这样做。您可以做的一切是在命令行中添加参数来管理堆大小。
一个肮脏的解决方案可能是产生具有不同堆大小的另一个进程,但我不认为这是你正在寻找的。 Here 有一个例子。
答案 2 :(得分:1)
我的第一个问题应该是,为什么要设置它?服务器JVM将最大值设置为主内存大小的1/4,这对大多数应用程序来说都是合理的。你可以通过构建自己的JVM来改变它,或者你可以创建一个像
这样的别名alias java="java -Xmx30g"
您可以做的是定期检查内存使用情况,如果您使用更多内容,则终止该进程。当然,这是一个非常糟糕的主意。
相反,您可以使用相同的参数再次运行程序,但具有所需的最大堆大小。即你可以Runtime.exec。
您无法更改它,因为它会在启动时保留最大内存大小。
BTW有一种常见的误解,认为堆是唯一重要的内存。这不是正确的,因为JVM,线程堆栈,本机内存等都使用了一些内存,所以你可以将堆写为100 MB,但JVM可能使用300 MB。