2

Flyweight 設計パターンは、使用されるメモリをどのように最小化しますか? 私にとっては、オブジェクトを作成する代わりに、オブジェクトが保持するデータを外部化するだけのように見えます。つまり、使用されるメモリは同じです。

何か不足していますか?

4

3 に答える 3

2

フライウェイトパターンの背後にある考え方は、共有データを指す小さなオブジェクトがあるということです。

つまり、オブジェクトの複数のインスタンスがデータを共有します。

データごとにオブジェクトが1つしかない場合は、実際に使用するメモリは少なくなりませんが、データとそのデータを指すポインタがあるため、使用するメモリは多くなります。

于 2012-10-13T14:39:54.637 に答える
1

http://www.oodesign.com/flyweight-pattern.htmlからの引用

このパターンの目的は、共有を使用して、内部状態の一部が共通であり、状態の他の部分が異なる可能性がある多数のオブジェクトをサポートすることです。

ウィキ記事 フライ級

Flyweight はソフトウェア設計パターンです。flyweight は、他の同様のオブジェクトとできるだけ多くのデータを共有することによって、メモリの使用を最小限に抑えるオブジェクトです。これは、単純な反復表現が容認できない量のメモリを使用する場合に、多数のオブジェクトを使用する方法です。

于 2012-10-13T15:01:28.037 に答える
1

整列と隠し状態。ほとんどの OO 言語のオブジェクトは、少なくとも 8 バイト境界で位置合わせする必要があります。32 ビット プロセッサは、4 バイト境界でのみデータに効率的にアクセスできます。余分なスペースは、オブジェクト自体のデータに加えて、各オブジェクトの隠しクラス ポインター (4 バイト) を格納するために使用されます。ビットを表す 2 つのオブジェクトは、少なくとも 16 バイトを使用します。64 ビット プロセッサでは、多くの場合、16 バイト アラインメントになります。

一部の OO 言語では、小さな整数などの一般的なケースを処理するために値オブジェクトが使用されます。Smalltalk の実装には 31 ビットの小さな整数があり、これが事実であることを示すために余分なビットを使用します。

于 2012-10-13T14:49:22.327 に答える