GCについて
ゴミ収集器について
ゴミ収集器はJVM実行エンジンの要素であり、ゴミを除去することができます.つまり、参照されないメモリです.JVMはhip領域のメモリを整理し、newなどの新しく生成されたオブジェクトから参照されなくなったオブジェクトをクリーンアップします.ごみ収集はメモリを整理するプロセスです.
ごみ収集プロセス
ごみ収集は、スタック領域のメモリをクリーンアップするプロセスであるため、メモリを停止した場合に行う必要があります.そこで、JVMはGCを行うために、まずアプリケーションの実行を停止するstop-the-worldを実行し、GCを実行するスレッドを除いて残りのスレッドは動作を停止する.
1)HeapはYoung世代とOld世代に分けられる.Young世代はEden/survival 0/Survival 1に細分化されている.
2)GCの作業は,Young領域に対するMinor GCとOld領域に対するMajor GCに分けられる.
3)Eden領域に新しいオブジェクトを作成し、Eden領域がいっぱいになるとMinor GCを生成し、参照関係がなければUnreachable Objectと判断し、eden領域がクリアされるとメモリが解放され、他の置換可能なオブジェクトはSubval 0に移動する.
4)既存のSurvival 0の取り消し可能なオブジェクトがSurvival 1に移動します.Survival 1が満たされている場合、移動可能オブジェクトはOld Generationにコピーされます.
5)Old領域が満たされ、Survivor領域からOld領域にアップグレードできない場合、Old領域に対するGC(Magjor GC)が実行される.
1)Javaメソッドで実行される領域変数またはパラメータ参照
2)静的変数による参照
3)JNI生成オブジェクトへの参照
HeapとMetaspaceをJava 8から切り離す
Java 8では、JVMはメモリ領域を永続的に生成するのではなく、metaspace領域を持つ.そして次のような変化が起こりました.(PermGenはクラスメタデータを含む領域であり、Heap領域に属し、サイズが限られている.)
1)カテゴリ内のMeta情報->Metaspace領域へ
2)メソッドのmeta情報に移動->metaspace領域
3)Static Object->Heap領域に移動
4)Stringオブジェクトの固定(String str="hello";)->Heap領域に移動
5)クラスに関する配列オブジェクト情報->Metaspace領域へ
6)Jvm内部オブジェクトと最適化コンパイラの最適化情報->Metaspace領域へ
->Collectionオブジェクトを静的に実装して値を追加し続ける場合がありますが、perm領域がいっぱいになっているためoom...
static List<Object> list = new ArrayList<>();
ごみ収集アルゴリズムのタイプ
-mark-sweep-compactアルゴリズムを使用します.「Old」領域に生きているオブジェクト(Mark)を表示し、生きているオブジェクトのみを残す.(sweep)次に、前からオブジェクトを塗りつぶし、オブジェクトの存在と存在しないに分けます.(compaction)
-基本アルゴリズムはシリアルGCと同じですが、GCは複数のスレッドで処理されます.
−シリアルGCの代わりにsummaryアルゴリズムを使用するsweepアルゴリズム.要約フェーズでは,以前GCが実行されていた領域に対して個別の生体識別を行う.
-intailタグステップでは、生きているオブジェクトを検索し(stop-the-world時間が短い)、見つかったオブジェクトをConcurrent(複数のスレッドが同時に表示される)に参照するConcurrentタグステップが実行されます.次にstop-the-worldを実行し、コメントを一致させます.stop-the-world時間を短縮し、アプリケーションの応答速度を速めるために使用します.
-ボードの各領域にオブジェクトを割り当て、GCを実行します.既存のYoung/Old領域の概念を使用して、オブジェクトを割り当てます.
ごみ収集によるシステムの中断を減らすには
1)オプション変更によるGC性能向上
*参考資料
https://code-factory.tistory.com/48
https://velog.io/@hygoogi/%EC%9E%90%EB%B0%94-GC%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C
Reference
この問題について(GCについて), 我々は、より多くの情報をここで見つけました https://velog.io/@gkskaks1004/GC에-대해서テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol