序文
それは毎日の仕事、面接またはビジネスであるかどうか、私たちはしばしば、コンタクトGCに来ます。我々は、すべてのGCは、Javaのガベージコレクションの方針であることを知っています。GCは、私たちは多くのものを救います。GCでは、私はよくMinorGCとFullGCをアップ属し聞きます。だから、どのような状況の下で、両方のGCそれをトリガーでしょうか?
MinorGCのトリガ条件
それはminorGC行う前に、仮想マシンを判断します古いのを利用できる最大の連続した領域かどうかの新世代よりも大きい総スペースのすべてのオブジェクト
1、それは直接実行よりも大きい場合にminorGC
図2は、以下である、HandlerPromotionFailureを開くために、直接開いていないか否かを判断するFullGC
図3は、HanlerPromotionFailureになった場合、JVMは最大の連続メモリ空間は前年古いプロモーション(よりも大きいか否かを判定するプロモーション歳のオブジェクトの平均サイズ)サイズの平均、直接実行未満のFullGC
4、それはminorGCを行うよりも大きい場合
この条件が満たされた場合HandlerPromotionFailureために、我々は理解することができ、それはマイナーGCを発生する前に、古いの最大の連続したメモリ容量を確認するために仮想機会が空間の新世代内のすべてのオブジェクトよりも大きい場合、マイナーGCは安全です。あなたは、障害として作用させHanlerPromotionFailureの設定値を表示するには、仮想機会を設定しない場合は、許可されている場合、チェックしていきますかどうか、平均サイズの古い年目標に、以前のプロモーションよりも古いの最大利用可能な連続メモリ空間、場合よりも小さい場合だけ、マイナーGCを試みるよりも、より多くのまたはHanlerPromotionFailureのリスク回避のフルGCを行います。あなたが家を買いに行くように上記の保証は、銀行融資に行きます。あなたの融資額が比較的大きい場合には、銀行は通常、保証を提供するために、あなたが必要になります。端的に言えば、銀行は毎月のローンを支払うのに十分な心配です。ここにあなたの古いスポンサーのと同等です。あなたの毎月の支払額のあなたのスポンサーの十分の月収の場合。その銀行は確かにあなたに貸すことはありません。JVMでそれは確かに全GCの直接の実装です。(いくつかの比喩が好きなことを理解することができる強制..)
FullGCトリガ条件
- 宇宙の旧の不足
あなたが大規模なオブジェクト、この大規模なオブジェクトに適合しないエデンの領域を作成する場合は、直接歳それらを保存し、才容量が不足している場合、それは完全なGCをトリガします。これを避けるために、最高のアイデアは、オブジェクトのあまりを作成することではありません。
- の代わりにスペースを永続不足
恒久的な世代のスペースがある場合には永久的な世代間で十分なスペースではありませんが、その後、システムの中で、次にトリガーのフルGC、多くの方法を呼び出して、クラスをロードする必要があります
- YGCは、プロモーションの失敗を表示さ
プロモーション障害が若いGCで発生した年齢まで生存サバイバー領域はスペースが不足している場合、障害が発生したプロモーションがあるでしょう遺族古い、古い時代の標的領域にコピーされる設定値に達した場合、それは次でありますフルGCが発生します。
- 古い時代の平均合計サイズと古い時代に昇格してたときに統計YGC空き領域が発生したよりも大きく、
YGCのイベントでは、安全かどうかを、ここではセキュリティが現在のスペースではなく、FullGCを実行し、安全でないならば、彼らはYGCを実行しないであろう、オブジェクトの平均サイズのYGC古いのプロモーションを収容することができることを意味し決定します。
- System.gcを呼び出して表示
ここでは、にSystem.gcは必ずしもすぐにFullGCをトリガ呼び出し
概要
ここでのトリガ条件MinorGCとFullGCの簡単な要約。JVMは、GCの理解を容易にします。
オリジナルリンク:https://blog.csdn.net/summerZBH123/article/details/81131945