我在服务器上使用 wildfly-9.0.1.Final。
分配的内存为 20 GB,带有 UseG1GC 和 UseStringDeduplication(具有默认阈值)标志。
我在服务器上遇到了高内存使用情况,为了进行故障排除,我收集了 heapdump。我使用 Eclipse MAT 进行 heapdumnp 分析。问题嫌疑人建议大量。String 和 StringBuilder 对象。当我运行 String: 按值分组时。我看到大量重复的字符串。
String Value | Objects | Shallow Heap | Avg. Retained Size | Retained Heap
--------------------------------------------------------------------------------------------------------------------------
/D:/wildfly-9.0.1.Final/bin/content | 12,67,828 | 3,04,27,872 | 112 | >= 135.42 MB
/D:/wildfly-9.0.1.Final/bin/content/myApp-ear.ear | 12,67,828 | 3,04,27,872 | 144 | >= 174.11 MB
/D:/wildfly-9.0.1.Final | 12,67,827 | 3,04,27,848 | 88 | >= 106.40 MB
/D:/wildfly-9.0.1.Final/bin | 12,67,827 | 3,04,27,848 | 96 | >= 116.07 MB
/D:/wildfly-9.0.1.Final/bin/content/myApp-ear.ear/lib | 12,64,464 | 3,03,47,136 | 152 | >= 183.29 MB
我已经检查了一些字符串和 GC 路径。看起来这个字符串是由 JVM/容器构造的。
是否有任何配置可以避免这些大数字。字符串对象,或者我可以进一步解决这个问题。