目次
1 Constant pool
Java チュートリアル
ホームページ Java &#&チュートリアル JAVAにおける文字列定数プールとバッファプールの理解と役割の詳細な分析

JAVAにおける文字列定数プールとバッファプールの理解と役割の詳細な分析

Mar 18, 2022 pm 05:24 PM
java

この記事では、java に関する関連知識を提供します。主に文字列定数プールとバッファー プールの理解と役割を紹介します。文字列プールと定数プールはまったく異なります。2 つのことがあり、多くの場所があります。混同しやすいので初心者の方には誤解を招きやすいので、ここでは皆さんのお役に立てればと思い、丁寧に解説していきたいと思います。

JAVAにおける文字列定数プールとバッファプールの理解と役割の詳細な分析

推奨学習: 「java 学習チュートリアル

文字列プールは 文字列定数プール とも呼ばれます, この名前が誤解の元だと思います. string の 3 つの単語を省略して、constant pool だけを残す人もいます。文字列オブジェクトのキャッシュ プールを呼び出すだけです。 String pool

1 Constant pool

Constant プールは 2 つのタイプに分かれており、1 つは static です。 1 つは .class ファイル内の定数プール で、もう 1 つは .class ファイル内の静的定数プールを JVM にロードすることによって形成される 実行時定数プール#です。

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 オブジェクトが作成され、その参照がプールに配置されます。

文字列プールに加えて、

IntegerLong などのラッパー タイプにも独自のキャッシュ プールがあります。 -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 チュートリアル

以上がJAVAにおける文字列定数プールとバッファプールの理解と役割の詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプ Java での日付までのタイムスタンプ Aug 30, 2024 pm 04:28 PM

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルの量を見つけるためのJavaプログラム カプセルの量を見つけるためのJavaプログラム Feb 07, 2025 am 11:37 AM

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

Spring Tool Suiteで最初のSpring Bootアプリケーションを実行するにはどうすればよいですか? Spring Tool Suiteで最初のSpring Bootアプリケーションを実行するにはどうすればよいですか? Feb 07, 2025 pm 12:11 PM

Spring Bootは、Java開発に革命をもたらす堅牢でスケーラブルな、生産対応のJavaアプリケーションの作成を簡素化します。 スプリングエコシステムに固有の「構成に関する慣習」アプローチは、手動のセットアップを最小化します。

See all articles