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

2022-09-01 21:08:47

我见过许多描述String intern()工作原理的原始例子,但我还没有看到一个现实生活中的用例可以从中受益。

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

任何人都可以提供一个在生产环境中使用intern()并取得巨大成功的例子吗?也许是流行的开源产品中的一个例子?

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


答案 1

如果您的字符串只能采用不同的值,则实习可能非常有益,其中远远超过 。现在,您不会将字符串存储在内存中,而只能存储到 .NKNKNK

例如,您可能有一个由 5 位数字组成的类型。因此,只能有不同的值。假设您现在正在分析一个大型文档,该文档具有许多对值的引用/交叉引用。假设本文档有引用总数(显然,某些引用在文档的其他部分中重复)。ID10^5ID10^9

所以在这种情况下。如果您没有在字符串中穿插,则将字符串存储在内存中,其中许多字符串都位于内存中(根据Pigeonhole Principle)。如果在分析文档时获得的字符串,并且不保留对从文档中读取的未间隔字符串的任何引用(因此可以对它们进行垃圾回收),则永远不需要在内存中存储超过字符串。N = 10^9K = 10^510^9equalsintern()ID10^5


答案 2

我们有一个生产系统,可以一次处理数百万条数据,其中许多都有字符串字段。我们应该在实习字符串,但有一个错误意味着我们不是。通过修复该错误,我们避免了必须进行非常昂贵的(至少6位数,可能是7位数)的服务器升级。