Flyweight 設計パターンは、使用されるメモリをどのように最小化しますか? 私にとっては、オブジェクトを作成する代わりに、オブジェクトが保持するデータを外部化するだけのように見えます。つまり、使用されるメモリは同じです。
何か不足していますか?
Flyweight 設計パターンは、使用されるメモリをどのように最小化しますか? 私にとっては、オブジェクトを作成する代わりに、オブジェクトが保持するデータを外部化するだけのように見えます。つまり、使用されるメモリは同じです。
何か不足していますか?
フライウェイトパターンの背後にある考え方は、共有データを指す小さなオブジェクトがあるということです。
つまり、オブジェクトの複数のインスタンスがデータを共有します。
データごとにオブジェクトが1つしかない場合は、実際に使用するメモリは少なくなりませんが、データとそのデータを指すポインタがあるため、使用するメモリは多くなります。
http://www.oodesign.com/flyweight-pattern.htmlからの引用
このパターンの目的は、共有を使用して、内部状態の一部が共通であり、状態の他の部分が異なる可能性がある多数のオブジェクトをサポートすることです。
Flyweight はソフトウェア設計パターンです。flyweight は、他の同様のオブジェクトとできるだけ多くのデータを共有することによって、メモリの使用を最小限に抑えるオブジェクトです。これは、単純な反復表現が容認できない量のメモリを使用する場合に、多数のオブジェクトを使用する方法です。
整列と隠し状態。ほとんどの OO 言語のオブジェクトは、少なくとも 8 バイト境界で位置合わせする必要があります。32 ビット プロセッサは、4 バイト境界でのみデータに効率的にアクセスできます。余分なスペースは、オブジェクト自体のデータに加えて、各オブジェクトの隠しクラス ポインター (4 バイト) を格納するために使用されます。ビットを表す 2 つのオブジェクトは、少なくとも 16 バイトを使用します。64 ビット プロセッサでは、多くの場合、16 バイト アラインメントになります。
一部の OO 言語では、小さな整数などの一般的なケースを処理するために値オブジェクトが使用されます。Smalltalk の実装には 31 ビットの小さな整数があり、これが事実であることを示すために余分なビットを使用します。