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/