Cosminexus 機能解説

[目次][用語][索引][前へ][次へ]

14.6.2 ガーベージコレクション制御の処理の流れ

ガーベージコレクション制御は次の流れで処理されます。

図14-10 ガーベージコレクション制御の処理の流れ

[図データ]

  1. メモリ監視
    監視タイマスレッドは,JavaVMのメモリを監視します。(1)に示す条件を満たすと,ガーベージコレクション制御機能にガーベージコレクション実行要求が出されます。
  2. リソース排他のチェック
    ガーベージコレクション実行要求が出されると,ガーベージコレクション制御機能はリソース排他中かどうかを調査します。
  3. フルガーベージコレクションの実行待ち
    リソース排他中の場合,フルガーベージコレクションの実行は待ち状態になります。
  4. フルガーベージコレクションの実行
    リソースの排他が解除されると,フルガーベージコレクションが実行されます。

それぞれの処理について説明します。

<この項の構成>
(1) メモリ監視
(2) リソース排他のチェック
(3) フルガーベージコレクションの実行待ち
(4) ガーベージコレクションの実行
(5) 注意事項

(1) メモリ監視

監視タイマスレッドはJavaVMのメモリを監視し,次のどれかの条件を満たす場合,ガーベージコレクション制御機能にガーベージコレクションの実行要求を出します。

(2) リソース排他のチェック

ガーベージコレクション実行が要求されると,ガーベージコレクション制御機能は,バッチアプリケーションが使用しているコネクションを調査します。コネクションの調査では,バッチアプリケーションがリソース排他中かどうかを確認します。

次の表にリソースの排他中とみなす状態を示します。

表14-10 リソースの排他中とみなす状態

トランザクション 状態 DB Connector JDBC
トランザクション外 SQL文を実行中※1
  • java.sql.Statement#executeの実行中
  • java.sql.Statement#executeUpdateの実行中
  • java.sql.Statement#executeQueryの実行中
  • java.sql.Statement#executeBatchの実行中
×
ResultSetに対する操作中
  • java.sql.ResultSet#deleteRowの実行中
  • java.sql.ResultSet#insertRowの実行中
  • java.sql.ResultSet#updateRowの実行中
×
オブジェクト取得などの操作中※1
  • java.sql.Statement#addBatchの実行中
  • java.sql.Connection#prepareCallの実行中
  • java.sql.Connection#prepareStatementの実行中
×
トランザクション中
  • Connection APIによるトランザクション実行中※2
  • ローカルトランザクション(JTA)実行中※2
×
グローバルトランザクション(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のトランザクション処理だけがガーベージコレクション制御の対象となります。

(3) フルガーベージコレクションの実行待ち

リソース排他中と判断されると,メッセージKDJE55025-Iを出力して,フルガーベージコレクションの実行待ち状態になります。リソース排他が一つでもあると,フルガーベージコレクションは待機し続けます。フルガーベージコレクション実行待ちの例を次の図に示します。

図14-11 フルガーベージコレクション実行待ちの例

[図データ]

この図では,一つのジョブプログラム中で二つのリソースにアクセスしています。リソース排他中にフルガーベージコレクションの実行が要求されると,ガーベージコレクション制御機能はフルガーベージコレクションの実行を待機状態にします。二つのリソースアクセスが終了するcon2.commit()が実行されると,排他が解除されます。

(4) ガーベージコレクションの実行

リソース排他がなくなると,フルガーベージコレクションが実行されます。

(5) 注意事項