gpt4 book ai didi

java - 为什么字符串去重不是标准的

转载 作者:行者123 更新时间:2023-12-02 09:36:13 26 4
gpt4 key购买 nike

我在导入应用程序时从 csv 文件创建 1000 万个对象时遇到问题。通过进行堆转储,我发现当达到大约 480 万个对象时就会发生内存不足。

研究解决方案并研究如何改进 GC 我偶然发现了 VMOption:

-XX:+UseStringDeduplication

使用它,我能够在内存不足发生之前创建 780 万个对象,增加了 60% 以上。堆转储显示,堆中的字符串和 byte[] 减少了高达 75%。

在另一个 stackoverflow 答案中,有人在内存使用优化方面显示了类似的结果。 https://stackoverflow.com/a/27953779/10020419

所以我问自己,为什么这不是标准的(我使用的是 Java 11)?

我读到的唯一缺点更像是 CPU 的增加较小,因为 GC 必须工作更多一点。

还有其他原因不使用它作为默认值吗?

最佳答案

当问“为什么做出这个语言决定”时,我们所能做的就是猜测或聆听语言设计者公开说过的话。我还没有听到开发人员对他们为什么这样做的任何评论,所以这里有一个有根据的猜测。

  • 在大多数情况下,CPU 是比内存更宝贵的资源。
  • 此标志需要 G1 垃圾收集器,这可能对某些人不适用。如果它是默认打开的,您可能会切换到另一个 GC,并发现现在到处都会出现 OOM 错误。

就像我说的,如果没有开发人员的明确评论,有根据的猜测是下一个最好的事情。

关于java - 为什么字符串去重不是标准的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57491102/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com