问题标签 [string-interning]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1189 浏览

java - 为什么这些字符串的 str == str.intern() 的结果不同?

结果:

第一个打印true,第二个打印false。为什么结果不一样?

0 投票
1 回答
464 浏览

java - 我可以让 Gson.fromJson() 使用 String.intern 还是使用 StringPool 来处理大量使用的字符串

我正在使用 Gson 反序列化大量 JSON 文档,性能分析表明垃圾收集很难跟上,因此暂停时间非常长。我怀疑 Gson 会为 JSON 文档中的所有元素创建大量字符串,并且在处理完这些元素后会很快再次释放出来。

我用谷歌搜索并发现了一些没有导致任何地方的讨论。

我同意实习所有字符串没有用,如果您指定应该实习哪些东西,实习通常很有用,例如 JSON 中的地图键通常是一个不错的选择。

有没有办法告诉 Gson 哪些字符串要实习,例如通过专门的序列化程序?或者有没有办法为映射键之类的东西设置一个 StringPool,以避免一直在堆上分配这些项目。

0 投票
3 回答
83 浏览

ruby - 什么时候分配一个被声明为冻结的字符串(如果有的话?)

在 ruby​​ 2.2 中,以下是否分配新的 String 对象或使用已被实习的对象?假设这些命令按照给定的顺序运行。

如果你能提供你的答案的证据,那就太好了:)。

0 投票
3 回答
100 浏览

java - 混淆字符串引用比较 == 与实习生

我读过这篇文章,我们什么时候应该在字符串常量上使用字符串的实习生方法,但仍然不太清楚 String == 也与实习生()比较。我有几个例子。有人可以帮助我更好地理解这一点。

0 投票
2 回答
996 浏览

java - 池和堆中的字符串创建

对字符串有一些疑问,

我根据网上各种文章的理解写这篇文章,有些说法可能有误,请多多包涵。

  1. 当我们做 String str1 = new String ("newStr1"); . 这将创建 2 个字符串对象。一个在常规堆中,另一个在字符串池中。为什么 2 个对象及其用法?为什么不只是一个在游泳池?

  2. 如果我们将对象创建为String str2 = new String("newStr2").intern(); . 这将检查池中是否存在类似(有意义相等)的对象,并提供对它的引用。如果没有,它会在池中创建一个,而不是在堆中?如果是这样,那么我们应该大部分时间使用实习生来节省内存吗?尽管它会稍微影响性能。所以基本上它是String str2 = "newStr2"; (对于字符串文字来说,interning 是隐式的)

  3. 在 Java-6 之后,字符串池从 perm gen 空间移动到堆区域?所以基本上我们现在只有一个区域作为堆,还是字符串池现在作为堆中的一个单独部分?如果它不是一个单独的部分,那么仍然会创建 2 个对象吗?

0 投票
2 回答
1431 浏览

c# - Are interned strings excepted from garbage collection in .NET?

I am trying to reduce time it takes to do a Gen2 collection. My app creates and holds a large number of string objects, which persist through its life.

Reducing number of scanned objects should reduce GC time. I was wondering whether intern pool is excepted from garbage collection. There isn't anything to collect there anyway. If so, I could intern all these strings and speed up GC.

0 投票
2 回答
1507 浏览

c# - 序列化程序上的字符串实习生。反序列化()

我目前正在使用 json.net 反序列化一个中等大小的对象集合的字符串。总共约 7000 项。

每个项目都有一个由 4 个相同字符串组成的重复组,在内存分析中,这会根据嵌套等创建大约 40,000 个引用。

有没有办法让序列化程序对每个相同的字符串使用相同的引用?

示例 Json:

添加了示例。如您所见, groupName 值在几乎所有对象上重复。只是相关代码发生了变化。这不是一个大问题,但随着数据集的增长,我宁愿不要过多地增加分配。

也可能看起来“代码”可能会重复,但它对每个人来说都是独一无二的。基本上是同一对象的多个标识符。

0 投票
2 回答
393 浏览

string - cpython的字符串实习的规则是什么?

在 python 3.5 中,是否可以预测我们何时会得到一个实习字符串或何时会得到一个副本?在阅读了有关此问题的一些 Stack Overflow 答案后,我发现是最有帮助但仍不全面的一个。比我查看的Python 文档还要多,但默认情况下不保证实习

通常,Python 程序中使用的名称是自动实习的,用于保存模块、类或实例属性的字典具有实习键。

所以,我的问题是关于内部intern()条件的,即决策(是否实习字符串文字):为什么同一段代码在一个系统上工作而不是在另一个系统上工作,以及关于上述主题的答案的作者意味着什么规则说的时候

发生这种情况的规则非常复杂

0 投票
4 回答
130 浏览

java - 字符串实习生()行为

来自String 类的实习方法的javaDocs :

当调用 intern 方法时,如果池中已经包含一个等于该 String 对象的字符串,由 equals(Object) 方法确定,则返回池中的字符串。否则,将此 String 对象添加到池中并返回对该 String 对象的引用。

考虑以下用例:

有人可以解释为什么seven == seven.intern()真的,而以下是的:

  • System.out.println(fifth == fifth.intern());
  • System.out.println(sixth == sixth.intern());
  • System.out.println(eight == eight.intern());
0 投票
2 回答
358 浏览

java - 为什么 String.intern() 方法返回两个不同的结果?

我有这样的代码:

我能理解为什么str1.intern() == str1而且str3.intern() == str3是真的,但我不明白str2.intern() == str2。为什么这是假的?

我的java版本是:1.8.0_73