【Java】Java 〜 ガベージコレクション 〜

◾️はじめに

Java の ガベージコレクション(Garbage Collection; GC)
についてまとめておく

目次

【1】ガベージコレクション
【2】GCの種類
 1)マイナーGC / Scavenge GC / Young GC
 2)メジャーGC / Full GC
【3】GC実行方式の種類
 1)シリアルGC
 2)パラレルGC
 3)コンカレントGC

【1】ガベージコレクション

* 不要になったメモリ領域を自動的に解放する機能

【2】GCの種類

* Garbage Collection(GC) の種類は以下の通り

1)マイナーGC / Scavenge GC / Young GC
2)メジャーGC / Full GC

1)マイナーGC / Scavenge GC / Young GC

* NEW領域のみを対象としたガベージ・コレクション
* 頻繁に実施
* インスタンスが不要になるまでの間、
 From領域とTo領域の間でインスタンスの移動を繰り返す

cf. Scavenge (スカベンジ) = ゴミ拾い

2)メジャーGC / Full GC

* NEWとOLD両方の領域を対象としたガベージ・コレクション

【3】GC実行方式の種類

1)シリアルGC
2)パラレルGC
3)コンカレントGC

1)シリアルGC

* 全アプリケーションスレッドを停止("Stop the world" と呼ばれる)し、
 1つのスレッドでGC実行

欠点

* GCによる停止時間ができてしまう

2)パラレルGC

* シリアルGCと同じくすべてのアプリケーションスレッドを
 停止しながらも複数のスレッドでGCを実行する
 => アプリケーションの停止時間を短縮する
 (ただし、少なからずアプリケーションスレッドの停止時間は発生する)

欠点

* GCスレッド間の同期などにオーバーヘッドがかかり、
 GCスレッドの処理時間が増加する

3)コンカレントGC

 * アプリケーションスレッドと同時にGCスレッドを動作させること
 => アプリケーションと同時に実行するため、停止時間は短縮

欠点

* 全体的なスループット(ある単位時間当たりの処理能力)は下がり、
 応答時間も遅くなる

参考文献

GC実行方式の種類
http://gihyo.jp/dev/serial/01/jvm-arc/0004
http://gihyo.jp/dev/serial/01/jvm-arc/0009
コンカレントGC
http://www.atmarkit.co.jp/ait/articles/0704/24/news136.html
JVMオプション
https://qiita.com/YN0314/items/5e5c57d52ac1379daf6d
https://access.redhat.com/ja/node/205233
https://qiita.com/i_matsui/items/aabbdaa169c6ae51ecb3
http://fomsan.sakura.ne.jp/memo/java/javaVMOptions.html

公式サイト

JVMオプション
https://docs.oracle.com/javase/jp/8/docs/technotes/guides/vm/gctuning/cms.html

関連記事

Java 〜 メモリ構造 〜
https://dk521123.hatenablog.com/entry/2014/06/14/235331
JVMのメモリ情報を出力させる
https://dk521123.hatenablog.com/entry/2014/04/08/211143
Java】オブジェクトの使用メモリサイズを測る
TomcatTomcat ログあれこれ