◾️はじめに
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】オブジェクトの使用メモリサイズを測る
【Tomcat】Tomcat ログあれこれ