正如许多来源中所描述的那样,我试图从命令行使用java -Xms512m
,以便将java机器的最大堆大小设置为512 Mb。
但出现问题,命令行显示以下内容
__proto__
is deprecated
而且,当我直接从程序中检查时:
long heapMaxSize = Runtime.getRuntime().maxMemory();
heapMaxSize等于954728448,大约是1Gb。
答案 0 :(得分:3)
这称为VM参数,必须在启动VM(JVM)时指定。
您可以在运行程序时指定最大堆大小:
java -Xmx1024m -jar yourJar.jar
或者,您可以在系统JAVA_OPTS
上设置环境变量,JVM会在启动时尊重您的设置:
JAVA_OPTS="-Xmx1024m"
关于您的第二个问题,我会推荐您What are Runtime.getRuntime().totalMemory() and freeMemory()?,因为它会澄清Runtime.getRuntime().maxMemory()
和朋友返回的值。
答案 1 :(得分:1)
-Xmx<size>
:Java堆的最大大小(年轻代+终身代)-Xms<size>
:Java堆的初始大小(年轻代+终身代)-Xmn<size>
:年轻一代堆空间的大小您遇到的问题与-Xms
无关,这是因为您的java
命令不完整,实际上您需要提供一个jar,其中包含{ {1}}或要启动的类的FQN。