Java重复指定堆参数时最终生效规则及官方文档查询
Java命令参数顺序生效规则说明
Java命令有固定的语法结构,参数位置有严格的划分:java [JVM选项] 主类名/待运行的Java源文件名 [应用程序入参]
- 只有放在主类/源文件名前面的参数,才会被识别为JVM参数,被虚拟机解析生效
- 放在主类/源文件名后面的所有参数,都会被当成应用程序自身的入参,直接传递给main方法的
String[] args数组,不会被JVM处理
你执行的命令里-Xms2G -Xmx6G放在了Sample.java之后,所以不会被JVM解析,只有前面的-Xms256m -Xmx1G会作为内存参数生效。
官方规则查询位置
该规则可以在Java官方的java命令工具参考文档中查询,对应文档的「命令语法」章节明确标注了JVM选项、主类/源文件、应用入参三者的位置顺序要求。
修正方案
如果要让更大的内存参数生效,调整参数顺序即可:java -Xms2G -Xmx6G Sample.java
你也可以在main方法中打印args数组验证原命令的参数传递逻辑,原命令执行时,args数组会包含-Xms2G、-Xmx6G两个元素,可证明这部分参数被传递给了应用而非被JVM识别。
内容的提问来源于stack exchange,提问作者Sammy
相关产品推荐
相关产品推荐

