1 定数プール
定数プールは 2 つのタイプに分かれており、1 つは の 静的定数です。クラス ファイル Pool、2 番目は、JVM にロードされる .class ファイル内の静的定数プールによって形成される 実行時定数プールです。
1.1 静的定数プール
.class ファイル内の定数プールは配列とみなすことができます。一部の定数は配列に格納されます。バイトコードで必要な場合は、命令 この定数が使用される場合、配列のインデックスを通じてアクセスされます。
次のコードを見てください:
String m = "hellohellohellohellohello"; String n = "hellohellohellohellohello";
バイトコードでは次のようになります:
// 常量池: #1 hellohellohellohellohello #2 ... ... ---------------------------- String m = #1; String n = #1;
もちろん、これは単なる簡略化されたバージョンであり、実際にはもっと複雑です(実際のバージョンについては、この記事の最後にあるリファレンス セクションに回答が掲載されています。今のところは、簡略化されたバージョンのみを考慮してください)
これに格納されている文字列定数は単なる文字列定数であることに注意してください。単純な UTF8 Java 文字列オブジェクトではなく、エンコードされたバイト シーケンスです。これは、txt テキストに保存する文字列と同じです。UTF8 形式を使用して .class ファイルを開くと、hellohellohellohellohello
が表示されます。解析対象:
1.2 ランタイム定数プール
静的定数プールを理解すると、ランタイム定数プールを理解するのが簡単になります。簡単に言えば、ランタイム定数プールは、JVM の .class ファイル内の静的定数プールのランタイム表現です。.class ファイル内の各静的定数プールは、対応するランタイム定数プールを生成します。 JVM は命令 String m = #1
を解釈するときに、このクラスのランタイム定数プールに移動して #1 の定義を見つけることができます。
2 文字列プール
文字列プールは、String
オブジェクトを再利用するために Java によって設定されたキャッシュ プールであり、Java 1.7 より前ではメソッド領域に設定され、保存されていました。これは String オブジェクトです。Java 1.7 以降はヒープ上に設定され、String
オブジェクトへの参照を保存します。String
オブジェクト自体はヒープ上の別の場所に存在します。以下では Java 1.7 以降の状況を標準とします。
上記の例を続けます。 JVM が String m = #1 を解釈しているとき、ランタイム定数プールから対応する UTF8 シーケンスを取得しています。次に、この UTF8 シーケンスに対応する String オブジェクトを文字列プールで検索し、オブジェクトの参照を追加します。 mに割り当てられました。この String が作成されるタイミングが気になるかもしれませんが、この R の記事によると、このステートメントが配置されているクラスがロードされるときに、対応するオブジェクトがすでに文字列プールに存在する場合は何も行われません。が存在しない場合は、対応する String オブジェクトが作成され、その参照がプールに配置されます。
文字列プールに加えて、Integer
や Long
などのラッパー タイプにも独自のキャッシュ プールがあります。 -128~127 のキャッシュ Integer
オブジェクト、リテラル代入または Integer.valueOf()
を使用する場合、対応するオブジェクトがプール内に存在する場合、プール内のオブジェクトが返されます。プール内にそのようなオブジェクトが存在しない場合にのみ、新しいオブジェクトがヒープ上に作成されます。 ただし、文字列プールとは異なり、これらの Wrapper プールは文字列プールのように増加しません。つまり、プール内のオブジェクトの数は固定されており、Integer プールには -128 ~ 127 のみが存在します。 . .
基本型に対応するバッファ プールは次のとおりです:
boolean values true and false all byte values short values between -128 and 127 int values between -128 and 127 char in the range \u0000 to \u007F
jdk 1.8 のすべての数値バッファ プールの中で、整数バッファ プール IntegerCache は非常に特殊です。このバッファの下限はプールは - 128、上限です。デフォルトの制限は 127 ですが、この上限は調整可能です。JVM を開始するときに、-XX:AutoBoxCacheMax= を通じてこのバッファ プールのサイズを指定します。このオプションは、実行時に java.lang という名前のファイルを設定します。 JVM が初期化され、.IntegerCache.high システム プロパティが設定され、IntegerCache の初期化時にシステム プロパティが読み取られて上限が決定されます。
以上が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ヘンタイを無料で生成します。

人気の記事

ホットツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

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

WebStorm Mac版
便利なJavaScript開発ツール
