Javaにあるオブジェクトのインスタンス変数は、JVMのスタックまたはメソッド領域に格納されていますか?
また、複数のスレッドに対して異なるインスタンス変数がありますか?
メソッド領域に格納されている場合、インスタンス変数は静的変数ストレージとどのように異なりますか?
Stackおよびheapは、OSによってJVMに割り当てられたメモリです。システムで実行されます。Stackは、メソッドとローカル変数が格納されるメモリ場所です。 (変数参照primitiveまたはobject参照もスタックに格納されます)。 Heapは、オブジェクトとそのインスタンス変数が格納されるメモリ場所です。
要約すると:
また、複数のスレッドに対して異なるインスタンス変数がありますか?
すべてのスレッドにはプログラムカウンター(PC)とJavaスタックがあります。PCはJavaスタックを使用して中間値、動的リンク、戻り値を格納しますメソッドとディスパッチ例外の場合、これはレジスタの代わりに使用されます。
また、スレッドの詳細については、このトピックを必ずお読みください スレッドオブジェクトはどこに作成されますか?スタックまたはヒープ? 。
メソッド領域に格納されている場合、インスタンス変数は静的変数ストレージとどのように異なりますか?
上記のように静的フィールドはヒープに格納されます。一方、ローカル変数はスタックに格納されます。
//編集
Bruno Reis および Peter Lawrey のコメントによると、エスケープ分析についても読む必要があります
正確には、
リファレンス:Head First Java