(57)【要約】      （修正有）【課題】ハウスキーピング処理が実行されるタイミングと、サーバ上のスレッドによって共有外部資源のロックが獲得されるタイミングとを調整し、ロックが長時間保持されない仕組みを提供する。【解決手段】少なくとも１のスレッドを実行するコンピュータ・プログラム実行環境において、外部資源を排他使用しながら実行される少なくとも１の命令の実行時間の遅延を防ぐために、上記スレッドにおいて、排他使用を獲得する命令及び排他使用を解放する命令を実行するロック部と、上記排他使用を獲得する命令又は上記排他使用を解放する命令の実行に応じて、上記スレッドそれぞれに関連付けられたカウンタの値を増減するカウンタ部と、上記カウンタの値又は上記カウンタの値の変化に応じて、上記外部資源を排他使用しながら実行される命令と該外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令との実行順を制御する制御部とを含む。【選択図】図２
2010113585.tif 000002
【特許請求の範囲】
【請求項１】
外部資源を排他使用しながら命令が実行される少なくとも１のスレッドを実行するコンピュータ・プログラム実行環境において、外部資源を排他使用しながら実行される少なくとも１の命令の実行時間の遅延を防ぐためのコンピュータ・システムであって、
前記スレッドにおいて、排他使用を獲得する命令及び排他使用を解放する命令を実行するロック部と、
前記排他使用を獲得する命令又は前記排他使用を解放する命令の実行に応じて、前記スレッドそれぞれに関連付けられたカウンタの値を増減するカウンタ部と、
前記カウンタの値又は前記カウンタの値の変化に応じて、前記外部資源を排他使用しながら実行される命令と該外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令との実行順を制御する制御部と
を含む、前記コンピュータ・システム。
【請求項２】
前記制御部が、
プログラム実行中に行われるメモリ・アロケーションに使えるメモリサイズが前記カウンタの値の合計値に基づいて求められる値よりも小さい場合、前記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令を実行する、
請求項１に記載のコンピュータ・システム。
【請求項３】
前記カウンタの値の合計値に基づいて求められる値がＴ÷（１＋ｋ×Ｎ）によって求められ、
ここで、Ｔ＝外部資源を排他使用していない場合に適用される前記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令が開始されるメモリサイズの閾値であり、
ｋ＝カウンタの値の合計値に基づいて求められる値を調整するためのパラメータであり、
Ｎ＝カウンタの値の合計値である、
請求項２に記載のコンピュータ・システム。
【請求項４】
前記制御部が、前記カウンタの値の合計値が減少した場合であって、プログラム実行中に行われるメモリ・アロケーションに使えるメモリサイズがカウンタの値の減少した合計値に基づいて再度求められた値よりも小さい場合、前記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令を実行する、
請求項１に記載のコンピュータ・システム。
【請求項５】
前記カウンタの値の合計値の増減に応じて、前記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令が実行されるスレッドの優先度を変更する第１の変更部をさらに含む、請求項１に記載のコンピュータ・システム。
【請求項６】
前記第１の変更部が、前記カウンタの値の合計値が大きい場合、前記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令が実行されるスレッドに低い優先度を与える、請求項５に記載のコンピュータ・システム。
【請求項７】
前記制御部が、前記優先度の高いスレッド順に、該スレッドに含まれる命令を優先して実行する、請求項６に記載のコンピュータ・システム。
【請求項８】
前記カウンタの値の増減に応じて、前記カウンタに対応するスレッドの優先度を変更する第２の変更部をさらに含む、請求項１に記載のコンピュータ・システム。
【請求項９】
前記第２の変更部が、前記カウンタの値が大きいスレッドに高い優先度を与える、請求項８に記載のコンピュータ・システム。
【請求項１０】
前記制御部が、前記優先度の高いスレッド順に、該スレッドに含まれる命令を優先して実行する、請求項９に記載のコンピュータ・システム。
【請求項１１】
上記制御部が、メソッドごとに設けられた実行回数カウンタの値を増加する際に、該メソッドを実行するスレッドの上記カウンタの値をさらに重みとして付与する、請求項１に記載のコンピュータ・システム。
【請求項１２】
前記スレッドにおいて前記メソッドが実行されることに応じて、前記実行回数カウンタの値を求める計算部をさらに含み、
前記制御部が、前記実行回数カウンタの値が閾値よりも大きい場合、前記スレッドそれぞれに関連付けられたメソッドについて、前記外部資源を排他使用しながら実行される命令の実行時間を短縮化する命令を実行する、請求項１１に記載のコンピュータ・システム。
【請求項１３】
前記外部資源を排他使用しながら実行される命令の実行時間を短縮化する命令が、ジャストインタイム（ＪＩＴ）コンパイルを実行する命令であり、
前記制御部が、前記実行回数カウンタの値が前記閾値よりも大きい場合、前記実行回数カウンタに関連付けられたメソッドを前記ＪＩＴコンパイルするリストに追加する、
請求項１２に記載のコンピュータ・システム。
【請求項１４】
前記カウンタ部が、前記排他使用が獲得される前に、前記排他使用を獲得する命令の実行に応じて前記カウンタの値を増加し、
前記制御部が、前記排他使用が獲得される前に、前記カウンタの値の増加に応じて、前記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令を実行する、請求項１に記載のコンピュータ・システム。
【請求項１５】
前記カウンタ部が、前記排他使用が解放された後に、前記排他使用を解放する命令の実行に応じて前記カウンタの値を減少し、
前記制御部が、前記カウンタの値の減少に応じて、前記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令を実行する、請求項１に記載のコンピュータ・システム。
【請求項１６】
前記カウンタ部が、
前記排他使用を獲得する命令の実行に応じて、前記カウンタの値を増加し、
前記排他使用を解放する命令の実行に応じて、前記カウンタの値を減少する、
請求項１に記載のコンピュータ・システム。
【請求項１７】
前記プログラムの実行環境がＪＡＶＡ（商標）処理系である、請求項１に記載のコンピュータ・システム。
【請求項１８】
前記外部資源がデータベースを含み、前記排他使用が前記データベースに対する排他使用を含む、請求項１に記載のコンピュータ・システム。
【請求項１９】
前記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令が、ガベージコレクションを実行する命令である、請求項２〜４、８〜１０、１４又は１５のいずれか１項に記載のコンピュータ・システム。
【請求項２０】
前記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令が、ジャストインタイム（ＪＩＴ）コンパイルを実行する命令である、請求項５〜７、１４又は１５のいずれか１項に記載のコンピュータ・システム。
【請求項２１】
外部資源を排他使用しながら命令が実行される少なくとも１のスレッドを実行するコンピュータ・プログラム実行環境において、外部資源を排他使用しながら実行される少なくとも１の命令の実行時間の遅延を防ぐためのコンピュータ・システムであって、
前記スレッドにおいて、排他使用を獲得する命令及び排他使用を解放する命令を実行するロック部と、
前記排他使用を獲得する命令又は前記排他使用を解放する命令の実行に応じて、前記スレッド全てのカウンタの値の合計値を増減するカウンタ部と、
前記カウンタの値の合計値又はカウンタの値の合計値の変化に応じて、前記外部資源を排他使用しながら実行される命令と該外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令との実行順を制御する制御部と
を含む、前記コンピュータ・システム。
【請求項２２】
外部資源を排他使用しながら命令が実行される少なくとも１のスレッドを実行するコンピュータ・プログラム実行環境において、外部資源を排他使用しながら実行される少なくとも１の命令の実行時間の遅延を防ぐための方法であって、該方法は、コンピュータ・システムに下記ステップを実行させ、該ステップは、
前記スレッドにおいて、排他使用を獲得する命令又は排他使用を解放する命令を実行するステップと、
前記排他使用を獲得する命令又は前記排他使用を解放する命令の実行に応じて、前記スレッドそれぞれに関連付けられたカウンタの値を増減するステップと、
前記カウンタの値又は前記カウンタの値の変化に応じて、前記外部資源を排他使用しながら実行される命令と該外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令との実行順を制御するステップと、
を含む、前記方法。
【請求項２３】
上記方法は、前記コンピュータ・システムに下記ステップをさらに実行させ、該ステップは、
メソッドごとに設けられた実行回数カウンタの値を増加する際に、該メソッドを実行するスレッドの上記カウンタの値を重みとしてさらに付与するステップを含む、請求項２２に記載の方法。
【請求項２４】
データベースを排他使用しながら命令が実行される少なくとも１のスレッドを実行するＪＡＶＡ（商標）処理系において、データベースを排他使用しながら実行される少なくとも１の命令の実行時間の遅延を防ぐための方法であって、該方法は、コンピュータ・システムに下記ステップを実行させ、該ステップは、
前記スレッドにおいて、排他使用を獲得する命令又は排他使用を解放する命令を実行するステップと、
前記排他使用を獲得する命令又は前記排他使用を解放する命令の実行に応じて、前記スレッドそれぞれに関連付けられたカウンタの値を増減するステップと、
前記カウンタの値又は前記カウンタの値の変化に応じて、前記データベースを排他使用しながら実行される命令と、ガベージコレクション又はジャストインタイム（ＪＩＴ）コンパイルとの実行順を制御するステップと
を含む、前記方法。
【請求項２５】
コンピュータに、請求項２２〜２４のいずれか一項に記載の方法の各ステップを実行させるコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、外部資源を排他使用しながら実行される命令の実行時間の遅延を防ぐためのコンピュータ・システム、並びにその方法及びコンピュータ・プログラムに関する。
【背景技術】
【０００２】
大量のアクセスを受け付ける大規模なシステムでは、処理性能の向上のためにクラスタ構成がとられることが多い。クラスタ構成では、トランザクション処理を行うサーバが複数用意される。そして、該サーバが、共有の外部データベース（以下、共有ＤＢ）にアクセスする。
上記クラスタ構成では、上記サーバの１つが、共有ＤＢのレコードを長時間ロックする場合がある。レコードが一旦ロックされると、ロックしたサーバ以外のサーバは、ロックされたレコードにアクセスできない。そのために、ロックしたサーバ以外のサーバがロックされたレコードにアクセスする場合、レコードがアンロックされるまで自身の処理を進めることができずに待たされる。よって、クラスタ構成をとったにもかかわらず、システムの性能が結局向上しないという危険性がある。
【０００３】
また、ＷｅｂＳｐｈｅｒｅ  Ａｐｐｌｉｃａｔｉｏｎ  Ｓｅｒｖｅｒ（商標）（以下、ＷＡＳ）のように、サーバがＪＡＶＡ（商標）処理系のようなプログラム実行環境上で動作している場合、該プログラム実行環境においてガベージコレクション（以下、ＧＣ）などのハウスキーピング処理が生じる。上記ハウスキーピング処理が上記ロック中に生じると、上記ロックしたサーバの処理が遅延し、結果的に１つのサーバがロックを長時間保持してしまうことになる。
【０００４】
下記特許文献１は、通信時に一時的に作成されるオブジェクトを再使用することで、新規オブジェクト生成によるメモリ・アロケーションを減らし、ＧＣが実行されるのを抑止する手段を記載する。よって、該抑止する手段は、外部資源のロック中にＧＣが発生するのを抑制するというものではない。
下記特許文献２は、本来のタスクとＧＣのタスクの優先度を調整し、ＧＣを制御する手段を記載する。しかし、該制御する手段は、本来のタスクと同時にＧＣを実行できることを前提としている。よって、ＧＣが実行されることによって本来のタスクの処理時間が遅延することは問題とされていない。
【０００５】
【特許文献１】特開２００７−０８６８３８号公報
【特許文献２】特開２００６−１２６９７５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
１つのサーバがロックを長時間保持しないように、ハウスキーピング処理が実行されるタイミングを調整したり、又はサーバ上のスレッドによってロックが獲得されるタイミングを調整したりして、ロックが長時間保持されない仕組みが求められている。
【課題を解決するための手段】
【０００７】
本発明は、外部資源を排他使用しながら命令が実行される少なくとも１のスレッドを実行するコンピュータ・プログラム実行環境において、外部資源を排他使用しながら実行される少なくとも１の命令の実行時間の遅延を防ぐためのコンピュータ・システムを提供する。該コンピュータ・システムは、
上記スレッドにおいて、排他使用を獲得する命令及び排他使用を解放する命令を実行するロック部と、
上記排他使用を獲得する命令又は上記排他使用を解放する命令の実行に応じて、上記スレッドそれぞれに関連付けられたカウンタの値を増減するカウンタ部と、
上記カウンタの値又は上記カウンタの値の変化に応じて、上記外部資源を排他使用しながら実行される命令と該外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令との実行順を制御する制御部と
を含む。
【０００８】
本発明の１つの実施態様では、上記制御部が、
プログラム実行中に行われるメモリ・アロケーションに使えるメモリサイズが上記カウンタの値の合計値に基づいて求められる値よりも小さい場合、上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令を実行する。
【０００９】
本発明の１つの実施態様では、上記制御部が、上記カウンタの値の合計値が減少した場合であって、プログラム実行中に行われるメモリ・アロケーションに使えるメモリサイズがカウンタの値の減少した合計値に基づいて再度求められた値よりも小さい場合、上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令を実行する。
【００１０】
本発明の１つの実施態様では、上記カウンタの値の合計値に基づいて求められる値がＴ÷（１＋ｋ×Ｎ）によって求められ、
ここで、Ｔ＝外部資源を排他使用していない場合に適用される上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令が開始されるメモリサイズの閾値であり、
ｋ＝カウンタの値の合計値に基づいて求められる値を調整するためのパラメータであり、
Ｎ＝カウンタの値の合計値である。
【００１１】
本発明の１つの実施態様では、上記コンピュータ・システムが、上記カウンタの値の合計値の増減に応じて、上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令が実行されるスレッドの優先度を変更する第１の変更部をさらに含む。
【００１２】
本発明の１つの実施態様では、上記第１の変更部が、上記カウンタの値の合計値が大きい場合、上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令が実行されるスレッドに低い優先度を与える。
【００１３】
本発明の１つの実施態様では、上記制御部が、上記優先度の高いスレッド順に、該スレッドに含まれる命令を優先して実行する。
【００１４】
本発明の１つの実施態様では、上記コンピュータ・システムが、上記カウンタの値の増減に応じて、上記カウンタに対応するスレッドの優先度を変更する第２の変更部をさらに含む。
【００１５】
本発明の１つの実施態様では、上記第２の変更部が、上記カウンタの値が大きいスレッドに高い優先度を与える。
【００１６】
本発明の１つの実施態様では、上記制御部が、上記優先度の高いスレッド順に、該スレッドに含まれる命令を優先して実行する。
【００１７】
本発明の１つの実施態様では、上記制御部が、メソッドごとに設けられた実行回数カウンタの値を増加する際に、該メソッドを実行するスレッドの上記カウンタの値を重みとして付与する。該重みの付与によって、外部資源を排他使用しながら実行される命令の実行時間を短縮化する命令の実行が促進される。
【００１８】
本発明の１つの実施態様では、上記コンピュータ・システムが、上記スレッドにおいて上記メソッドが実行されることに応じて、上記実行回数カウンタの値を求める計算部をさらに含み、
上記制御部が、上記実行回数カウンタの値が閾値よりも大きい場合、上記スレッドそれぞれに関連付けられたメソッドについて、上記外部資源を排他使用しながら実行される命令の実行時間を短縮化する命令を実行する。
【００１９】
本発明の１つの実施態様では、上記外部資源を排他使用しながら実行される命令の実行時間を短縮化する命令が、ジャストインタイム（以下、ＪＩＴ）コンパイルを実行する命令であり、
上記制御部が、上記実行回数カウンタの値が上記閾値よりも大きい場合、上記実行回数カウンタに関連付けられたメソッドを上記ＪＩＴコンパイルするリストに追加する。
【００２０】
本発明の１つの実施態様では、上記カウンタ部が、上記排他使用が獲得される前に、上記排他使用を獲得する命令の実行に応じて、上記カウンタの値を増加し、
上記制御部が、上記排他使用が獲得される前に、上記カウンタの値の増加に応じて、上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令を実行する。
【００２１】
本発明の１つの実施態様では、上記カウンタ部が、上記排他使用が解放された後に、上記排他使用を解放する命令の実行に応じて、上記カウンタの値を減少し、
上記制御部が、上記カウンタの値の減少に応じて、上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令を実行する。
【００２２】
本発明の１つの実施態様では、上記カウンタ部が、
上記排他使用を獲得する命令の実行に応じて、上記カウンタの値を増加し、
上記排他使用を解放する命令の実行に応じて、上記カウンタの値を減少する。
【００２３】
本発明の１つの実施態様では、上記プログラムの実行環境がＪＡＶＡ（商標）処理系である。
【００２４】
本発明の１つの実施態様では、上記外部資源がデータベースを含み、上記排他使用が上記データベースに対する排他使用を含む。
【００２５】
本発明の１つの実施態様では、上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令が、ガベージコレクションを実行する命令である。
【００２６】
本発明の１つの実施態様では、上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令が、ＪＩＴコンパイルを実行する命令である。
【００２７】
本発明はまた、外部資源を排他使用しながら命令が実行される少なくとも１のスレッドを実行するコンピュータ・プログラム実行環境において、外部資源を排他使用しながら実行される少なくとも１の命令の実行時間の遅延を防ぐためのコンピュータ・システムを提供する。該コンピュータ・システムは、
上記スレッドにおいて、排他使用を獲得する命令及び排他使用を解放する命令を実行するロック部と、
上記排他使用を獲得する命令又は上記排他使用を解放する命令の実行に応じて、上記スレッド全てのカウンタの値の合計値を増減するカウンタ部と、
上記カウンタの値の合計値又はカウンタの値の合計値の変化に応じて、上記外部資源を排他使用しながら実行される命令と該外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令との実行順を制御する制御部と
を含む。
【００２８】
本発明はまた、外部資源を排他使用しながら命令が実行される少なくとも１のスレッドを実行するコンピュータ・プログラム実行環境において、外部資源を排他使用しながら実行される少なくとも１の命令の実行時間の遅延を防ぐための方法を提供する。該方法は、コンピュータ・システムに下記ステップを実行させることを含む。該ステップは、
上記スレッドにおいて、排他使用を獲得する命令又は排他使用を解放する命令を実行するステップと、
上記排他使用を獲得する命令又は上記排他使用を解放する命令の実行に応じて、上記スレッドそれぞれに関連付けられたカウンタの値を増減するステップと、
上記カウンタの値又は上記カウンタの値の変化に応じて、上記外部資源を排他使用しながら実行される命令と該外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令との実行順を制御するステップと、
を含む。
【００２９】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、プログラム実行中に行われるメモリ・アロケーションに使えるメモリサイズが上記カウンタの値の合計値に基づいて求められる値よりも小さい場合、上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令を実行するステップを含む。
【００３０】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記カウンタの値の合計値が減少した場合であって、上記メモリ・アロケーションに使えるメモリサイズがカウンタの値の減少した合計値に基づいて再度求められた値よりも小さい場合、上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令を実行するステップを含む。ここで、外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令を実行するステップは、上記カウンタの値の合計値に基づいて求められる値をＴ÷（１＋ｋ×Ｎ）によって求めるステップをさらに含む。Ｔ＝上記カウンタの値を用いない場合に適用される上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令が開始されるメモリサイズの閾値であり、ｋ＝カウンタの値の合計値に基づいて求められる値を調整するためのパラメータであり、Ｎ＝カウンタの値の合計値である。
【００３１】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記カウンタの値の合計値の増減に応じて、上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令が実行されるスレッドの優先度を変更するステップを含む。
【００３２】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記カウンタの値の合計値が大きい場合、上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令が実行されるスレッドに低い優先度を与えるステップを含む。
【００３３】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記優先度の高いスレッド順に、該スレッドに含まれる命令を優先して実行するステップを含む。
【００３４】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記カウンタの値の増減に応じて、上記カウンタに対応するスレッドの優先度を変更するステップを含む。
【００３５】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記カウンタの値が大きいスレッドに高い優先度を与えるステップを含む。
【００３６】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記優先度の高いスレッド順に、該スレッドに含まれる命令を優先して実行するステップを含む。
【００３７】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、メソッドごとに設けられた実行回数カウンタの値を増加する際に、該メソッドを実行するスレッドの上記カウンタの値を重みとしてさらに付与するステップを含む。該重みの付与によって、外部資源を排他使用しながら実行される命令の実行時間を短縮化する命令の実行が促進される。
【００３８】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、
上記スレッドにおいて上記メソッドが実行されることに応じて、上記実行回数カウンタの値を求めるステップと、
上記実行回数カウンタの値が閾値よりも大きい場合、上記スレッドそれぞれに関連付けられたメソッドについて、上記外部資源を排他使用しながら実行される命令の実行時間を短縮化する命令を実行するステップと
を含む。
【００３９】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。ここで、上記外部資源を排他使用しながら実行される命令の実行時間を短縮化する命令が、ＪＩＴコンパイルを実行する命令である。該ステップは、上記実行回数カウンタの値が上記閾値よりも大きい場合、上記実行回数カウンタに関連付けられたメソッドを上記ＪＩＴコンパイルするリストに追加するステップを含む。
【００４０】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記排他使用を獲得する命令の実行に応じて、上記排他使用が獲得される前に上記カウンタの値を増加するステップと、
上記カウンタの値の増加に応じて、上記排他使用が獲得される前に上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令を実行するステップと
を含む。
【００４１】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記排他使用を解放する命令の実行に応じて、上記排他使用が解放された後に上記カウンタの値を減少するステップと、
上記カウンタの値の減少に応じて、上記外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令を実行するステップと
を含む。
【００４２】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、
上記排他使用を獲得する命令の実行に応じて、上記カウンタの値を増加するステップと、
上記排他使用を解放する命令の実行に応じて、上記カウンタの値を減少するステップと
を含む。
【００４３】
本発明はまた、外部資源を排他使用しながら命令が実行される少なくとも１のスレッドを実行するコンピュータ・プログラム実行環境において、外部資源を排他使用しながら実行される少なくとも１の命令の実行時間の遅延を防ぐための方法を提供する。該方法は、コンピュータ・システムに下記ステップを実行させることを含む。該ステップは、
上記スレッドにおいて、排他使用を獲得する命令又は排他使用を解放する命令を実行するステップと、
上記排他使用を獲得する命令又は上記排他使用を解放する命令の実行に応じて、上記スレッド全てのカウンタの値の合計値を増減するステップと、
上記カウンタの値の合計値又はカウンタの値の合計値の変化に応じて、上記外部資源を排他使用しながら実行される命令と該外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令との実行順を制御するステップと、
を含む。
【００４４】
本発明の１つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、メソッドごとに設けられた実行回数カウンタの値を増加する際に、該メソッドを実行するスレッドの上記カウンタの値を重みとしてさらに付与するステップを含む。該重みの付与によって、外部資源を排他使用しながら実行される命令の実行時間を短縮化する命令の実行が促進される。
【００４５】
本発明はまた、データベースを排他使用しながら命令が実行される少なくとも１のスレッドを実行するＪＡＶＡ（商標）処理系において、データベースを排他使用しながら実行される少なくとも１の命令の実行時間の遅延を防ぐための方法を提供する。該方法は、コンピュータ・システムに下記ステップを実行させることを含む。該ステップは、
上記スレッドにおいて、排他使用を獲得する命令又は排他使用を解放する命令を実行するステップと、
上記排他使用を獲得する命令又は上記排他使用を解放する命令の実行に応じて、上記スレッドそれぞれに関連付けられたカウンタの値を増減するステップと、
上記カウンタの値又は上記カウンタの値の変化に応じて、上記データベースを排他使用しながら実行される命令とガベージコレクション又はジャストインタイム（ＪＩＴ）コンパイルとの実行順を制御するステップと
を含む。
【００４６】
本発明はさらに、外部資源を排他使用しながら命令が実行される少なくとも１のスレッドを実行するコンピュータ・プログラム実行環境において、外部資源を排他使用しながら実行される少なくとも１の命令の実行時間の遅延を防ぐためのコンピュータ・プログラムを提供する。該コンピュータ・プログラムは、コンピュータ・システムに、上記のいずれかに記載の方法の各ステップを実行させることを含む。
【発明の効果】
【００４７】
本発明の実施態様によると、例えばＪＡＶＡ（商標）処理系上のアプリケーションが実行されるスレッドが外部資源のロックを多く保持している場合に、ＧＣ又はＪＩＴコンパイルなどのハウスキーピング処理が抑制される。また、ロックを保持しているスレッドの処理が優先的に行われるようになる。よって、ロック保持時間が長期化することを防止することが可能である。これにより、例えば、他のサーバ上の上記外部資源を使用するアプリケーションが、同じロックを獲得するために待たされ、結果としてシステム全体の性能が低下する危険性が減らされる。
【発明を実施するための最良の形態】
【００４８】
本発明の実施態様において、「コンピュータ・プログラム実行環境」では、プログラムが実行されるために必要なランタイムなどのモジュール群が用意されている。上記コンピュータ・プログラム実行環境は、プログラムの開発に使われた開発ツールにより異なる。上記コンピュータ・プログラム実行環境は、例えば、ＪＡＶＡ（商標）処理系である。
【００４９】
本発明の実施態様において、「スレッド」とは、プログラムの処理の流れの単位である。本発明の実施態様において、スレッドは１又は複数である。また、本明細書においてプロセスは、少なくとも１の上記スレッドを含む。
【００５０】
本発明の実施態様において、「外部資源」とは、複数のプロセスから共通でアクセスされうる資源である。該プロセスを実行するコンピュータは、１台に限らず複数であってもよい。外部資源の例として、ハードウエア、データベース及びファイルがある。ハードウエアは、例えば、ハードディスクである。データベースは、例えばＤＢ２（商標）、Ｏｒａｃｌｅ（商標）、ＳＱＬＳｅｒｖｅｒ（商標）、及びＰｏｓｔｇｒｅＳＱＬにおいて使用されるデータベースである。ファイルは、例えば、テキストファイル、スプレッドシート又はブックファイルである。
【００５１】
本発明の実施態様において、「排他使用を獲得する命令」は、上記外部資源の独占使用を開始するために、ロックを獲得する命令である。「排他使用を獲得する命令」は、例えばデータベースアクセスにおける「select for update」要求である。「排他使用を獲得する命令」は、上記スレッドにおいて実行される。
本発明の実施態様において、「排他使用を解放する命令」は、上記外部資源の独占使用を終了するために、ロックを解放する命令である。「排他使用を解放する命令」は、例えば、データベースアクセスにおける「commit」要求である。「排他使用を解放する命令」は、上記スレッドにおいて実行される。
本発明の実施態様において、「外部資源を排他使用しながら実行される命令」は、上記外部資源を独占的に使用する命令である。「外部資源を排他使用しながら実行される命令」は、上記ロックが獲得された後から上記ロックが解放される前の間における上記外部資源に対する命令である。「外部資源を排他使用しながら実行される命令」は、上記スレッドにおいて実行される。
【００５２】
本発明の実施態様において、「外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令」は、上記排他使用しながら実行される命令の実行中に実行された場合、上記排他使用しながら実行される命令の終了を遅らせる命令である。
「外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令」は、ハウスキーピング処理を含む。ハウスキーピング処理は、本来のプログラムの処理とは別に非同期に動いている処理である。ハウスキーピング処理は、例えば、ＧＣの実行命令、ＪＩＴコンパイルの実行命令を含む。「外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令」は、上記排他使用しながら実行される命令を実行するスレッドとは別のスレッドにおいて実行される。
【００５３】
本発明の実施態様において、「外部資源を排他使用しながら実行される命令の実行時間を短縮化する命令」は、上記排他使用しながら実行される命令の実行前に実行された場合、上記排他使用しながら実行される命令の実行時間を短縮させる命令である。上記短縮化する命令は、例えば、ＪＩＴコンパイルの実行命令である。該命令は、上記スレッドにおいて実行される。
【００５４】
本発明の実施態様において、「スレッドそれぞれに関連付けられたカウンタ」とは、スレッドそれぞれについて「今急いでいるかどうか」の度合いを示す値である。ここで「急いでいる」とは、該スレッドで実行される命令を遅延なく実行したいという意味である。上記カウンタの値が大きいスレッドほど「急いでいる」スレッドである。
【００５５】
本発明の実施態様では、上記カウンタの値が大きいスレッドで実行される命令がなるべく妨げられないように、下記のＡ〜Ｅに示す方法で命令の実行順が制御される。なお下記Ａ〜Ｅそれぞれの具体的な方法については後述する。
Ａ.上記カウンタの値の合計値が大きい状況では、上記遅延をもたらす命令がなるべく実行されないように制御される。
Ｂ.上記カウンタの値の合計値が大きい状況では、上記遅延をもたらす命令の優先度が下げられ、上記遅延をもたらす命令が抑制される。
Ｃ．上記カウンタの値が大きいスレッドで実行される処理の優先度が上げられる。
Ｄ．上記カウンタの値が大きいスレッドで実行されたメソッドについて、早めに短縮化する命令が実行され高速化される。
Ｅ．上記カウンタの値を大きくする場合、上記遅延をもたらす命令が前倒しで実行される。
上記カウンタの値の増減は、アプリケーションから行うこともできる。しかし典型的には、上記カウンタの値の増減は、上記プログラム実行環境のシステムライブラリ内のメソッドで実行される。例えば、外部資源がデータベースである場合、該データベースにアクセスするためのライブラリ内のデータベースレコードのロックを獲得するメソッドにおいて、上記カウンタを増加させる。また、データベースレコードのロックを解放するメソッドにおいて、上記カウンタを減少させる。例えば、コンピュータ・システムは、データベースレコードをロックするＳＱＬ命令である「select for update」が実行されたら上記カウンタの値に１を加える。また、コンピュータ・システムは、レコードロックを解放するコミット（commit）命令が実行されたら上記カウンタの値から１を引く。このようにすれば、多くのデータベースレコードがロックされている時に上記遅延をもたらす命令が抑制され、ロックが獲得される時間を短くすることができる。
上記カウンタの増減値は、ロックの対象に応じて管理者が設定してもよい。管理者は、上記カウンタの増減値に離散化スコアを与えることができる。
外部資源が、例えば、ハードディスクであり、ロックの対象が該ハードディスク上のファイル、該ファイルが格納されるフォルダＡ及び上記ファイルが格納されるフォルダＢであるとする。ここで、上記ファイルは、アクセスされる頻度が低く、ロックされたとしてもシステム全体の処理が遅延する可能性は低いとする。また、フォルダＡは、アクセスされる頻度が高く、ロックされた場合に上記ファイルに比べてシステム全体の処理が遅延する可能性が高いとする。さらに、フォルダＢは、アクセスされる頻度がフォルダＡよりも高く、ロックされた場合にフォルダＡに比べシステム全体の処理が遅延する可能性が高いとする。この場合、管理者は上記増減値を、ファイルに対するロックに１、フォルダＡに対するロックに５、フォルダＢに対するロックに１０を設定しうる。
また、外部資源が、例えば、データベースであり、ロックの対象が該データベース上のレコード、テーブルＡ及びテーブルＢであるとする。ここで、上記レコードがロックされた場合、システム全体の処理が遅延する可能性は低いとする。上記テーブルＡがロックされた場合、システム全体の処理が遅延する可能性は、上記レコードがロックされた場合に比べ高いとする。さらに、上記テーブルＢがロックされた場合、システム全体の処理が遅延する可能性は、上記テーブルＡがロックされた場合よりも高いとする。この場合、管理者は上記増減値を、レコードに対するロックに１、テーブルＡに対するロックに５、テーブルＢに対するロックに１０を設定しうる。
また、外部資源がスプレッドシート又はブックファイルであり、ロックの対象が該スプレッドシート上のセル、ブックファイル上のセル、シート及びブックであるとする。上記セル、シート及びブックで扱われるデータは、通常セル、シート、ブックの順で少なくなる。よって、管理者は上記増減値を、セルに対するロックに１、シートに対するロックに５、ブックに対するロックに１０を設定しうる。
上記管理者による増減値の設定により、ロックの影響規模に応じた上記遅延をもたらす命令の抑制が可能になる。
【００５６】
「ＧＣ」は、プログラムが動的に確保したメモリ領域のうち不要になった領域を自動的に解放する機能である。ＧＣは、メモリ・アロケーションに使用できるメモリサイズが予め設定された閾値未満になると実行される。
また、本発明の実施態様においては、上記カウンタの値によって上記閾値が調整される。
【００５７】
本発明の実施態様において、「プログラム実行中に行われるメモリ・アロケーションに使えるメモリサイズ」は、メモリがプログラムの実行時に動的に確保される場合における、メモリが確保される時点での確保可能なメモリサイズの上限値である。
【００５８】
「ＪＩＴコンパイル」は、プログラムコードをプログラムの実行時に機械語のプログラムに変換する処理である。該変換はメソッド単位で行われる。
ＪＩＴコンパイルの機能を有する上記実行環境では、一般的にメソッドごとに実行回数カウンタが用意されている。上記メソッドがインタプリタ方式で実行されると、上記実行回数カウンタに１が加えられる。そして、該実行回数が予め設定された閾値を超えると、上記メソッドがＪＩＴコンパイルされる対象のメソッドを登録するリストに登録される。ＪＩＴコンパイルは定期的に実行される。ＪＩＴコンパイルが実行されると、上記リストに登録されたメソッドは、機械語のコードに変換される。また、管理者は、ＪＩＴコンパイルについての最適化レベルを設定できる。該最適化レベルが高く設定されるほど、上記変換に要する時間が長くなり、変換された機械語のコードの実行時間が短くなる。
ＪＩＴコンパイル処理は、それ自体は上記遅延をもたらす命令である。しかし、コンパイルされたメソッドの処理時間は高速化される。よって、ＪＩＴコンパイル処理は、上記短縮化する命令でもある。
また、本発明の実施態様において、上記実行回数カウンタの増分は、１とは限らない。本発明の実施態様では、上記スレッド毎に関連付けられたカウンタの値が、「重み」として上記増分に加えられる。例えば、上記カウンタの値が５ならば、上記増分は１＋５＝６である。
【００５９】
本発明の実施態様において、「スレッドの優先度」は、スレッドそれぞれに割り当てられた、スレッドで実行される命令の実行順を決定するための情報である。優先度の異なる複数のスレッドが実行可能状態であるならば、優先度の高いスレッドに含まれる命令がより早く実行される。
【００６０】
以下、図面に従って、本発明の実施態様を説明する。本実施態様は、本発明の好適な態様を説明するためのものであり、本発明の範囲をここで示すものに限定する意図はないことを理解されたい。また、以下の図を通して、特に断らない限り、同一の符号は、同一の対象を指す。
【００６１】
図１は、従来技術における、ロック獲得中にＧＣが発生することによって、システムの処理時間が遅延する例を示す。
共有ＤＢは、複数のサーバ（ＷＡＳ１、２、・・・）から排他的にアクセスされるレコードを含むデータベースである。また、上記サーバでＧＣが発生した場合のアプリケーションの処理時間は、ＧＣが発生しなかった場合の処理時間に比べて遅くなる。
ここで、ＷＡＳ１上のアプリケーションが上記データベースのロックを獲得しロックを解放する前に、ＧＣが発生したとする。すると、上記アプリケーションの処理時間は遅延する。よって、上記データベースのロックが獲得されている時間は長時間になる。そして、上記ロックが獲得されている間、別のサーバ（ＷＡＳ２、３、・・・）上のアプリケーションは、上記データベースのロックを獲得できない。上記別のサーバが上記データベースのロックを獲得するためには、ＷＡＳ１上のＧＣが完了し、そしてロックが解放されるまで待つ必要がある。このため、システム全体の処理時間の遅延が起きる。
【００６２】
図２は、本発明の実施態様である、システム構成の例を示す。
コンピュータ・プログラム実行環境（２０１）は、スレッド（２０２〜２０４）、制御部（２０８）、カウンタ部（２０９）、ロック部（２１０）、計算部（２１１）、第１の変更部（２１２）及び第２の変更部（２１３）を有する。また、スレッド（２０２〜２０４）それぞれには、カウンタ（２０５〜２０７）が関連付けられている。カウンタ部（２０９）は、上記カウンタ（２０５〜２０７）の値の合計値を保持する。代替的に、スレッド（２０２〜２０４）それぞれに上記カウンタ（２０５〜２０７）を関連付ける代わりに、カウンタ部（２０９）が、上記カウンタの値の合計値のみを保持してもよい。
外部資源（２１４）を排他使用する場合、スレッド（２０２〜２０４）において、外部資源（２１４）を排他使用しながら命令が実行される。
ロック部（２１０）は、外部資源（２１４）を排他使用するために、外部資源の排他使用を獲得する命令を実行する。
カウンタ部（２０９）は、上記獲得する命令の実行に応じて、外部資源（２１４）を排他使用しながら命令が実行されるスレッド（２０２〜２０４）に関連付けられたカウンタ（２０５〜２０７）の値を増減する。カウンタ（２０５〜２０７）の値の増減に従い、カウンタ部は、カウンタの値の合計値を増減する。例えば、スレッド（２０２）において上記獲得する命令が実行されたならば、カウンタ部（２０９）は、カウンタ（２０５）の値を１増加する。該カウンタ（２０５）の値の増加に伴い、カウンタ部（２０９）は、カウンタ（２０５〜２０７）の値の合計値を１増加する。代替的に、上記獲得する命令の実行に応じて、カウンタ部（２０９）が上記カウンタの値の合計値を増減してもよい。例えば、スレッド（２０２）において上記獲得する命令が実行された場合、カウンタ部（２０９）は、カウンタの値の合計値を１増加する。
上記外部資源（２１４）の排他使用を終了する場合、ロック部（２１０）は、外部資源の排他使用を解放する命令を実行する。カウンタ部（２０９）は、上記解放する命令の実行に応じて、外部資源（２１４）を排他使用しながら命令が実行されるスレッド（２０２〜２０４）に関連付けられたカウンタ（２０５〜２０７）の値を増減する。該カウンタ（２０５〜２０７）の値の増減により、カウンタ部は、カウンタの値の合計値を増減する。例えば、スレッド（２０２）において上記解放する命令が実行されたならば、カウンタ部（２０９）は、カウンタ（２０５）の値を１減少させる。該カウンタ（２０５）の値の減少に伴い、カウンタ部（２０９）は、カウンタ（２０５〜２０７）の値の合計値を１減少する。代替的に、上記解放する命令の実行に応じて、カウンタ部（２０９）が上記カウンタの値の合計値を増減してもよい。例えば、スレッド（２０２）において上記解放する命令が実行された場合、カウンタ部（２０９）は、カウンタの値の合計値を１減少する。
第１の変更部（２１２）は、上記カウンタ（２０５〜２０７）の値の合計値の増減に応じて、外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令が実行されるスレッド（図示せず）の優先度を変更する。
第２の変更部（２１３）は、上記カウンタ（２０５〜２０７）の値の増減に応じて、上記スレッド（２０２〜２０４）の優先度を変更する。
制御部（２０８）は、上記カウンタ（２０５〜２０７）の値又は値の変化に応じて、上記スレッド（２０２〜２０４）に含まれる命令の実行順を制御する。該命令は、外部資源を排他使用しながら実行される命令及び外部資源を排他使用しながら実行される命令の実行時間の遅延をもたらす命令である。
計算部（２１１）は、上記スレッドにおいてメソッドが実行されることに応じて、実行回数カウンタの値を求める。実行回数カウンタの値の増分は、該実行回数カウンタの増分に上記カウンタの値を重みとして付与した値である。
制御部（２０８）はまた、上記実行回数カウンタの値に応じて、外部資源を排他使用しながら実行される命令の実行時間を短縮化する命令を実行する。
【００６３】
以下においては、コンピュータ・プログラム実行環境がＪＡＶＡ（商標）処理系である場合を例に、本発明の実施態様を説明する。
【００６４】
図３は、本発明の実施態様における、ＪＡＶＡ（商標）処理系の構成の例を示す。
アプリケーション用スレッド（３０６〜３０８）は、プログラムが実行されるスレッドである。各アプリケーション用スレッド（３０６〜３０８）には、「カウンタ」が保持される。該カウンタは、アプリケーション用スレッド（３０６〜３０８）それぞれに関連付けられる。また、「カウンタの値の合計値」は、ＪＤＢＣライブラリ（３１０）に保持される。なお、上記カウンタ及びカウンタの値の合計値は、プログラムを組み込める対象のどこに保持されてもよい。例えば、スレッドスケジューラ（３０９）に上記カウンタ及びカウンタの値の合計値が保持されてもよい。代替的に、上記スレッドそれぞれにカウンタが保持されず、上記カウンタの値の合計値のみがＪＤＢＣライブラリ（３１０）に保持されてもよい。
ＪＩＴスレッド（３０５）は、ＪＩＴコンパイル処理が実行されるスレッドである。ＪＩＴ用プロファイラ（３０２）は、上記アプリケーション用スレッド（３０６〜３０８）でのメソッドの実行を監視し、上記ＪＩＴコンパイルのタイミングを制御するプロファイラである。
ＪＩＴ用プロファイラ（３０２）は、上記メソッドのプロファイリングをするときに、スレッドに関連付けられたカウンタの値を考慮する。ＪＩＴ用プロファイラ（３０２）は、該カウンタの値が大きい状態のスレッドから呼ばれたメソッドが早めにＪＩＴコンパイルされるように、従来のメソッド実行回数カウンタに重みをつけて加算する。ＪＩＴ用プロファイラ（３０２）は、計算部（図２、２１１）及び制御部（図２、２０８）に対応する。
ＪＡＶＡヒープ（３０４）は、ＪＡＶＡ（商標）で使用できるメモリ領域である。ヒープ管理機構（３０３）は、上記メモリ領域を管理する仕組みであり、オブジェクトの作成処理及びＧＣを実行する。ヒープ管理機構（３０３）は、上記カウンタの値の合計値を元にＧＣのタイミングを調整する。ヒープ管理機構（３０３）は、上記カウンタの値の合計値が小さい場合はヒープに余裕があってもＧＣを起動する。また、ヒープ管理機構（３０３）は、上記カウンタの値の合計値が大きい場合は、ヒープの空きが非常に少なくなるまでＧＣを抑制する。ヒープ管理機構（３０３）は、制御部（２０８）に対応する。
スレッドスケジューラ（３０９）は、上記アプリケーション用スレッド（３０６〜３０８）及びＪＩＴスレッド（３０５）の実行順を制御するスケジューラである。スレッドスケジューラ（３０９）は、カウンタの値の合計値をもとにＪＩＴスレッドの優先度を調整する。スレッドスケジューラ（３０９）は、上記カウンタの値の合計値が大きい場合は、ＪＩＴスレッド（３０５）の優先度を下げてＪＩＴコンパイル処理を抑制する。スレッドスケジューラ（３０９）は、上記カウンタの値の合計値が大きい場合は、ＪＩＴスレッドの優先度を上げてＪＩＴコンパイル処理を起動しやすくする。
スレッドスケジューラ（３０９）はまた、スレッドに関連付けられたカウンタの値を考慮してスレッドスケジューリングを行う。スレッドスケジューラ（３０９）は、上記カウンタの値が大きいスレッドを、カウンタの値が小さいスレッドよりも優先的に実行する。スレッドスケジューラ（３０９）は、制御部（２０８）、第１の変更部（図２、２１２）及び第２の変更部（図２、２１３）に対応する。
その他のコンポ―ネット群（３１２〜３１５）は、コンピュータ・システムに様々な機能を提供するコンポーネントの集まりである。該コンポーネントは、例えば、インタプリタ及びクラスローダである。
【００６５】
図３の例では、外部資源として外部データベース（以下、ＤＢ）（３１１）が用いられる。ここで、ＪＤＢＣライブラリ（３１０）は、ＪＡＶＡ（商標）プログラムがＤＢ（３１１）にアクセスする機能を提供するライブラリである。ＪＤＢＣライブラリ（３１０）は、カウンタ部（図２、２０９）及びロック部（図２、２１０）に対応する。
カウンタの値又はカウンタの値の合計値の増減は、上記ＪＤＢＣライブラリ（３１０）のメソッドによって行われる。
【００６６】
図４Ａは、本発明の実施態様における、ＪＤＢＣライブラリ（図３、３１０）のメソッドの動作フローを示す。ここで、ロックの対象はＤＢ（図３、３１１）のレコードとする。
ステップ４０１では、アプリケーション用スレッド（図３、３０６〜３０８）においてＪＤＢＣライブラリ（３１０）のメソッドが呼び出されると、コンピュータ・システムは、該メソッドで指定されたＤＢアクセスの命令を実行する。
ステップ４０２では、コンピュータ・システムは、上記ＤＢアクセスの命令がＤＢ（３１１）のレコードのロックを獲得する命令かどうかの判定を行う。上記ＤＢアクセスの命令がＤＢ（３１１）のレコードのロックを獲得する命令の場合、ステップ４０３に進む。ステップ４０３では、コンピュータ・システムは、上記ＤＢアクセスの命令が実行されたスレッドに関連付けられたカウンタの値又はカウンタの値の合計値を増加させる。該増加に従い、カウンタの値の合計値が増加する。さらに、コンピュータ・システムは、カウンタの値又はカウンタの値の合計値が変化したことをヒープ管理機構（図３、３０３）及びスレッドスケジューラ（図３、３０９）に通知する（ステップ４０６）。
ステップ４０４では、コンピュータ・システムは、上記ＤＢアクセスの命令がＤＢ（３１１）のレコードのロックを解放する命令かどうかの判定を行う。上記ＤＢアクセスの命令が、ＤＢ（３１１）のレコードのロックを解放する命令の場合、ステップ４０５に進む。ステップ４０５では、コンピュータ・システムは、上記ＤＢアクセスの命令が実行されたスレッドに関連付けられたカウンタの値又はカウンタの値の合計値を減少させる。該減少に従い、カウンタの値の合計値が減少する。
ステップ４０６では、コンピュータ・システムは、カウンタの値が変化したことをヒープ管理機構（３０３）及びスレッドスケジューラ（３０９）に通知する。
カウンタの増減値は、上記ロックを獲得したスレッド以外のプロセスの受ける影響に応じて、管理者が変更してもよい。例えば、上記カウンタの増減値は、他のサーバの処理を妨害する危険性の度合いに応じて変更する。例えば、管理者は、レコードロックならば±１、レコードロックよりも影響の大きい（すなわち、処理を急ぐ必要のある）テーブルロックならば±５のように、ロックの影響規模によってカウンタの増減する値を変更してもよい。また、ＤＢ（３１１）に対する処理要求の返り値として増減する値（他サーバへの影響度）を受け取り、それに基づいてカウンタの値を増減する方法も考えられる。
【００６７】
図４Ｂ及び図４Ｃは、本発明の実施態様における、ヒープ管理機構の動作フローを示す。
図４Ｂ及び図４Ｃの動作フローは、上記Ａの方法に対応する。
【００６８】
図４Ｂは、本発明の実施態様における、メモリの割り当てが必要な処理、すなわちオブジェクト作成が要求された場合の動作フローを示す。
ステップ４１１では、オブジェクト作成が要求されると、コンピュータ・システムは、ヒープ管理機構（３０３）を用いて、ＧＣを実行するか否かの判定を行う。該判定の方法は、別途下記に記載する。該判定の結果、ＧＣを実行する必要がある場合、ステップ４１２に進む。
ステップ４１２では、コンピュータ・システムは、ＧＣを実行する。そして、ステップ４１３に進む。
上記判定の結果、ＧＣを実行する必要がない場合、ステップ４１３に進む。
ステップ４１３では、コンピュータ・システムは、オブジェクトにメモリを割り当てる。
【００６９】
図４Ｃは、本発明の実施態様における、上記カウンタの値の合計値が減少した場合に、コンピュータ・システムが実行する処理の動作フローを示す。
ステップ４１４では、カウンタの値の合計値が減少すると、コンピュータ・システムは、ヒープ管理機構（３０３）を用いて、ＧＣを実行するか否かの判定を行う。該判定の方法は、別途下記に記載する。該判定の結果、ＧＣを実行する必要がある場合、ステップ４１５に進む。
ステップ４１５では、コンピュータ・システムは、ＧＣを実行する。
【００７０】
コンピュータ・システムは、ＧＣを、通常メモリ・アロケーションに使用できるメモリサイズがある閾値Ｔ未満になった段階で実行する。本発明の実施態様では、コンピュータ・システムは、上記閾値をカウンタの値を用いて調整する。上記調整するための式を以下に示す。
Ｔ÷（１＋ｋ×Ｎ（カウンタの値の合計値））
ここで、ｋは効き具合を調整するパラメータである。ｋの値が大きいほど、上記閾値は大きく調整される。ｋは、管理者又はコンピュータ・システムによって設定される値である。管理者がｋを設定する場合、管理者は、例えば、０．１を設定する。コンピュータ・システムが自動的にｋを設定する場合、コンピュータ・システムは、例えばＧＣの頻度をモニタし、該頻度があまりにも高ければ、ｋの値を小さくするという実装が考えられうる。
コンピュータ・システムは、ＧＣを実行するか否かの判定を上記式から求められる値と、メモリ・アロケーションに使用できるメモリサイズとを比較して行う。なお、上記図４Ｂの例では、メモリ・アロケーションに使用できるメモリサイズからオブジェクトに割り当てられるメモリサイズを引いた値が、実際のメモリ・アロケーションに使用できるメモリサイズである。コンピュータ・システムは、ＧＣをメモリ・アロケーションに使用できるメモリサイズが上記式から求められる値未満の場合に実行する。つまり、上記カウンタの値の合計値が小さい場合は、ヒープメモリに余裕があってもＧＣが実行される。これにより、カウンタの値の合計値が大きい状態でＧＣが実行される可能性を減らしている。
【００７１】
図４Ｄは、本発明の実施態様における、スレッドスケジューラ（３０９）の動作フローを示す。
図４Ｄの動作フローは、上記Ｂ及びＣの方法に対応する。
図４Ｄの動作フローは、カウンタの値が変化した場合にコンピュータ・システムによって実行される。
ステップ４２１では、カウンタの値が変化したことに応じて、コンピュータ・システムは、スレッドスケジューラ（３０９）を用いて、カウンタの値が変化したスレッドの優先度をカウンタの値に応じて変更する。コンピュータ・システムは、カウンタの値が大きいスレッドほど、該スレッドが優先的に実行されるように設定する。
ステップ４２２では、コンピュータ・システムは、ＪＩＴコンパイルが実行されるスレッド（図３、３０５）（以下、ＪＩＴスレッド）の優先度をカウンタの値の合計値に応じて変更する。上記ＪＩＴスレッド（３０５）は、上記カウンタの値の合計値が小さいほど優先的に実行されるように設定される。
つまり、カウンタの値の合計値が大きい値の場合、ＪＩＴコンパイルは抑制される。よって、カウンタ値の大きいスレッドの実行が妨害されにくくなる。
【００７２】
図４Ｅは、本発明の実施態様における、ＪＩＴ用プロファイラ（図３、３０２）の動作フローを示す。
図４Ｅの動作フローは、上記Ｄの方法に対応する。
ＪＡＶＡ（商標）処理系では、一般的にメソッドごとに実行回数カウンタが用意されている。上記実行回数カウンタには、上記メソッドがインタプリタ方式で実行される毎に、１が加えられる。そして、該実行回数が、閾値をこえるとＪＩＴコンパイルされるような構成になっていることが多い。上記閾値は、ＪＡＶＡ（商標）処理系において管理者が設定できる値である。
ステップ４３１では、上記スレッドにおいてメソッドが実行されることに応じて、コンピュータ・システムは、上記メソッドに用意された上記実行回数カウンタに１を加える。さらにコンピュータ・システムは、メソッドが実行されたスレッドに関連付けられたカウンタの値を上記実行回数カウンタに足し込む。該足し込みにより「急いでいる」状態で実行されたメソッドが早めにＪＩＴコンパイルされるように制御される。
ステップ４３２では、コンピュータ・システムは、上記カウンタの値が足し込まれた実行回数カウンタの値と閾値が比較する。上記実行回数カウンタの値が閾値より大きい場合、ステップ４３３に進む。
ステップ４３３では、コンピュータ・システムは、上記メソッドをＪＩＴコンパイルするリストに登録する。
上記動作フローにより、ロック中に実行されるメソッドが早めにコンパイルされる。よって、次回以降の該メソッドの処理の高速化が望める。
また、上記実行回数が大きいメソッドについて、コンパイルの最適化レベルを高く設定してもよい。
【００７３】
図４Ｆは、本発明の実施態様における、ＪＤＢＣライブラリ（３１０）の拡張動作フローを示す。
図４Ｆの動作フローは、上記Ｅの方法に対応する。
図４Ｆの動作フローは、ＤＢ（３１１）にアクセスする命令が呼び出された場合にコンピュータ・システムによって実行される。
ステップ４４１では、ＤＢ（３１１）にアクセスする命令が呼び出されることに応じて、コンピュータ・システムは、ＪＤＢＣドライバにおいて、上記命令がＤＢ（３１１）のロックを獲得する命令かどうかの判定を行う。ＤＢ（３１１）にアクセスする命令がロックを獲得する命令である場合、ステップ４４２に進む。一方、ＤＢ（３１１）にアクセスする命令がロックを獲得する命令でない場合、ステップ４４４に進む。
ステップ４４２では、コンピュータ・システムは、実際にロックを獲得する前に、該命令が実行されたスレッドに関連付けられたカウンタの値又はカウンタの値の合計値を増加させる。該増加に従い、カウンタの値の合計値が増加する。
ステップ４４３では、コンピュータ・システムは、ハウスキーピング処理、例えばＧＣ又はリストにコンパイルすべきメソッドがたまっているＪＩＴコンパイル処理を実行する。また、ロック獲得中に実行されるメソッドが判断できる場合は、コンピュータ・システムは、該メソッドをＪＩＴコンパイルする。該コンパイルにより、ロックを獲得した後に、ＧＣ又はＪＩＴコンパイル処理が発生してしまい、ロック期間が長期化してしまう危険性を下げることができる。
ステップ４４４では、コンピュータ・システムは、指定されたＤＢ（３１１）にアクセスする命令を実行する。
ステップ４４５では、コンピュータ・システムは、上記ＤＢ（３１１）にアクセスする命令がＤＢ（３１１）のロックを解放する命令かどうかの判定を行う。上記ＤＢ（３１１）にアクセスする命令がロックを解放する命令である場合、ステップ４４６に進む。一方、上記ＤＢにアクセスする命令がロックを解放する命令でない場合、該動作は終了する。
ステップ４４６では、コンピュータ・システムは、上記ＤＢ（３１１）にアクセスする命令が実行されたスレッドに関連付けられたカウンタの値又はカウンタの値の合計値を減少させる。該減少に従い、カウンタの値の合計値が減少する。
ステップ４４７では、コンピュータ・システムは、遅延させられていたハウスキーピング処理、例えばＧＣ又はＪＩＴコンパイル処理を行う。また、ロック獲得中に実行されたメソッドが判断できる場合、コンピュータ・システムは、上記メソッドが次回実行されるときに実行を高速化するために、明示的にＪＩＴコンパイルすることができる。
【００７４】
図５は、本発明の実施態様における、コンピュータ・ハードウェアのブロック図を示す。
コンピュータ・システム（５０１）は、ＣＰＵ（５０３）とメイン・メモリ（５０２）と含み、これらはバス（５１４）に接続されている。ＣＰＵ（５０３）は好ましくは、３２ビット又は６４ビットのアーキテクチャに基づくものであり、例えば、インテル社のＸｅｏｎ（商標）シリーズ、Ｃｏｒｅ（商標）シリーズ、Ａｔｏｍ（商標）シリーズ、Ｐｅｎｔｉｕｍ（商標）シリーズ、Ｃｅｌｅｒｏｎ（商標）シリーズ、ＡＭＤ社のＰｈｅｎｏｍ（商標）シリーズ、Ａｔｈｌｏｎ（商標）シリーズ、Ｔｕｒｉｏｎ（商標）シリーズ及びＳｅｍｐｒｏｎ（商標）などを使用することができる。バス（５１４）には、ディスプレイ・コントローラ（５０７）を介して、ＬＣＤモニタなどのディスプレイ（５１２）が接続される。ディスプレイ（５１２）は、コンピュータ・システムの管理のために、通信回線を介してネットワークに接続されたコンピュータ・システムについての情報と、そのコンピュータ・システム上で動作中のソフトウェアについての情報を、適当なグラフィック・インターフェースで表示するために使用される。バス（５１４）にはまた、ＩＤＥ又はＳＡＴＡコントローラ（５０４）を介して、ハードディスク又はシリコン・ディスク（５０５）と、ＣＤ−ＲＯＭ、ＤＶＤドライブ又はＢＤドライブ（５０６）が接続される。
【００７５】
ハードディスク（５０５）には、オペレーティング・システム、Ｊ２ＥＥなどのＪＡＶＡ（商標）処理環境を提供するプログラム、その他のプログラム及びデータが、メイン・メモリにロード可能に記憶されている。
【００７６】
ＣＤ−ＲＯＭ、ＤＶＤ又はＢＤドライブ（５０６）は、必要に応じて、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ又はＢＤからプログラムをハードディスクに追加導入するために使用される。バス（５１４）には更に、キーボード・マウスコントローラ（５０９）を介して、キーボード（５１０）及びマウス（５１１）が接続されている。
【００７７】
通信インタフェース（５１３）は、例えばイーサネット（商標）・プロトコルに従う。通信インタフェース（５１３）は、通信コントローラ（５０８）を介してバス（５１４）に接続され、コンピュータ・システム及び通信回線（５１５）を物理的に接続する役割を担い、コンピュータ・システムのオペレーティング・システムの通信機能のＴＣＰ／ＩＰ通信プロトコルに対して、ネットワーク・インターフェース層を提供する。なお、通信回線は、有線ＬＡＮ環境、或いは例えばＩＥＥＥ８０２．１１ａ／ｂ／ｇ／ｎなどの無線ＬＡＮ接続規格に基づく無線ＬＡＮ環境であってもよい。
【図面の簡単な説明】
【００７８】
【図１】従来技術における、ロック獲得中にＧＣが発生することによって、システムの処理時間が遅延する例を示す。
【図２】本発明の実施態様である、システム構成の例を示す。
【図３】本発明の実施態様における、ＪＡＶＡ（商標）処理系の構成の例を示す。
【図４Ａ】本発明の実施態様における、ＪＤＢＣライブラリのメソッドの動作フローを示す。
【図４Ｂ】本発明の実施態様における、メモリの割り当てが必要な処理、すなわちオブジェクト作成が要求された場合の動作フローを示す
【図４Ｃ】本発明の実施態様における、カウンタの値の合計値が減少した場合に、コンピュータ・システムが実行する処理の動作フローを示す。
【図４Ｄ】本発明の実施態様における、スレッドスケジューラの動作フローを示す。
【図４Ｅ】本発明の実施態様における、ＪＩＴ用プロファイラの動作フローを示す。
【図４Ｆ】本発明の実施態様における、ＪＤＢＣライブラリの拡張動作フローを示す。
【図５】本発明の実施態様における、コンピュータ・ハードウェアのブロック図を示す。
【図１】
2010113585.tif 000003
【図２】
2010113585.tif 000004
【図３】
2010113585.tif 000005
【図４Ａ】
2010113585.tif 000006
【図４Ｂ】
2010113585.tif 000007
【図４Ｃ】
2010113585.tif 000008
【図４Ｄ】
2010113585.tif 000009
【図４Ｅ】
2010113585.tif 000010
【図４Ｆ】
2010113585.tif 000011
【図５】
2010113585.tif 000012