JVM命令启动选项重复

kur*_*ast 4 java jvm launch4j

我发现我们正在使用的遗留软件,其启动属性格式错误,因此它接收这两个不相等的xmx作为属性:

java -jar myapp.jar -Xmx128m -Xmx512m 
Run Code Online (Sandbox Code Playgroud)

我无法访问启动器源代码(无法修改它),所以我问,这些参数的重复有什么影响?我可以这样离开吗,还是我应该担心?哪一个将适用?

使用的JVM是JRE 6更新18

T.J*_*der 6

通常,如果工具不拒绝重复,通常会使用后一个选项,但除非工具记录它,否则您不能指望它.

最好的办法是看你的具体的JVM会发生什么,通过RuntimetotalMemorymaxMemory:

public class HeapSize {
    public static final void main(String[] args) {
        Runtime rt = Runtime.getRuntime();
        System.out.println("Total currently: " + rt.totalMemory());
        System.out.println("Max:             " + rt.maxMemory());
        System.exit(0);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的 JVM(Linux下的Sun/Oracle 1.6.0_26-b03)上,后一个选项生效:

$ java -Xmx16m HeapSize
Total currently: 16121856
Max:             16121856
$ java -Xmx32m HeapSize
Total currently: 32178176
Max:             32178176
$ java -Xmx16m -Xmx32m HeapSize
Total currently: 32178176
Max:             32178176
$ java -Xmx16m -Xmx32m -Xmx128m HeapSize
Total currently: 59113472
Max:             119341056