0

Java では文字列は不変です。つまり、文字列オブジェクトを変更するたびに、新しいインスタンスが作成され、古いオブジェクトは参照されなくなります。つまり無駄になります。そのため、大きなプログラムでは、アクセスできない参照されていないオブジェクトが非常に多くなります。Javaはこれを管理しますか? どうやって?例えば-

String s="abc";
s=s.concat("def");

現在、オブジェクト「abc」はまったく参照できませんが、文字列は不変であるため、メモリプールには引き続き存在します。

4

3 に答える 3

2

まず第一に、Java とガベージ コレクションでクラッシュ ソースが必要なようです。そうは言っても、明確にするべきいくつかの基本的なポイントがあります。

1) オブジェクトが不変だからといって、そのメモリがリークしているわけではありません。不変オブジェクトへの参照が存在しない場合は、他のオブジェクトと同様にガベージ コレクションの対象となります。

2) 文字列定数は、常にJVM によってインターンされるため、例外です。これは、文字列定数が特別なメモリ プールに保持され、文字列が作成されるたびに、このプールが最初にチェックされ、その文字列が既に存在するかどうかが確認されることを意味します。存在する場合は、それへの参照が返されます。(メソッドを使用して、非定数文字列を強制的にプールに参加させることができますString.intern())。

3) これらの文字列が占有するメモリの量は非常に少ないため、基本的に気にする必要はありません。

于 2013-10-24T05:38:40.860 に答える
1

Java には、バックグラウンドで実行し続ける自動ガベージ コレクタがあります。このガベージ コレクタは、未使用のオブジェクトをチェックし続け、そのようなオブジェクトを検出/検出すると、それを破棄します。つまり、その特定のオブジェクトによって使用されるメモリ/リソースを解放します。これは JVM によって処理されるため、心配する必要はありません。ただし、必要に応じて、JVM にガベージ コレクションを実行するように指示できます。その後、JVM はそれに応じてガベージ コレクションをスケジュールできます。

ガベージ コレクションの仕組みを知るには、以下のリンクを確認してください。

http://javarevisited.blogspot.in/2011/04/garbage-collection-in-java.html

http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

于 2013-10-24T05:35:09.707 に答える