2017-05-23 8 views
-1

私は、静的参照、静的プリミティブ、オブジェクト参照、オブジェクト自体、メソッド自体がクラス情報と共にどこに格納されるか教えてください。変数と参照はヒープまたはスタックにどこに格納されますか?

*このメモリ管理は誰に教えてくださいか?

* permgenの場所に保存されているものを教えてください。

*以下のプログラムのすべてのオブジェクト参照、オブジェクト、プリミティブデータ(静的型と非静的型の両方)に割り当てられる記憶領域(ヒープまたはスタック)を指定してください。

物事はJLSあたりの概念的ある
package training; 

public class Memory { 


    static int var =1; 
    static String s="hi"; 
    static Threadtutorial th;// this is another class in the same project,consider this an object. 
    static Threadtutorial tt = new Threadtutorial(); 
    int are =2; 
    int d; 
    static float value; 


    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     int a; 
     int b=1; 
     Threadtutorial th;// this is another class in the nsame project,consider this an object. 
     Threadtutorial tt = new Threadtutorial(); 
     final int var =1; 
value=8; 
    } 
    void somemethod(){ 
     int ne=3; 
     String something; 
     Object ref; 
     Object dereee= new Object(); 
    } 
    static void another(int b){ 
     int c=b; 
     Object ref2; 
     Object der= new Object(); 
    } 

} 
+3

質問を編集して、適切な回答を特定するのに十分な詳細な特定の問題に限定してください。 **複数の異なる質問を一度に避ける**。 –

+0

さらに質問をする前に[よく質問するには?](http://stackoverflow.com/help/how-to-ask)をお読みください。 –

答えて

0

は、彼らがJVMに物理的に一つのことと決定論は、他で、状況に応じて変化します。

簡単な部分は、物事が概念的にどこにあるのかです。メソッド領域、静的フィールドの領域、およびその他の型レベル情報を含む型定義は、ヒープのクラス領域にあります。メソッドの引数やその他のメソッドの制御情報は、メソッドが呼び出されるとスタックに格納されます。インスタンスはヒープ上に存在します。

これらの物は、物理的にはさまざまな場所でさまざまな時間に暮らしたり、完全に消えたりすることがあります。メンバ変数の値は、スタックやレジスタにしばらく置かれ、オブジェクトの残りの部分はメモリにも格納されません。メソッド呼び出しが完全に消滅する可能性があります。実行時インタプリタ/コンパイラの組み合わせは、プログラムロジックをどのように扱うかに幅広い余裕があります。

実際にあなたの質問を調査しましたか?何を思いつきましたか?

+1

はい、実際にはヒープとスタックのメモリについて読みましたが、プリミティブとオブジェクトの静的参照がどこに保存されているかを知る必要がありますか?その値がオブジェクトの場合はどこに保存されますか?静的ブロックと非静的ブロックにオブジェクトの値を代入すれば変化しますか? –

+1

"保存された"、すなわち変数を格納した場合のメンバ参照は、 'static'の場合はクラスに格納され、そうでない場合はインスタンスに格納されます。ローカル変数はスタックにあります。参照式は、レジスタまたはスタックにあります。私はあなたが "その物の場合にその値が保存される場所"という意味を知らない。オブジェクトとクラスはヒープに存在します。 Staticとinstance _initializer_ブロックはそれを変更しません。私はあなたが "静的ブロック"を意味すると仮定していますが、 "非静的ブロック"が何を意味するのかはわかりません。あなたはこの質問のためにどのような情報源を探しましたか?あなたはリンクを共有してもよろしいですか? –

+0

したがって、すべてのローカル変数の参照(オブジェクト自体ではない)とメソッドパラメータが各スレッドのスタックに保存されると仮定します。「オブジェクトとクラスはヒープにあります。私はオブジェクトがヒープに存在することを理解しています。しかし、クラスによってどういう意味ですか? permgenスペースにバイトコードとして保存されますか?正確に静的な参照変数とその値はどこに格納されますか? –

関連する問題