1

Sedgewick のalgorithm4 book の 201 ページでは、a が使用するメモリNodeは 40 バイトと示されています。

class Node{
    Item item;
    Node next;
} 

与えられた内訳は次のとおりです。

  • オブジェクトのオーバーヘッド = 16 バイト
  • 項目参照 = 8 バイト (=メモリアドレス)
  • 次の参照 = 8 バイト
  • 余分なオーバーヘッド = 8 バイト

余分なオーバーヘッドの説明は次のとおりです。

Node クラス (142 ページ) としてネストされた非静的 (内部) クラスには、追加の 8 バイトが必要です (囲んでいるインスタンスを参照するため)。

彼が言及しているこの囲みの実例は何ですか? Nodeクラスには変数と変数のみが含まれitemますnext

誰かがこれを明確にできますか?

4

2 に答える 2

1

それNodeは、非静的内部クラスであると言っています。クラスが静的な内部クラスである場合、囲んでいるクラスなしで存在する可能性があります。静的ではないため、定義されている外部クラスのインスタンスに依存します(その一部です)。

したがって、クラスBarと静的内部クラスがある場合Foo:

public class Bar {
    private class Foo {
    }
}

を使用するFooには、囲んBarでいる必要があります。

Foo foo= new Bar().new Foo();

が静的だった場合Foo、私はできる

Foo foo= new Bar.Foo(); //i.e. new Bar.Foo()

したがって、 の外側のインスタンスには、これらの追加の 8 バイトが必要ですBar

于 2013-06-21T10:00:56.913 に答える
1

彼が言及しているこの囲みの実例は何ですか?

オブジェクトが属するLinkedListクラスのインスタンスです。Node

実際、javap を使用してファイルを調べると、含まれているインスタンスArrayList$Node.classへの参照を含む不思議な合成属性が表示されるはずです。ArrayList

于 2013-06-21T10:02:18.147 に答える