Javaは変数名をメモリ内の場所にどのように関連付けますか?
これについて私が最初に考えたのは、すべての変数名に使用される静的テーブルが必要であり、それをその値またはその値への場所に関連付けるということです。それは存在し、このテーブルの正式な名前はありますか?
Javaは変数名をメモリ内の場所にどのように関連付けますか?
これについて私が最初に考えたのは、すべての変数名に使用される静的テーブルが必要であり、それをその値またはその値への場所に関連付けるということです。それは存在し、このテーブルの正式な名前はありますか?
プリミティブ型の変数の値は何らかの数値であり、参照型の変数の値は参照 (通常はメモリ アドレス) です。
問題は、指定された変数の値がどこに格納されているかです。変数の種類によって異なります。ローカル変数、インスタンス変数 (フィールド)、およびクラス変数 (静的フィールド) があります。
ローカルの名前はコンパイル中に解決されます。各変数は単にメソッドの i 番目の変数になり、メソッド呼び出しのスタック フレームに i 番目の変数として格納されます。
たとえば、変数は異なります。フィールド名は常にバイトコードに存在します (ただし、通常、JIT コンパイラによって生成されたマシン コードには存在しません)。特定のクラスのすべてのオブジェクトは同じレイアウトを持つため、クラスは特定のフィールドのオフセット(オブジェクトの先頭からの距離) を格納できます。インタープリターは、オブジェクトのアドレスを読み取り、オフセットを追加して、変数が格納されている場所を計算できます。
クラス変数はインスタンス変数に似ていますが、より単純です。この場合、クラスはその変数の名前と値の両方を格納します。