Java String Interning では、一意の文字列を共有プールに格納し、重複オブジェクトを減らすことでメモリを最適化する概念が導入されています。 Java が文字列リテラルを自動的にインターンする方法と、開発者が intern() メソッドを使用して手動で文字列をプールに追加する方法について説明します。
文字列インターンをマスターすることで、Java アプリケーションのパフォーマンスとメモリ効率を向上させることができます。 Java 文字列の処理やその他のプログラミングの概念をさらに詳しく知りたい場合は、JAVATPOINT で利用できる包括的なチュートリアルを参照して、より詳細なガイダンスを確認してください。
文字列インターニングは、「文字列プール」または「インターン文字列プール」と呼ばれる、プールに個別の文字列値のコピーを 1 つだけ保存する方法です。 Java で文字列を作成すると、Java 仮想マシン (JVM) はその文字列が文字列プールにすでに存在するかどうかを確認します。
存在する場合、JVM はその文字列への参照を返します。そうでない場合、JVM は新しい文字列をプールに追加し、それへの参照を返します。
このメカニズムは、重複した文字列オブジェクトの作成を回避し、メモリを節約するのに役立ちます。同じ内容を持つ複数のオブジェクトを作成する代わりに、Java は既存のオブジェクトを再利用します。
Java では、文字列リテラルは自動的にインターンされます。二重引用符を使用して文字列を宣言すると、その文字列は文字列プールに追加されます。例えば:
String str1 = "Hello"; String str2 = "Hello";
この場合、文字列「Hello」がインターンされているため、str1 と str2 は両方とも文字列プール内の同じオブジェクトを指します。両方の変数が同じオブジェクトを参照しているため、str1 == str2 は true.
を返します。
ただし、 new キーワードを使用して文字列を作成する場合、その文字列は自動的にインターンされません。代わりに、ヒープ メモリに新しいオブジェクトが作成されます。例えば:
String str3 = new String("Hello"); String str4 = new String("Hello");
ここで、str3 と str4 は、同じ内容を含んでいるにもかかわらず、2 つの異なるオブジェクトを指します。したがって、str3 == str4 は異なるメモリ位置を参照するため false を返します。
文字列を手動でインターンしたい場合は、 intern() メソッドを使用できます。このメソッドは、文字列がプールに存在するかどうかを確認します。存在する場合は、既存の文字列への参照を返します。そうでない場合は、文字列をプールに追加し、参照を返します。
次の例を考えてみましょう:
String str5 = new String("Hello").intern(); String str6 = "Hello"; System.out.println(str5 == str6); // true
この例では、str5 は intern() メソッドを使用して手動でインターンされるため、str5 と str6 は両方とも文字列プール内の同じオブジェクトを参照します。したがって、str5 == str6 は true を返します。
文字列インターンの主な利点はメモリの最適化です。それぞれの個別の文字列のコピーを 1 つだけ保存することで、アプリケーションのメモリ フットプリントが削減されます。これは、パーサー、テキスト プロセッサ、データベース関連プログラムなど、同一の文字列を多数使用するアプリケーションで特に有益です。
メモリの節約に加えて、文字列インターンによりパフォーマンスも向上します。インターンされた文字列が再利用されるため、内容ベースの比較 (equals()) ではなく、より高速な参照比較 (==) を実行でき、これにより特定の操作が高速化されます。
文字列インターンによりメモリ使用量とパフォーマンスが向上しますが、慎重に使用することが重要です。すべての文字列をインターンすると、文字列プールで過剰なメモリ消費が発生する可能性があります。文字列プールは永続世代スペース (Java 8 以前) またはメタスペース (Java 8 以降) に格納されます。膨大な数の一意の文字列を生成するプログラムでインターンを使いすぎると、メモリの問題が発生する可能性があります。
さらに、文字列インターンは、不変で反復的な文字列を扱う場合に最も有益です。動的に生成された文字列または変更可能な文字列の場合、インターンの利点はそれほど重要ではない可能性があります。
Java String Interning を理解することは、特に反復的な文字列を扱う場合、メモリ使用量を最適化し、パフォーマンスを向上させるために不可欠です。
文字列プールを通じて同一の文字列のインスタンスを再利用することで、アプリケーションのメモリ フットプリントを削減できます。ただし、潜在的なメモリの問題を回避するには、インターンを賢明に使用することが重要です。
文字列処理やその他の Java の概念をさらに詳しく調べるには、JAVATPOINT などのプラットフォームの詳細なチュートリアルを参照すると、貴重な洞察が得られ、プログラミング スキルの向上に役立ちます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3