如何理解《Java编程思想-第四版》P23 中,这个变量直接存储“值”,并置于堆栈中,因此更加高效
一句中的 “堆栈” 两字,到底是堆还是栈?情况如下:
class demo {
private int var1; // 字段1
private Integer var2; // 字段2
public static void main(String[] args) {
int var3 = 0; // 变量1
demo obj1 = new demo(); // 实例1
}
}
参考《Java编程思想-第四版》P23 和 《深入理解Java虚拟机:JVM高级特性与最佳实践 第2版》P39-P43,对于该 demo
实例1:存储在堆内存中
变量1:存储在方法栈中
实例1中的字段1:存储在堆中
实例1中的字段2:存储在堆中
如果是存储在堆中的话,何来高效一说?
すべての基本的なタイプのデータがスタックに配置されると一般化して言うことはできません。 クラス インスタンスがプリミティブ型を持つ場合、そのプリミティブ型はヒープに配置されます!
メモリはヒープとスタックに分割されます。これはすでにご存知でしょう。
ヒープメモリはJVMに属し、スタックメモリはメソッドに属します。メソッドが終了すると、スタックメモリはなくなります。
プログラムがメイン関数を実行すると、ヒープメモリとメインスタックメモリが存在します
int var3 = 0;
この var3 は main 関数のスタック メモリに配置される値です。
demo obj1 = new Demon(); の後
ヒープ メモリ内のこのインスタンスをもう一度見てみましょう。このインスタンスには 2 つのフィールドがあり、両方ともヒープに保存されています。main 関数のスタック メモリ内に、ヒープ メモリ内の新しいインスタンスを指す参照変数 obj1 があります。
は翻訳文であり、原文では stack、つまり、スタックではなく、 が使用されます。
p22、スタックはスタックを指し、ヒープはヒープを指します