Cosminexus 機能解説
ガーベージコレクション制御は次の流れで処理されます。
図14-10 ガーベージコレクション制御の処理の流れ
それぞれの処理について説明します。
監視タイマスレッドはJavaVMのメモリを監視し,次のどれかの条件を満たす場合,ガーベージコレクション制御機能にガーベージコレクションの実行要求を出します。
ガーベージコレクション実行が要求されると,ガーベージコレクション制御機能は,バッチアプリケーションが使用しているコネクションを調査します。コネクションの調査では,バッチアプリケーションがリソース排他中かどうかを確認します。
次の表にリソースの排他中とみなす状態を示します。
表14-10 リソースの排他中とみなす状態
トランザクション | 状態 | DB Connector | JDBC | |
---|---|---|---|---|
トランザクション外 | SQL文を実行中※1 |
|
○ | × |
ResultSetに対する操作中 |
|
○ | × | |
オブジェクト取得などの操作中※1 |
|
○ | × | |
トランザクション中 |
|
○ | × | |
グローバルトランザクション(JTA)実行中 | − | − |
(凡例)○:リソース排他中として扱う ×:リソース排他がないものとして扱う
−:該当しない
注※1 表中のjava.sql.Statementは継承クラスであるjava.sql.PreparedStatement,java.sql.CallableStatementを含みます。
注※2 トランザクションの開始後(setAutoCommit(false)やUserTransaction.beginの実行後),SQL文の実行またはResultSetに対する操作を1回以上実行していて,トランザクションの決着処理が完了していない状態を指します。
JDBCを使用したリソース操作については,リソース排他がないものとして扱われます。例えば,JDBCのSQL文の実行と,DB Connectorでのトランザクション処理が混在するプログラムを実行した場合,DB Connectorのトランザクション処理だけがガーベージコレクション制御の対象となります。
リソース排他中と判断されると,メッセージKDJE55025-Iを出力して,フルガーベージコレクションの実行待ち状態になります。リソース排他が一つでもあると,フルガーベージコレクションは待機し続けます。フルガーベージコレクション実行待ちの例を次の図に示します。
図14-11 フルガーベージコレクション実行待ちの例
この図では,一つのジョブプログラム中で二つのリソースにアクセスしています。リソース排他中にフルガーベージコレクションの実行が要求されると,ガーベージコレクション制御機能はフルガーベージコレクションの実行を待機状態にします。二つのリソースアクセスが終了するcon2.commit()が実行されると,排他が解除されます。
リソース排他がなくなると,フルガーベージコレクションが実行されます。
All Rights Reserved. Copyright (C) 2006, 2007, Hitachi, Ltd.