我在应用程序中导入时从csv文件创建1000万个对象时遇到问题。进行堆转储时,我发现内存不足发生在达到480万个对象时。
研究解决方案并研究如何改善GC,我偶然发现了VMOption:
-XX:+UseStringDeduplication
使用此方法,我可以在内存不足之前创建780万个对象,这增加了60%以上。堆转储显示,堆中的字符串和byte []最多减少了75%。
在另一个stackoverflow答案中,有人在内存使用优化中显示了相似的结果。 https://stackoverflow.com/a/27953779/10020419
所以我问自己,为什么这不是标准的(我使用Java 11)?
我读到的唯一不足之处是,CPU增加的幅度较小,因为GC必须工作更多。
还有其他原因不将其用作默认设置吗?
答案 0 :(得分:1)
在询问“为什么要做出这种语言决定”时,我们所能做的就是猜测或听取语言设计师公开说的话。我还没有听到任何有关开发人员为何这样做的评论,所以这是一个有根据的猜测。
就像我说的那样,没有开发者的明确评论,有根据的猜测是下一个最好的选择。