java - 带有-Xmx500m 的JVM 实际上消耗了1GB 内存

标签 java

我正尝试在 VPS 上以“永远在线”模式长时间托管 Swing Java 应用程序,并愿意将其调整为 1GB 大小(Ubuntu 作为主机操作系统)。

应用程序以“-Xmx500m -XX:+UseConcMarkSweepGC”启动,它(与所有其他辅助人员)适合 1GB 的总 RAM 似乎是合理的,但是......在运行应用程序 2-3 天后 top 说 java 应用程序本身就吃掉了将近 1GB(参见 USED 列)——它是指定“-Xmx500m”的两倍:

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

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

jstat -gc 2401 我看到只有大约 630MB 的使用量。其他〜360MB在哪里?我缺少什么?是否可以通过某些 JVM 选项减少内存使用量?

S0C    S1C     S0U   S1U    EC       EU        OC         OU     
8512.0 8512.0  0.0   2161.2 68160.0  67668.5   426816.0   249483.9  

MC       MU       CCSC    CCSU     YGC   YGCT      FGC   FGCT    GCT
112464.0 108027.1 14160.0 13222.6  48701 1484.856  124   590.113 2074.968

https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html

S0C - Current survivor space 0 - 8MB
S1C - Current survivor space 1 - 8MB
EU - Current eden space capacity - 68 MB
OC - Current old space capacity - 426 MB
MC - Metaspace capacity - 112 MB
CCSC - Compressed class space capacity - 14 MB
--> 636 MB

最佳答案

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

Heretopmore explanations的手册关于交换。

关于java - 带有-Xmx500m 的JVM 实际上消耗了1GB 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57110797/

相关文章:

java - 如何在EMF ecore模型中创建LinkedHashMap?

java - 内容解析器 - 添加新的非本地日历 - 进程结束时删除日历

java - CreateProcess error=206, 运行 main() 方法时文件名或扩展名太长

java - RCP通讯

java - 平均/最小/最大方法在带有窗口生成器的 java eclipse 中不起作用

java - 将 Guava ListMultimap 转换为 Java Map

java - 从字符串列表中调用方法名称

java - 如何使用maven执行第三方jar

java - Android Padding 不影响布局

java - 如何使用 Spring Boot 让 Twilio 在通话中一一告诉 OTP