问题标签 [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 投票
2 回答
1106 浏览

java - 使用 PermGen 空间或 roll-my-own 实习生方法?

我正在编写一个编解码器来处理使用定制的有线协议通过 TCP 发送的消息。在解码过程中,我创建了许多Strings、BigDecimals 和日期。客户端-服务器访问模式意味着客户端发出请求然后解码数千条响应消息是很常见的,这会导致大量重复 String的s,BigDecimals等。

因此,我创建了一个InternPool<T>类,允许我实习每个类的对象。在内部,池使用WeakHashMap<T, WeakReference<T>>. 例如:

我的问题:我正在使用InternPoolforBigDecimal但我是否应该考虑也使用它String 而不是 String'intern()方法,我认为该方法使用 PermGen 空间?使用 PermGen 空间有什么好处?

0 投票
2 回答
405 浏览

c# - 我应该如何处理反序列化的字符串实习?

在下面的示例中,我将字符串实习在构造函数中,这很好。但是,当我从二进制格式化程序中反序列化对象时,我认为字符串不会被实习,因为应该调用构造函数。我应该如何确保 _name 字符串被实习?... 还是会被拘留好吗?

编辑:所以它似乎可以在不处理 OnDeserializedAttribute 的情况下工作(正确地实习字符串)。它是如何做到的?

我正在使用内存分析器,无论有没有下面的方法,它仍然可以实习字符串?魔法?:-/

谢谢

0 投票
4 回答
745 浏览

c# - 关于字符串实习性能的问题

我很好奇。该场景是一个 Web 应用程序/站点,例如每秒有 100 个并发连接和许多(20 个?)页面加载。

如果应用程序需要提供格式化字符串

“你好,{0}”会被拘留吗?还是只会与

其中,关于实习,将提供更好的表现:上述或,

甚至

所以我的主要问题是:1)string.Format 文字是否会被实习 2)是否值得为 stringbuilder 设置一个变量名以进行快速查找,或者 3)查找本身是否相当繁重(如果上面的 #1 为否)

我意识到这可能会导致微不足道的收益,但正如我所说,我很好奇。

0 投票
5 回答
1862 浏览

c++ - 重复文字和硬编码

我看到以下模式经常发生:

请注意,文字字符串被使用了两次。提取物来自 nginx 源代码库。

当在编译单元中遇到这些文字时,编译器应该能够合并这些文字。

我的问题是:

  1. 在编译单元中遇到商业级编译器(VC++、GCC、LLVM/Clang)是否会消除这种冗余?
  2. (静态)链接器在链接目标文件时是否删除了此类冗余。
  3. 如果 2 适用,这种优化会在动态链接期间发生吗?
  4. 如果 1 和 2 适用,它们是否适用于所有文字。

这些问题很重要,因为它允许程序员在不损失效率的情况下变得冗长——例如,考虑将大量静态数据模型硬连接到程序中(例如,在某些低级场景中使用的决策支持系统的规则) .

编辑

2 点/说明

  1. 上面的代码是由公认的“大师”程序员编写的。那家伙单枪匹马写了nginx。

  2. 我没有问过哪种可能的文字硬编码机制更好。因此,不要跑题。

编辑 2

我最初的例子是相当做作和限制性的。以下代码段显示了嵌入到内部硬编码知识中的字符串文字的用法。第一个片段用于配置解析器,告诉它要为哪个字符串设置哪些枚举值,第二个片段更普遍地用作程序中的字符串。只要编译器使用字符串文字的一份副本,我个人对此感到满意,并且由于元素是静态的,它们不会进入全局符号表。

紧随其后的是:

对于那些留在主题上的人,太棒了!

0 投票
1 回答
2410 浏览

java - Java 的 String#intern() 方法是如何实现的?

我试图查看 Java 的String#intern()方法,但它是public native String intern();

一般来说,实习是如何实施的?在字符串的情况下?

0 投票
5 回答
3282 浏览

java - 现实生活中,在 Java 中使用 String.intern() 的实际示例?

我已经看到许多描述 String intern()'ing 如何工作的原始示例,但我还没有看到可以从中受益的真实用例。

我能想到的唯一情况是拥有一个接收大量请求的 Web 服务,由于严格的模式,每个请求在性质上都非常相似。在这种情况下,通过对请求字段名称进行实习(),可以显着减少内存消耗。

谁能提供一个在生产环境中使用 intern() 并取得巨大成功的例子?也许是流行的开源产品中的一个例子?

编辑:我指的是手动实习,而不是字符串文字的保证实习等。

0 投票
3 回答
1398 浏览

java - Java中的字符串比较和字符串实习

什么时候应该比较Strings 作为对象,什么时候应该使用他们的equals方法?为了确保,我总是使用equals,但这似乎不是很有效。在什么情况下我可以确定它string1 == string2可以安全使用?

谢谢!

0 投票
3 回答
222 浏览

.net - 什么时候在 .Net 代码中手动实习字符串是个好主意?

参考在这里:http: //msdn.microsoft.com/en-us/library/system.string.intern.aspx

看起来这是由编译器自动完成的,但也可以手动完成。如果我错了,请纠正我并对此进行更多说明。语言是 C#、VB.Net、C++/CLI 还是其他语言是否重要?

谢谢。

0 投票
2 回答
329 浏览

java - 有没有办法“刷新”实习字符串?

出于性能原因,我正在使用一个使用 String.intern() 的外部库。很好,但是我在给定的运行中经常调用那个库,所以我遇到了可怕的

java.lang.OutOfMemoryError: PermGen 空间

显然我可以使用 JVM 命令行-XX:MaxPermSize修饰符,但该解决方案的可扩展性不是很高。相反,有没有办法定期(在两个“批次”库调用之间)“刷新”实习字符串池,即清空 String 类持有的字符串静态表?

0 投票
1 回答
181 浏览

.net - .NET 资源文件字符串是否被保留?

当我使用 .resx 文件存储固定字符串值(要绑定到 .aspx 页面上的控件)时,这些字符串是否被保留?

我假设编译器从 XML 文件中读取字符串,并将它们替换为代码中的文字,因此它们成为实习生。

它是否正确?