启动命令如下:
java -server -Xms128m -Xmx128m -jar xxxx.jar
top命令显示如下:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
15332 root 17 0 555m 242m 11m S 0.0 12.1 1:46.95 java
疑问:
为什么VIRT和RES大于128m呢?难道-Xms -Xmx没起作用?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
这两个参数只是限值
Java程序的heap
大小,如果你了解heap
和stack
那么应该知道,一般来说只有运行时动态创建的对象
才存在于heap
中另外,通过
top
命令查看到的资源情况是针对整个Java进程的,JVM在执行你的Java代码时还需要载入整个Java Runtime
,有自己的开销,这些都不包括在-Xms/-Xmx
中From Oracle's Documentation:
top出来的memory占用还有PermSize等,是整个进程总和,好吧问了个小白问题
因为你只是设置java堆内存的最大值。除了堆以外,jvm还有栈,方法区,常量池。
实际上,就算设置了每个内存区域的最大值,最终的内存占用也还是有可能超出的。因为内存的管理也是需要内存的