java - 带有-Xmx500m的JVM实际消耗1GB内存
问题描述
我试图在 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
解决方案
推荐阅读
- javascript - 从数组中的多个对象中过滤属性
- php - Drupal 7搜索API挂钩注册回调类未触发
- node.js - 输出对我的 webhook url 发出的 POST 请求(JSON 数据)?
- python - 为什么这个循环有“2 for i in range”?它有什么作用?
- regex - 如何从 `[[:punct:]]` 中获取 Ruby Regexp 标点符号列表?
- r - 结构主题模型(stm包)使用绘图函数绘制百分比值
- node.js - 如何在 Node.js 中的短信验证中制作字符串链接
- javascript - 如何在javascript中获取cookie的特定值
- android - 书法库不适用于华为 p20 lite
- java - 如何强制在另一个 bean 之后创建一个 spring bean?