2.9.1 GC制御機能の概要
GCとは,プログラムが使用し終わったメモリ領域を自動的に回収して,ほかのプログラムが利用できるようにするための技術です。GCはJavaVMが実行します。
GCには処理時間が掛かります。また,GC実行中は,JavaVM上のすべてのプログラム処理が中断するため,GCを適切に実行できるかどうかが,システムの処理性能に大きく影響します。
バッチサーバでは,バッチアプリケーションが長時間リソースを排他するのを回避するため,GC制御機能を提供しています。GC制御機能とは,リソースが排他されていないときに明示的にFullGCを実行するための機能です。GC制御機能の利用によって,リソースの排他中にFullGCが発生するのを回避できます。
GC制御機能について,例を使用して説明します。
GC制御機能を使用していない場合,バッチ処理と並行してオンライン処理を実行する環境では,次の図に示す問題があります。
この図では,バッチアプリケーションでのリソース排他中に,FullGCが発生しています。これによって,バッチアプリケーションはリソースを排他したまま処理が中断します。また,この間にオンライン処理から排他中のレコードが参照されると,オンライン処理もバッチサーバのFullGCが終了するまで中断します。
GC制御機能を使用すると次の図のようになります。
図のように,FullGCの実行要求が出たときに,バッチアプリケーションでリソースを排他していると,FullGCの実行は待ち状態になります。
レコードの排他が解除されると,バッチサーバでFullGCが実行されます。また,オンライン処理もリソースへのアクセスができるようになります。これによって,バッチアプリケーションでの長時間のリソース排他を回避できます。