0

言い換えると:

System.gc()オブジェクト インスタンス (収集されていない) を呼び出した後、呼び出し前と同じように世代間で分散されているかどうかを知る必要がありますSystem.gc()

ありがとう、

4

2 に答える 2

5

System.gc() がトリガーされる場合とトリガーされない場合があるフル GC の後、

  • Eden スペースは空になるため、そこにあるものはすべて移動またはクリーンアップされます。
  • サバイバー スペースは、オブジェクトがあるオブジェクトから空のオブジェクトにオブジェクトを交換します。
  • Tenured スペースには、以前と同じ保持オブジェクトがありますが、一部はクリーンアップされている可能性があり、一部はその世代にとって新しい可能性があります。

つまり、世代間で System.gc() がオブジェクトを変更しないのは、次の場合だけです。

  • 無視されるから何もしない
  • 最後のフル GC 以降、作成または破棄されたオブジェクトはありません。

これが System.gc() の呼び出しが悪である別の理由である可能性がある場合

主な理由は、パフォーマンスが低下し、見返りがほとんど得られないためです。注: RMI は定期的に完全なコレクションをトリガーして、分散オブジェクトを確実にクリーンアップすることができますが、これを最小限に抑えようとします。

于 2012-10-16T07:45:32.470 に答える
1

まず第一にSystem.gc()、GC が必要であるという JVM へのヒントにすぎません。GC がトリガーされない可能性があり (-XX:+DisableExplicitGCたとえば、Hotspot で使用する場合)、何かを行うことに依存するべきではありません。JVM は通常、とにかくよく知っています。

それが GC をトリガーする場合、それは他の GC と同様であり、オブジェクトが基準を満たしていれば、オブジェクトは若い世代から古い世代に昇格される可能性があります (たとえば、サバイバー スペースで十分な世代が費やされます)。

于 2012-10-16T07:46:32.207 に答える