我见过许多描述 String intern()'ing 工作原理的原始示例,但我还没有看到可以从中受益的真实用例。
我能想到的唯一情况是拥有一个接收大量请求的 Web 服务,由于严格的模式,每个请求在性质上都非常相似。在这种情况下,通过对请求字段名称进行 intern() 处理,可以显着减少内存消耗。
谁能提供一个在生产环境中使用 intern() 并取得巨大成功的例子?也许是流行的开源产品中的一个例子?
编辑:我指的是手动实习,而不是字符串文字等的保证实习。
最佳答案
如果您的 N
字符串只能采用 K
不同的值,其中 N
远远超过 K,则实习会非常有益
。现在,您不再将 N
字符串存储在内存中,而是最多存储 K
。
例如,您可能有一个由 5 位数字组成的 ID
类型。因此,只能有 10^5
个不同的值。假设您现在正在解析一个包含许多对 ID
值的引用/交叉引用的大型文档。假设该文档总共有 10^9
个引用(显然某些引用在文档的其他部分重复)。
所以 N = 10^9
和 K = 10^5
在这种情况下。如果您没有对字符串进行实习,您将在内存中存储 10^9
字符串,其中许多字符串是 equals
(通过 Pigeonhole Principle )。如果您 intern()
您在解析文档时获得的 ID
字符串,并且您不会保留对从文档中读取的非实习字符串的任何引用(所以它们可以被垃圾收集),那么您将永远不需要在内存中存储超过 10^5
个字符串。
关于java - 现实生活中,在 Java 中使用 String.intern() 的实际示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3510425/