2

Javaの文字列が次のように宣言されているとします。String s = "hi"

上で作成したStringオブジェクトがガベージコレクションされるかどうかを知りたいだけですか?

と書くs = nullと、この時点でStringオブジェクトはガベージコレクションされますか?

4

2 に答える 2

2

このようにすると、コンパイラはそれをリテラルプールに移動します。これで、「hi」のすべてのインスタンスがプール内のこの値に置き換えられます。これは、実際にはコンパイラがメモリ使用量を最適化する方法です。いいえ、これらの値がガベージコレクションされることはありません。ただし、実行時に作成されたStringオブジェクトはガベージコレクションされます。

于 2012-10-07T18:38:49.867 に答える
1

JVM は、文字列リテラルを文字列定数プールにロードします。これは、javac または JIT コンパイラーによって行われません。オブジェクトへの参照がなくなると、この方法で定数プールにロードされた文字列を他のオブジェクトと同様に消去できます。これにはクラスをアンロードする必要がありますが、アプリケーションがこのように動作する場合に発生する可能性があります。

于 2012-10-07T19:15:16.640 に答える