【发布时间】:2019-08-14 08:40:28
【问题描述】:
在我的应用程序中导入时从 csv 文件创建 1000 万个对象时遇到问题。进行堆转储时,我发现当达到大约 480 万个对象时会发生内存不足。
研究解决方案并研究如何改进 GC 我偶然发现了 VMOption:
-XX:+UseStringDeduplication
使用它,我能够在 Out-Of-Memory 发生之前创建 780 万个对象,增加了 60% 以上。堆转储显示,堆中的字符串和字节 [] 最多减少了 75 %。
在另一个 stackoverflow 答案中,有人在内存使用优化方面显示了类似的结果。 https://stackoverflow.com/a/27953779/10020419
所以我问自己,为什么这不是标准的(我使用的是 Java 11)?
我读到的唯一缺点更像是 CPU 的增加幅度较小,因为 GC 必须工作更多。
还有什么其他理由不使用它作为默认值吗?
【问题讨论】:
-
好吧,我想阅读Why/When you would not want to have Java 8 UseStringDeduplication enabled in JVM? 可能是答案的一部分。现在,对于“为什么不是标准”,这将是“基于意见的”。链接询问了使用它的原因,似乎更适合 SO
-
谢谢,我在 stackoverflow 上找到了几个问题/答案,但不是这个。
标签: java string garbage-collection out-of-memory