JVM GC原理解析

1231 ワード

JVM GCの原理
  1.JVM      ,           :           。  

          2   (Eden  、Survious  )  3   (1 Eden   2 Survious  )

そのうち:1)***Edenエリア(伊甸園)*:newやnewInstanceなどで作成されたオブジェクトを格納するために使用されます.デフォルトでは、これらはEdenエリアに格納されます.このオブジェクトが大きすぎたり、設定したしきい値を超えたりした場合を除き、Oldエリアに直接割り当てられます.
2)2つのSurvious領域(生存):一般的にS 0,S 1と呼ばれ、理論的には同じ大きさである.
初回GC:
オブジェクトを作成し続ける間、Eden領域が満たされるとYoung GCもMinor GC 1と呼ばれるようになります)最初のGCを開始すると、SurvivousのS 0領域とS 1領域が空になり、そのうちの1つをTo Survivous(Eden領域がGCを実行した後に回収できないオブジェクトを格納するために使用されます).例えば、S 0をTo Survivousとすると、S 1はFrom Survivousとなる.2)Eden領域をGC経由で回収できないオブジェクトをTo Survivous(S 0)領域に格納する(このときEden領域のメモリはゴミ回収中に全て解放される)が、To Survivous(S 0)が満タンになった場合、Edenに残った回収できないオブジェクトはOld領域にしか格納できない.3)Eden領域を空にし,このときFrom Survivous領域(S 1)も空である.4)S 0とS 1は互いにラベルを切り替え、S 0はFrom Survivous、S 1はTo Survivousである.
2回目のGC:2回目のEden領域が満たされた場合、GC 1を開始し、EdenとFrom Survivous(S 0)のうちGCを経て回収されていないオブジェクトをTo Survivous(S 1)に移行し、To Survious(S 1)領域が置かれない場合、残りの回収できないオブジェクトをOld領域に入れる.2)Eden領域空間とFrom Survivous(S 0)領域空間を空にする.3)S 0とS 1は互いにラベルを切り替え、S 0はTo Survivous、S 1はFrom Survivousである.
   ,       ,    S0 S1     ,        ,         。              ,     Old   ,  15 (   --XX:MaxTenuringThreshold=15   )。