首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java的字符串实习生是轻量级选手吗?

Java的字符串实习生是轻量级选手吗?
EN

Stack Overflow用户
提问于 2012-06-25 20:12:38
回答 3查看 5.3K关注 0票数 13

Java的字符串内存池的实现是否遵循flyweight模式?

为什么我有这样的疑问,我看到实习生中没有外在的状态。在GoF中,我读到在内在状态和外在状态之间应该有一个正确的平衡。但在实习生中,一切都是内在的。

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

请帮我理解一下。

EN

回答 3

Stack Overflow用户

发布于 2015-12-07 22:37:29

您已经正确地认识到Interning和Flyweight都基于相同的想法:缓存和共享公共状态。

对于Flyweight,在没有外部状态可存储的极端情况下,只保留指向内部状态的指针。那么外部状态甚至不需要是对象,指针本身也可以是外部状态。那是Flyweight成为实习生的时候。

实习生“真正”是否是Flyweight的一种,只是关于定义的争论。最重要的是理解如何将一个实例视为另一个实例的特定实例,因此您是优秀的。

票数 3
EN

Stack Overflow用户

发布于 2015-12-27 01:54:51

正如其他人所说,String.intern()就是关于缓存的。它返回对池中已存储的字符串文字的引用。以这种方式,它在某种程度上类似于flyweight模式,因为它使用了现有的对象,从而降低了内存消耗并提高了性能(尽管intern在字符串池中也有自己的查找性能开销)。因此,这两个可能看起来很相似,但实际上并非如此。

票数 0
EN

Stack Overflow用户

发布于 2012-11-20 07:47:16

Flyweight是关于共享对象immmutable内部结构的。Interning就是缓存整个对象。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11189155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档