享元设计模式如何最小化使用的内存?对我来说,它看起来不是创建对象,而是只是将对象持有的数据外部化,这意味着使用的内存是相同的。
我错过了什么吗?
享元设计模式如何最小化使用的内存?对我来说,它看起来不是创建对象,而是只是将对象持有的数据外部化,这意味着使用的内存是相同的。
我错过了什么吗?
享元模式背后的想法是你有一个指向共享数据的小对象。
也就是说,对象的多个实例共享数据。
如果每个数据只有一个对象,它确实不会使用更少的内存,而是更多,因为您现在拥有数据和指向所述数据的指针。
Quoting from http://www.oodesign.com/flyweight-pattern.html
The intent of this pattern is to use sharing to support a large number of objects that have part of their internal state in common where the other part of state can vary.
Flyweight is a software design pattern. A flyweight is an object that minimizes memory use by sharing as much data as possible with other similar objects; it is a way to use objects in large numbers when a simple repeated representation would use an unacceptable amount of memory.
对齐和隐藏状态。大多数 OO 语言中的对象必须至少对齐 8 字节边界。32 位处理器只能有效地访问 4 字节边界的数据。除了对象自己的数据外,额外的空间还用于存储每个对象的隐藏类指针(4 字节)。代表一个位的两个对象则至少占用 16 个字节。在 64 位处理器上,它通常是 16 字节对齐。
在某些 OO 语言中,值对象用于处理小整数等常见情况。Smalltalk 实现具有 31 位小整数,并使用额外的位来指示这种情况。