5

オブジェクトはヒープに格納され、静的変数は固定された場所に格納されているという本「Thinking in Java」を読んでいます。

class Myclass{

static int x =0;        //stored on static storage
Myclass obj = new Myclass(); //stored on heap

}

オブジェクトを作成しますが、OOPS に関する限り、静的は良い考えではありません。これはしばらく置いておきます。私の質問があります

  1. static と宣言されたオブジェクトはどこに格納されますか。
  2. この場合、JVM はどのようにインスタンス化を行いますか。
    class Myclass { static Myclass obj = new Myclass(); //no man's land }
4

4 に答える 4

3

すべての静的コンテンツは、クラスのロード/開始時に作成 され、特別な場所に保存されます (ほとんどの場合、perm gen の一部であり、実装によって異なります)。

2 番目の例でMyclassは、ロード時に静的コンテンツが作成/インスタンス化されます。

このチュートリアルでは、概要を説明します。

于 2012-09-21T17:42:14.023 に答える
1

static は、プログラムにとって特別なメモリ位置です。したがって、プログラムは簡単にアクセスできます。プログラムの実行に使用できる場所は 1 つだけです。そして、静的コンテンツが作成される場所です。JVM はヒープ上でオブジェクトをインスタンス化します。ただし、オブジェクトへの静的参照を作成すると、静的メモリの場所に配置されます。

于 2012-09-21T17:52:54.943 に答える
0

静的変数はメソッド領域に格納されます。
メソッド領域は非ヒープ メモリの一部です。クラスごとの構造、メソッドおよびコンストラクターのコードを格納します。クラスごとの構造とは、ランタイム定数と静的フィールドを意味します。
メモリと JVM に関しては、ヒープ メモリ、非ヒープ メモリ、およびメソッド領域が主な専門用語です。

于 2012-09-21T18:07:18.730 に答える