正如许多资料中所描述的那样,我试图java -Xms512m
从命令行使用,以便将 Java 机器的最大堆大小设置为 512 Mb。但是出了点问题,命令行显示如下
而且,正如我直接从程序中检查的那样:
long heapMaxSize = Runtime.getRuntime().maxMemory();
heapMaxSize 等于 954728448,大约为 1Gb。
这称为 VM 参数,必须在启动 VM(JVM)时指定。
您可以在运行程序时指定最大堆大小:
java -Xmx1024m -jar yourJar.jar
或者,您可以在系统上设置环境变量,JAVA_OPTS
JVM 将在启动时尊重您的设置:
JAVA_OPTS="-Xmx1024m"
关于您的第二个问题,我建议您参考什么是 Runtime.getRuntime().totalMemory() 和 freeMemory()?因为它阐明了Runtime.getRuntime().maxMemory()
和朋友返回的值。
-Xmx<size>
:Java 堆的最大大小(年轻代 + 终身代)-Xms<size>
: Java Heap 的初始大小(年轻代 + 终身代)-Xmn<size>
: 年轻代堆空间的大小您遇到的问题与 无关-Xms
,这是由于您的java
命令不完整,确实您需要提供一个 jar,其中包含在META-INF/MANIFEST.MF
要启动的类或 FQN 中定义的主类。