は、文字列定数プールで文字列プールのサイズが超過するとどうなりますか?彼らはスペースを最適化するために、ランタイムのインスタンスによって作成された参考文献の表から参照されているので、Javaでは
文字列リテラルは、ごみ収集、 ではありません。
文字列リテラルプールのサイズが超えている場合は、 文字列リテラルプールの各文字列には参照があるため、GCには適格ではないためです。 JVMでどのように処理されますか?
は、文字列定数プールで文字列プールのサイズが超過するとどうなりますか?彼らはスペースを最適化するために、ランタイムのインスタンスによって作成された参考文献の表から参照されているので、Javaでは
文字列リテラルは、ごみ収集、 ではありません。
文字列リテラルプールのサイズが超えている場合は、 文字列リテラルプールの各文字列には参照があるため、GCには適格ではないためです。 JVMでどのように処理されますか?
文字列リテラルは、不要になったときに収集できます。通常、クラスに多くのクラスをロードしようとすると到達する可能性のある他の制限があるため、クラスに表示される場合は問題ありません。最大パーマネントGen.
一般的に言えば、開発者は文字列リテラルプールを使いすぎず、代わりにデータベースやファイルを使用して大量のデータをロードすることができます。
システムのスペースを最適化するためにString.intern()を多用すると、問題が発生する可能性があります。 String.intern()は無料ではなく、大量(数百万)の文字列を追加するとますます高価になります。これがパフォーマンス上の問題であれば、開発者にとってはそれが当然のはっきりしているはずです。
JavaRanchには、実際のコード例の説明があります。
一般的な出力は、以下である:
あなたの質問への答えは:あなたが原因文字列定数のOutOfMemoryErrorの取得することができますどのように唯一の方法は、コンパイル時に計算多くの文字列リテラルで、多くのクラスのをロードすることです。最終的にPermGen空間の最大サイズを超えることができます。しかし、これはクラスをメモリにロードするときに起こります(アプリケーションの起動、プロジェクトのWebServerへのデプロイ、新しいライブラリの動的ロードなど)
定数プールの文字列は、もはや必要なくなりました(つまり、クラスをアンロードしたクラス)。 –
文字列プールのサイズが* what *を超えている場合? – EJP