【问题标题】:string.intern not using less memorystring.intern 没有使用更少的内存
【发布时间】:2013-03-21 18:52:40
【问题描述】:

我存储了大量相等的字符串。这些值不会经常变化。

由于 string.intern() 应该只返回引用,我将一亿个完全相同的字符串列表中的每一个都进行了实习,存储在 ArrayList 中。

我预计 Java 内存会大幅下降,但存储普通字符串与存储字符串的差异不到 0.1%。

我错过了什么还是这是预期的行为?

列表生成代码

    long max = 100000000;
    for(int i =0 ; i < max;i++ ){
        list.add("sometextelidedforbrevity".intern());
    }

内存使用量为 1 242 360 KB 和 1 242 184 KB。

【问题讨论】:

  • 你是如何创建这些字符串的?向我们展示您的代码。他们可能已经被拘留了。
  • 您使用的是字符串文字还是new String()?因为字符串字面量是自动实习的...
  • 正在使用多少内存?
  • @cdhowie 编辑显示代码。
  • 像上面的 cmets 一样,你的字符串已经被自动实习了,因为你使用的是文字字符串,因此内存相同。

标签: java string memory


【解决方案1】:

字符串字面量会自动被实习。也就是说,表达式"sometextelidedforbrevity" 将始终在运行时成为已被实习的String 对象引用。对一个已实习的字符串调用 intern() 实际上是无操作。

【讨论】:

    【解决方案2】:

    感谢 cdhowie 和 Russel Zahniser 在 cmets 中提供的答案,我在文档中忽略了它。

    他们已经通过文字被拘禁了。

    据我了解,唯一不让字符串被实习的方法是使用 new String()。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-07
      • 2014-11-22
      • 1970-01-01
      • 2017-03-04
      相关资源
      最近更新 更多