文字列リテラルがガベージ コレクションされることはありますか?ストリングインターンとクラスアンロードのニュアンスを探る。

DDD
リリース: 2024-10-31 05:13:30
オリジナル
350 人が閲覧しました

 Do String Literals Ever Get Garbage Collected? Exploring Nuances of String Interning and Class Unloading.

文字列リテラルのガベージ コレクション

質問:

文字列リテラルは一般にインターンされているとみなされ、したがって、ゴミ収集。ただし、文字列の連結、String クラスのキャッシュ、クラスのアンロードの微妙な違いを検討すると、混乱が生じます。明確にするために、次の質問を詳しく調べてみましょう:

  1. コンパイル時リテラル ("java") として定義された文字列はガベージ コレクションされますか?
  2. インターン メソッドはどのように行われますか?ガベージ コレクションの動作に影響を与えますか?
  3. String クラスがアンロードされるときにのみリテラルがガベージ コレクションされるというのは本当ですか?

答え:

1.コンパイル時リテラルのガベージ コレクション:

コンパイル時に定義された文字列リテラルは、それらのリテラルを含むコードをロードしたクラス ローダーが存在する限り存続します。リテラルを使用するクラスがロードされたままである限り、それらを表す String オブジェクトはガベージ コレクションされません。ただし、クラスローダが破壊された場合、リテラルはガベージコレクションの対象となる可能性があります。

2. intern メソッドとガベージ コレクション:

文字列に対して intern メソッドを呼び出すと、文字列リテラルを表す同じオブジェクトが返されます。そのため、インターンされた文字列の寿命はリテラル自体と同じです。ただし、文字列リテラルと同一ではない new を使用して作成された文字列は、到達不能になった場合にガベージ コレクションされる可能性があります。

3.クラスのアンロードと文字列リテラル:

String クラスのアンロード時にリテラルがガベージ コレクションされるだけであると主張するのは誤りです。 Java は、String クラスなどのコア クラスをアンロードしません。文字列リテラルは、それを参照するコードがアクティブである限り保持されます。

以上が文字列リテラルがガベージ コレクションされることはありますか?ストリングインターンとクラスアンロードのニュアンスを探る。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!