2

享元设计模式如何最小化使用的内存?对我来说,它看起来不是创建对象,而是只是将对象持有的数据外部化,这意味着使用的内存是相同的。

我错过了什么吗?

4

3 回答 3

2

享元模式背后的想法是你有一个指向共享数据的小对象。

也就是说,对象的多个实例共享数据。

如果每个数据只有一个对象,它确实不会使用更少的内存,而是更多,因为您现在拥有数据和指向所述数据的指针。

于 2012-10-13T14:39:54.637 回答
1

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.

Wiki article Flyweight

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.

于 2012-10-13T15:01:28.037 回答
1

对齐和隐藏状态。大多数 OO 语言中的对象必须至少对齐 8 字节边界。32 位处理器只能有效地访问 4 字节边界的数据。除了对象自己的数据外,额外的空间还用于存储每个对象的隐藏类指针(4 字节)。代表一个位的两个对象则至少占用 16 个字节。在 64 位处理器上,它通常是 16 字节对齐。

在某些 OO 语言中,值对象用于处理小整数等常见情况。Smalltalk 实现具有 31 位小整数,并使用额外的位来指示这种情况。

于 2012-10-13T14:49:22.327 回答