<分区>
根据 GOF 对“享元”的定义,重用\共享相似类型的对象以减少内存增长。
如果是这种情况,java 字符串对象通过使用字符串常量池做同样的事情。那能不能说Java String实现了享元设计模式呢?如果不是,为什么?
<分区>
根据 GOF 对“享元”的定义,重用\共享相似类型的对象以减少内存增长。
如果是这种情况,java 字符串对象通过使用字符串常量池做同样的事情。那能不能说Java String实现了享元设计模式呢?如果不是,为什么?
最佳答案
Can we say that, Java String implements the Flyweight design pattern?
不是真的。或者充其量您可以说它可以实现该模式。
字符串常量池只包含对应于:
的String
对象
String.intern()
方法的应用程序或库方法故意“留存”的字符串对象。普通 Java String
对象不会在字符串池中创建。相反,它们是在普通堆中创建的,并且只能通过调用 intern()
来“放入池中”。这是有充分理由的。如果默认情况下所有字符串都被保留,则会增加 GC 开销和/或典型 Java 应用程序的长期内存占用。
(请注意,Java 8 现在在 G1 收集器中有一个可选的 string deduplication feature,它通过组合相等的字符串的 char 数组来节省空间。)
关于java - Java 是否使用字符串实现享元设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37371303/