[解決済み】Java Stringのインターンとは?
質問
とは何ですか? 文字列のインターリング をどのような場合に使用するのか、そして なぜ ?
解決方法は?
http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#intern()
基本的に、一連の文字列に対して String.intern() を実行すると、同じ内容を持つすべての文字列が同じメモリを共有することになります。つまり、'john' が 1000 回現れる名前のリストがあったとして、intern を実行することで、実際にメモリが割り当てられるのは 'john' ひとつだけであることを保証します。
これは、プログラムのメモリ使用量を減らすのに有効です。しかし、キャッシュはJVMによって恒久的なメモリプールで維持されることに注意してください。それは通常、ヒープに比べてサイズが限られているので、あまり多くの重複した値を持っていない場合は、インターンを使用するべきではありません。
intern() を使用した場合のメモリ制約の詳細
<ブロッククオート一方では、String の重複を削除するために を内部化します。問題は、内部化された文字列が パーマネント・ジェネレーションは、JVMの中で予約されている領域です。 クラス、メソッド、その他のJVM内部オブジェクトのような非ユーザーオブジェクトのための オブジェクトを作成します。この領域の大きさは限られており、通常 ヒープより 文字列に対してintern()を呼び出すと、その文字列は ヒープからパーマネント世代に移動してしまうので、そのリスクがあります。 PermGenのスペースが足りなくなる。
-- からです。 http://www.codeinstructions.com/2009/01/busting-javalangstringintern-myths.html
JDK 7から(HotSpotでの話ですが)、何かが変わりました。
JDK 7 では、インターンした文字列は Java ヒープの永久世代に割り当てられず、アプリケーションが作成した他のオブジェクトと一緒に Java ヒープの主要部分 (若い世代と古い世代として知られています) に割り当てられます。この変更により、メインのJavaヒープに存在するデータが増え、パーマネント世代に存在するデータが減るため、ヒープサイズを調整する必要が生じる可能性があります。ほとんどのアプリケーションでは、この変更によるヒープ使用量の差は比較的小さいですが、多くのクラスをロードしたり、String.intern()メソッドを多用する大規模なアプリケーションでは、より大きな差が生じます。
-- より Java SE 7 の機能と強化された点
更新:Java 7 以降、インターンした文字列はメインヒープに格納されます。 http://www.oracle.com/technetwork/java/javase/jdk7-relnotes-418459.html#jdk7changes
関連
-
[解決済み] どのように配列の10未満の値(x * 2)を倍増するコードを取得するには?(Java)
-
[解決済み] .lengthが解決できない、またはフィールドでない
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] この2回(1927年)を引き算すると、なぜおかしな結果になるのでしょうか?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 未処理の例外タイプIOException」が表示されるのですが?
-
[解決済み] maven. -source 1.5ではラムダ式がサポートされていません。
-
[解決済み] JVMフラグCMSClassUnloadingEnabledは、実際に何をするのですか?
-
[解決済み] Cloneable throws CloneNotSupportedException
-
[解決済み] Java の条件付きコンパイル:コードチャンクをコンパイルしないようにするには?
-
[解決済み] java.lang.ClassNotFoundException: クラス com.ibm.db2.jcc.DB2Driver が Worklight プラットフォームまたはプロジェクトに見つかりませんでした。
-
[解決済み] 午前0時からの時間を秒単位で取得する方法
-
[解決済み] JDBC タイプの方言マッピングがありません。1111
-
[解決済み] スリーピング中のスレッドが割り込まれ、データベースへの接続が失われる
-
[解決済み] .lengthが解決できない、またはフィールドでない