我已将maxmimum memory设置为此值
java -Xmx280m -jar ...
内存使用信息代码(点击按钮时):
int mb = 1024*1024;
//Getting the runtime reference from system
Runtime runtime = Runtime.getRuntime();
System.out.println("##### Heap utilization statistics [MB] #####");
//Print used memory
System.out.println("Used Memory:"
+ (runtime.totalMemory() - runtime.freeMemory()) / mb);
//Print free memory
System.out.println("Free Memory:"
+ runtime.freeMemory() / mb);
//Print total available memory
System.out.println("Total Memory:" + runtime.totalMemory() / mb);
//Print Maximum available memory
System.out.println("Max Memory:" + runtime.maxMemory() / mb);
程序显示以下输出(2次点击+新标签等):
Used Memory:41
Free Memory:123
Total Memory:165
Max Memory:249
Used Memory:67
Free Memory:97
Total Memory:165
Max Memory:249
但是,当我查看Linux(Centos 7)系统监视器时,它会显示330mb
这个java进程。怎么解释呢?
答案 0 :(得分:2)
JVM内存包含以下几个部分:
可以使用在进程启动期间传递的标志配置这些部分:
答案 1 :(得分:2)
您指定的280兆字节是为Java程序的堆保留的。 VM和其他东西也使用内存,因此它在命令行和进程列表中永远不会是相同的数字。