【发布时间】:2018-05-02 19:20:21
【问题描述】:
在JDK 8中,默认的最大堆大小为
物理内存的 1/4 或 1GB
并且可以使用-Xmx 开关覆盖它:
您可以使用 -Xmx 命令行选项覆盖此默认设置。
Xmx 开关适用于字节,而不是分数。有没有一种简单的方法可以将最大堆设置为机器物理内存的 X%?
编辑:
你问为什么?嗯,首先,好奇心。我觉得奇怪的是,默认 Xmx 是根据物理内存的一小部分定义的,但只要我触摸它,它就是一个绝对值。其次,如果我将相同(或相似)的应用程序部署到两台不同的服务器,并且其中一台拥有更多物理内存,我希望可以选择自动获取 JVM 以利用额外内存。这并不总是有意义的,但有时确实如此。
显而易见的解决方案是使用 shell 脚本来检查可用空间量并计算 Xmx,但这似乎是一个笨拙的解决方案。我想用纯 Java 应该可以实现。
【问题讨论】:
-
这可能是您在调用 Java 时必须要做的事情,因此是以平台相关的方式。
-
@OliverCharlesworth 这就是我的想法。但这很奇怪。默认值是根据物理内存的一小部分定义的,但没有将 1/4 更改为 1/3 或 1/2 的开关。
-
由于您无法更改 HotSpot JVM 的堆大小,“纯Java”解决方案是使用链接问答中的技术来查找物理内存大小...然后启动一个新的 JVM。坦率地说,您最好使用“笨拙”的解决方案。
标签: java garbage-collection heap-memory