Java Constant Poolの目的は何ですか?
質問
現在、Java仮想マシンの仕様について深く掘り下げようとしています。私が読んでいるのは オンライン版Inside the JVMブック を読んでいますが、私が理解できない混乱した抽象化が1つあります。以下は、この本からの抜粋です。
ロードする各型について、Java 仮想マシンは定数プールを保存する必要があります。定数プールは、リテラル(文字列、整数、浮動小数点定数)、型、フィールド、メソッドへのシンボリック参照を含む、型によって使用される定数の順序付きセットです。定数プールのエントリは、配列の要素のようにインデックスで参照されます。定数プールは、型によって使用されるすべての型、フィールド、およびメソッドへのシンボリック参照を保持するため、Javaプログラムの動的リンクにおいて中心的な役割を果たします。
上記と一般的なCPについて、いくつか質問があります。
-
CP は
.class
ファイルにありますか? - 著者は、"シンボリック参照" をどのように意味するのですか?
- コンスタント・プールの目的は何ですか?
どのように解決するのですか?
フレームがどのように構成されているのか、図を使って理解することが有効だと思います。
フレームはオペランド(演算命令)が存在する場所であり、そこでダイナミックリンクが行われます。 いわば、クラスとそのメンバを追跡するために定数プールを使用する省略記法です。
各フレームはランタイム定数プールへの参照を含んでいます。この参照は、そのフレームで実行されるメソッドのクラスの定数プールを指しています。この参照はダイナミックリンクのサポートに役立ちます。
C/C++ コードは通常、オブジェクト ファイルにコンパイルされ、複数のオブジェクト ファイルがリンクされて、実行可能ファイルや dll などの使用可能なアーティファクトが作成されます。リンクの段階で、各オブジェクト ファイル内の記号参照は、最終的な実行ファイルに対する実際のメモリ アドレスに置き換えられます。Java では、このリンク段階は実行時に動的に行われます。
Java ファイルがコンパイルされるとき、変数とメソッドへのすべての参照は、シンボリック参照としてクラスの定数プールに格納されます。シンボリック参照は論理的な参照であり、実際に物理的なメモリロケーションを指す参照ではありません。
以下は James Blooms JVM インターナルズ を参照してください。
関連
-
Java Notes 005_この行に複数のマーカーがある - キーを変数に解決できない - シンタックスエラー、ins
-
Web Project JavaでPropertiesファイルを読み込むと、「指定されたファイルがシステムで見つかりません」というソリューションが表示されます。
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
undefined[sonar] sonar:デフォルトのスキャンルール
-
Solve モジュールのビルドに失敗しました。Error: ENOENT: no such file or directory エラー
-
Git Pull Failed マージされていないファイルがあるため、Pull できません。
-
java -jarコマンドでパッケージを実行すると、無効または破損したjarfile xxxx.jarが表示される。
-
シェルコマンドやスクリプトのJavaコール
-
Junitのユニットテストはjava.lang.Testを報告します。
-
keytool error: java.io.FileNotFoundException: cacerts (アクセス拒否されました。)
-
Java基礎編 - オブジェクト指向
-
JNIエンカウンターエラー:構造体またはユニオンではない何かでメンバー 'FindClass' のリクエスト
-
Spring Bootは、Tomcatの組み込みのmaxPostSizeの値を設定します。