この記事では、Java の定数プールとは何ですか? Java 定数プールの概要には一定の参考価値があります。必要な方は参考にしていただければ幸いです。
Java の定数プール
Java 仮想マシン jvm では、メモリ配分は次のようになります: 仮想マシン ヒープ、プログラム カウンター、ローカル メソッド スタック、仮想マシン スタック、メソッド領域。
プログラム カウンターは、jvm 実行プログラムのパイプラインであり、いくつかの命令を保存するために使用されます。ローカル メソッド スタックは、jvm オペレーティング システム メソッドによって使用されるスタックです。仮想マシン スタックは、プログラム コードの実行に使用されるスタックで、メソッド領域にクラス変数、クラス情報、メソッド情報、および定数プール (テーブル形式のシンボル参照) が含まれます。 ヒープは、仮想マシンによって使用されるヒープです。プログラムコードを実行します。 ######絶え間ない?これは、値が与えられると変更できない量です。final で変更されたメンバー変数は定数です。
クラス ファイル定数プールとは何ですか?
クラス ファイルには、クラスのバージョン情報、フィールド情報、メソッド、インターフェイスなどの情報があり、また、定数プールも存在することがわかります。これがクラス ファイル定数プールです。
主に保存するために使用されるクラス ファイル定数プールは何ですか?
には、コンパイルによって生成されたさまざまなリテラルとシンボル参照が格納されます。コンピューターサイエンスでは、リテラルはソースコード内の固定値を表現するために使用される表現であり、シンボリック参照は参照先を記述するために使用される一連のシンボルであり、明確に使用できる限り、どのような形式のリテラルでも構いません。ターゲットを見つけます。
定数プールはテーブルの形式で存在します (テーブルはシンボル参照ではなく文字列値を格納するために使用されます)。実際には 2 つのタイプに分類できます。1 つは静的定数プール、もう 1 つは静的定数プールです。は実行時定数プールです。定数プールには 11 個の定数テーブルがあります。定数プール内の各定数はテーブルを表します。
定数テーブル
フラグ値 | 説明 | |
---|---|---|
1 | UTF-8 でエンコードされた Unicode 文字列 | |
3 | int 型のリテラル値 | |
4 | float 型のリテラル値 | #CONSTANT_Long |
long 型のリテラル値 | CONSTANT_Double | |
リテラル値double 型の | CONSTANT_Class | |
クラスまたはインターフェイスへのシンボリック参照 | ##CONSTANT_String | |
String 型のリテラル値への参照 | CONSTANT_Fieldref | |
Yes シンボルフィールドの場合 | CONSTANT_Methodref | |
クラス内のメソッドのシンボルを適用します | CONSTANT_InterfaceMethodref | |
インターフェイス内のメソッドへのシンボリック参照 | CONSTANT_NameAndType | |
Toフィールドまたはメソッドの部分シンボル参照 | # 定数プール Integer integer1 = 127; Integer integer2 = 127; System.out.println(integer1 == integer2); // true Integer integer1 = 128; Integer integer2 = 128; System.out.println(integer1 == integer2); // false Javaでは、アドレスの比較に「==」という記号が使用されます。「等しい」という記号は、デフォルトではアドレスの比較に使用される「==」と同じ記号になります。 String string1 = "dashu"; String string2 = "dashu"; System.out.println(string1==string2); // true String string1 = "dashu"; String string3 = new String("dashu"); System.out.println(string1 == string3); // false String str = new String("dashu"); オブジェクトはいくつ作成されますか? new String("dashu"); では、「dashu」リテラル値が定数プールにすでに存在する場合、オブジェクトは 1 つだけ作成され、そうでない場合は 2 つのオブジェクトが作成されます。 原則: リテラル「dashu」が出現すると、システムは同じ文字列が文字列定数プールに存在するかどうかを確認し、存在する場合は新しいオブジェクトを作成しません。そうでない場合は、リテラルの値を使用します。 「dashu」は String オブジェクトを作成します。 new String("dashu") は、キーワード new を使用して、確実に新しいオブジェクトを作成し、初期化のために String パラメーターを受け取るコンストラクターを呼び出すことを意味します。 string1 == string3.intern() に変更すると、定数プール内のリテラル値のアドレスが返されるため、結果は true になります。 スタック: スレッド スタックとネイティブ メソッド スタック // 源码 public class Object{ private static native void registerNatives(); static{ registerNatives(); } } // 源码 public boolean equals(Object obj){ return (this == obj); } // 源码 public String toString(){ return getClass().getName() + "@" + Integer.toHexString(hasCode()); } // 源码 protected native Object clone() throws CloneNotSupportedException; には、 Object 万物皆对象 // 源码注解 Class {@code Object} is the root of the class hierarchy. Every class has {@code Object} as a superclass. All objects, including arrays, implements the methods of this class. @ see java.lang Class @ since JDK1.0定数プール: すべての定数をクラス ファイルに保存する final で変更されたクラス変数を除き、クラス メンバーを初期値に初期化する必要がありますが、最終変数は直接変数値に初期化されますが、クラス メンバーは異なります。 は、シンボル参照を変数 xxx に解析することです。この表現は直接参照になります。これは、一般的な xxx0203r0e などのメモリ アドレスです。 `string1 == string3.intern()` に変更すると、定数プール内のリテラル値のアドレスが返されるため、結果は true になります。 String クラスの intern() メソッドは、定数プールを検索して、equal() に等しい文字列があるかどうかを確認します。 String string1 = "dashu"; String string3 = new String("dashu"); System.out.println(string1==string3.intern());定数プールに "dashu" |
以上がJavaの定数プールとは何ですか? Java 定数プールの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

メモ帳++7.3.1
使いやすく無料のコードエディター

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 中国語版
中国語版、とても使いやすい
