java - Java 的 String Intern 是享元吗?

标签 java design-patterns flyweight-pattern

Java的String内存池的实现是否遵循享元模式?

我之所以有这个疑问,是因为我看到 Intern 中没有涉及外部状态。在 GoF 中,我读到内在状态和外在状态之间应该有一个正确的平衡。但在实习生中,一切都是内在的。

或者我们应该说关于属性没有严格的规则,只是共享对象以减少内存就足以称之为享元。

请帮助我理解。

最佳答案

不考虑实习,Java String 通过在字符串和通过 substring 和类似方法调用派生的字符串之间共享 char[] 来利用享元模式。不过,这也有不利的一面:如果您从一个巨大的字符串中取出一个小的子串,那么巨大的 char[] 将不符合垃圾回收的条件。

注意:从 OpenJDK 版本 1.7.0_06 开始,上述内容已过时:代码已更改,因此 char[] 不再在实例之间共享。 substring() 创建一个新数组。

关于java - Java 的 String Intern 是享元吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11189155/

相关文章:

java - 从另一个内部类内部的内部类访问变量

java - JFrame : Getting actual content size

java - 计数文章 "a","an"在文本文件中被使用的次数

java - Java 中 String flyweight 实现的最佳替代方案

java - 在字符串中存储连接字符串

c# - 简化 C# 中的组合接口(interface)

java - 装饰器模式: Is it required that all decorators add value despite the sequence of initialization

java - 文件阅读器的设计模式?

java - 可从享元中自行移除资源

java - 享元 : Strings already use String pool : Does it makes sense to pool String objects for Flyweight?