具有-Xmx500m的JVM实际上消耗1GB的内存

时间:2019-07-19 10:45:27

标签: java

我试图以“ always-on”模式在VPS上长期托管Swing Java应用程序,并希望使其适应1GB的形状(Ubuntu作为主机OS)。

应用程序以“ -Xmx500m -XX:+ UseConcMarkSweepGC”启动,似乎(与所有其他补充人员一起)应该适合1GB的总RAM,但是在运行应用程序2-3天后…… {1}}表示,仅Java应用程序就消耗了将近1GB的空间(请参阅USED列)-比指定的“ -Xmx500m”多两倍:

top

应用程序中的实际“堆使用量”约为350MB(由应用程序本身显示)。

KiB Mem : 1009136 total, 66084 free, 867128 used, 75924 buff/cache KiB Swap: 716796 total, 9388 free, 707408 used. 28472 avail Mem PID VIRT RES SWAP USED SHR S %CPU %MEM TIME+ COMMAND 2401 3076084 529648 467832 997480 1900 S 31.0 52.5 916:05.68 java 2218 285544 37548 74720 112268 8800 S 6.9 3.7 269:12.60 Xvnc4 2388 709104 11448 9744 21192 7760 S 6.9 1.1 24:45.88 mate-terminal 883 643820 10932 2540 13472 5624 S 0.0 1.1 1:48.43 do-agent 2327 544648 4092 5992 10084 2436 S 3.4 0.4 6:38.31 clock-applet 中我只能看到大约630MB的使用量。其他〜360MB在哪里?我缺少什么?是否可以通过某些JVM选项减少内存使用量?

jstat -gc 2401

1 个答案:

答案 0 :(得分:1)

USEDRES + SWAP的总和。
实际内存中只有+ 500Mb,而交换中只有+ 400Mb,这是正常的行为。

Heretopmore explanations关于交换的手册。