2017-03-29 9 views
-4

私は以下のクラスを持っています。このクラスでは、ヒープに格納される変数と、Javaメモリモデルのスレッドスタックに格納される変数は何ですか?私はローカル変数がスタックに格納され、オブジェクトがヒープに格納されていることを知っています。私は与えられたクラスから説明が必要です。メモリモデル内のローカル変数およびオブジェクトとは何ですか?

class School { 

    public int id =1; 

    public Student student=new Student();; 

    public void method(Student st, int f){ 

     Student stud = new Student(); 
     int fees = 100; 
    } 

} 

おかげ

+2

あなたは、与えられたコードに簡単に適用できる2つの事実を述べました。あなたの宿題*はあなたのために難しいですか? – f1sh

+0

質問に答えるために必要な2つのことが質問に記載されているので、私はこのトピックをオフトピックとして閉じるよう投票しています。 – f1sh

+0

こんにちは、私は実際にはローカル変数とオブジェクトとは混同しています。私はメソッド内のオブジェクトもローカル変数だと考えています。メモリモデルでは、これらのオブジェクトはヒープに格納されます。どのように可能です。 – Robin

答えて

0

Student studオブジェクトへ参照、ないオブジェクトです。参照はスタック上にあり、オブジェクトはヒープ上にあります。

Student stud = new Student(); 
     ^  ^
reference on stack object on heap 

注:これは一般的に起こっている知っている必要はありません最適化ですが、エスケープ分析では、オブジェクトは、同様にスタックに配置することができます。

+0

ありがとうピーターローリーその私のために非常に役立ちます。私はお互い疑いがあると私に教えてください 場合stud.id = 5; それからどこに保存されますか? – Robin

+0

@Robin 'stud'はスタック上の参照であり、' id'はヒープ上にあるオブジェクトのフィールドです。 –

+0

こんにちはPeter Lawrey、助けてくれてありがとう、私は別の疑問を持っています。これは、ヒープまたは1つのオブジェクトに4つの新しいオブジェクトを作成しますか? – Robin

関連する問題