2

私はすべてがガベージコレクションを取得することを知っています。しかし、ガベージ コレクションの時期になったことを JRE に正確に伝えるものは何でしょうか。イベントや時間間隔のようなものですか?

4

6 に答える 6

7

HotSpot のガベージ コレクションは非常に複雑なビジネスに成長しており、作成者でさえ完全に理解するのに苦労しています。したがって、単純な答えを与えることはできません。いくつかのトリガーは次のとおりです。

  1. しきい値に達する各オブジェクト世代の占有。
  2. 特定の世代のメモリ割り当て要求が失敗しました。
  3. 全体的なヒープ占有率がしきい値に達しています。

関心のあるガベージ コレクションの種類を指定していないことに注意してください。マイナーコレクションとメジャーコレクションがあり、技術的には大きく異なります。また、考えているガベージ コレクターも指定していません。HotSpot には 4 つのガベージ コレクターから選択できます。

あなたが Java の初心者である場合、与えるべき最善のアドバイスは次のとおりです。b) 学びたければ、深く掘り下げる必要があります。

于 2013-07-05T07:36:54.487 に答える
0

Java のガベージ コレクションは、Javaヒープ サイズJVMに基づいてガベージ コレクションが必要であると判断したときに発生します。

ただし、GC に強制的にガベージを収集させることができます。

System.gc () 

また

Runtime.gc () 

ただし、ガベージ コレクションが行われる保証はありません。

詳細: http://javarevisited.blogspot.com/2011/04/garbage-collection-in-java.html#ixzz2Y9gKzQE1

于 2013-07-05T07:48:06.693 に答える
0

使用できますSystem.gc();が、実行されるという保証はありません (実行するように GC に「提案」するだけです)。

JVMには、さまざまなモードで実行できるGCを含むさまざまな実装があり、通常はかなりうまく機能する非常に複雑なアルゴリズムがあります。つまり、特別な使用法(またはプラットフォームの再起動後のような特別なイベント)がある場合-フラグ(最小ヒープサイズ、最大ヒープサイズなど)を使用して調整できますが、そうしなくても、メモリを解放する必要があるときはいつでも、GCはnull参照(それらを指すポインター)を持つオブジェクトを収集しますヒープ。

于 2013-07-05T07:36:05.373 に答える
0

オブジェクトに null 参照がある場合、ガベージ コレクションが実行されます。しかし、GCはそれが行われたときのような保証を与えません。

于 2013-07-05T07:36:14.253 に答える
0

私は、GC に完全に依存することはお勧めできません。THISまたはTHISを参照してください。

于 2013-07-05T07:36:38.423 に答える