検索
ホームページJava&#&チュートリアルJavaの定数プールとは何ですか? Java 定数プールの概要

この記事では、Java の定数プールとは何ですか? Java 定数プールの概要には一定の参考価値があります。必要な方は参考にしていただければ幸いです。

Java の定数プール

Java 仮想マシン jvm では、メモリ配分は次のようになります: 仮想マシン ヒープ、プログラム カウンター、ローカル メソッド スタック、仮想マシン スタック、メソッド領域。

Javaの定数プールとは何ですか? Java 定数プールの概要

プログラム カウンターは、jvm 実行プログラムのパイプラインであり、いくつかの命令を保存するために使用されます。ローカル メソッド スタックは、jvm オペレーティング システム メソッドによって使用されるスタックです。仮想マシン スタックは、プログラム コードの実行に使用されるスタックで、メソッド領域にクラス変数、クラス情報、メソッド情報、および定数プール (テーブル形式のシンボル参照) が含まれます。 ヒープは、仮想マシンによって使用されるヒープです。プログラムコードを実行します。 ######絶え間ない?これは、値が与えられると変更できない量です。final で変更されたメンバー変数は定数です。

クラス ファイル定数プールとは何ですか?

クラス ファイルには、クラスのバージョン情報、フィールド情報、メソッド、インターフェイスなどの情報があり、また、定数プールも存在することがわかります。これがクラス ファイル定数プールです。

主に保存するために使用されるクラス ファイル定数プールは何ですか?

には、コンパイルによって生成されたさまざまなリテラルとシンボル参照が格納されます。コンピューターサイエンスでは、リテラルはソースコード内の固定値を表現するために使用される表現であり、シンボリック参照は参照先を記述するために使用される一連のシンボルであり、明確に使用できる限り、どのような形式のリテラルでも構いません。ターゲットを見つけます。

定数プールはテーブルの形式で存在します (テーブルはシンボル参照ではなく文字列値を格納するために使用されます)。実際には 2 つのタイプに分類できます。1 つは静的定数プール、もう 1 つは静的定数プールです。は実行時定数プールです。定数プールには 11 個の定数テーブルがあります。定数プール内の各定数はテーブルを表します。

定数テーブル

定数テーブルの種類CONSTANT_Utf8CONSTANT_IntegerCONSTANT_Float#CONSTANT_Long5long 型のリテラル値CONSTANT_Double6 リテラル値double 型のCONSTANT_Class7クラスまたはインターフェイスへのシンボリック参照89101112
フラグ値 説明
1 UTF-8 でエンコードされた Unicode 文字列
3 int 型のリテラル値
4 float 型のリテラル値
##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"); オブジェクトはいくつ作成されますか?
答えは、2 または 1 です。

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;

には、JNI 言語または # を通じて c を呼び出すための native 修飾子があります。 ##c が実行されます。

すべてのクラスは

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

定数プール:

すべての定数をクラス ファイルに保存する
Java では、定数プールは静的定数プールと実行時定数プールの 2 つの形式に分けられると言われています。

静的定数プールは、文字列リテラル、クラス情報、メソッド情報などが含まれるクラス ファイル内の定数プールです。定数プールは、主にクラス ファイルの領域の大部分を占めます。リテラルとシンボル参照。

実行時定数プールは、クラスのロードが完了した後の Java 仮想マシンの操作であり、クラス ファイル内の定数プールをメモリにロードし、それがメソッド領域にあることを確認します。実行中の定数プールは動的であり、実行中に新しい定数を生成してプールに入れることができます。これが上記のコードです。コンパイル中に定数を生成する必要はなく、実行時に新しい出力を生成してプールに入れることもできます。

次の分析:

Java 仮想マシン jvm が特定のクラスを実行するとき、メモリへのロードからアンロードまでクラスを通過する必要があります。

プロセス全体は、ロード、検証、準備、解析、初期化、使用、およびアンインストールです。

ロード、

クラス ファイルのバージョンが現在の Java 仮想マシンのバージョンと互換性があるかどうかを確認し、クラス ファイルが仮想マシンの仕様を満たす必要があります。

準備、何を準備する必要がありますか?

final で変更されたクラス変数を除き、クラス メンバーを初期値に初期化する必要がありますが、最終変数は直接変数値に初期化されますが、クラス メンバーは異なります。

分析、分析とは何ですか?

は、シンボル参照を変数 xxx に解析することです。この表現は直接参照になります。これは、一般的な xxx0203r0e などのメモリ アドレスです。

初期化。変数を初期化するために、静的に変更された変数または静的な静的コード ブロックを使用してコンストラクターを形成します。

使用、

アンインストール

クラスがメモリにロードされると、jvm はクラス定数プールの内容をランタイム定数プールに保存します。定数プール 各クラスに 1 つあります。

クラス定数プールには、リテラルとシンボルへの参照が格納されます。これは、オブジェクトのシンボル参照値です。コンパイル段階で、シンボル参照が直接参照に解析されます。解析後は定数が保存されます。これは直接引用です。次に、各 jvm がグローバル定数プールにコピーを 1 つだけ持つようにし、文字列定数の直接参照値を保存します。

`string1 == string3.intern()` に変更すると、定数プール内のリテラル値のアドレスが返されるため、結果は true になります。


String クラスの intern() メソッドは、定数プールを検索して、equal() に等しい文字列があるかどうかを確認します。

String string1 = "dashu";
String string3 =  new String("dashu");
System.out.println(string1==string3.intern());

定数プールに

"dashu" リテラルがない場合は、このリテラルの "dashu" 値を最初に定数テーブルに入れます。次に、定数テーブルのアドレスを返します。

コンスタント プールの利点

コンスタント プールは、システム パフォーマンスの低下につながるオブジェクトの頻繁な作成と破棄を回避でき、またオブジェクトの共有を実現してメモリを節約できます。スペースと実行時間。

以上がJavaの定数プールとは何ですか? Java 定数プールの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?Mar 17, 2025 pm 05:46 PM

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

適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?Mar 17, 2025 pm 05:45 PM

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

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?Mar 17, 2025 pm 05:44 PM

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

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?Mar 17, 2025 pm 05:43 PM

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

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Mar 17, 2025 pm 05:35 PM

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

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

MantisBT

MantisBT

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

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

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

PhpStorm Mac バージョン

PhpStorm Mac バージョン

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

SublimeText3 中国語版

SublimeText3 中国語版

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