(57)【要約】データの参照関係を管理可能な計算機で、参照関係の調査時間を短縮する。保持データへの変更が可能な第１並びに第２記憶領域、保持データへの変更が不可能な第３記憶領域及びプログラムからの要求により第２並びに第３記憶領域が保持するデータへのアクセスを実行する制御部を有する計算機である。計算機は、第２及び第３記憶領域に保持するデータにアクセスする為の特定データを第１記憶領域に設定する。計算機は、第３記憶領域が保持するデータの内、特定データと参照関係のあるデータを第２記憶領域に移動する。その処理の実行中に、プログラムから、第３記憶領域が保持するデータに対してアクセスがあると、そのデータが第２記憶領域に移動済みかを判定し、移動済みの場合、特定データの参照情報を移動先のデータに補正してアクセスする。それと共に特定データから参照される第３記憶領域のデータの参照を全て補正して第３記憶領域を解放する。
2013128492.tif 000002
【特許請求の範囲】
【請求項１】
保持するデータへの変更を可能とする第１及び第２記憶領域と、保持するデータへの変更を不可能とする第３記憶領域と、プログラムからの要求により、前記第２及び第３記憶領域が保持するデータに対するアクセスを実行する制御部と、を有する計算機であって、  前記制御部は、
前記第２及び第３記憶領域に保持するデータにアクセスする為の特定データを前記第１記憶領域に生成し、
前記特定データに第３記憶領域が保持するデータへの参照情報を含ませ、
解放対象である前記第３記憶領域が保持するデータのうち、前記特定データと参照関係のあるデータを前記第２記憶領域に移動する処理の実行中に、前記プログラムから、前記第３記憶領域が保持するデータに対する特定データを介したアクセスが発生した場合、アクセス対象であるデータが前記第２記憶領域に移動済みか否かを判定し、
移動していた場合は、該特定データに含まれる参照情報を移動先のデータに補正してアクセスすると共に前記第３記憶領域が保持するデータに参照関係を有する特定データからの参照を全て補正し、
前記参照を全て補正した後に、前記第３記憶領域を解放する
ことを特徴とする計算機。
【請求項２】
請求項１に記載の計算機であって、
前記制御部は、
前記特定データと参照関係のある前記第３記憶領域が保持するデータの前記第２記憶領域への移動及び前記アクセスが発生したデータに対する参照の補正を、前記プログラムの通常の処理と並行して実行する
ことを特徴とする計算機。
【請求項３】
請求項１又は２に記載の計算機であって、
前記制御部は、
前記第３記憶領域が保持するデータと参照関係がある前記特定データの参照がすべて補正される前に該第３記憶領域を解放する場合、前記第３記憶領域が保持するデータに対する前記プログラムからのアクセスを停止し、
前記第３記憶領域が保持するデータと参照関係を持つ特定データからの参照を補正することを特徴とする計算機。
【請求項４】
請求項３に記載の計算機であって、
前記制御部は、
特定データをスレッドローカルデータとし、該スレッドローカルデータを扱うスレッドのデータ操作処理のみを停止し、前記参照を補正する
ことを特徴とする計算機。
【請求項５】
請求項１〜４の何れか一項に記載の計算機であって、
前記制御部は、
前記特定データと参照関係にある前記第３記憶領域が保持するデータへの参照調査及び調査によって参照関係が検出された該データの前記第２記憶領域への移動を、当該データへのアクセス要求を行ったプログラムによって実行し、
前記参照関係のある全てのデータを前記第２記憶領域に移動後、前記第３記憶領域を解放する
ことを特徴とする計算機。
【請求項６】
保持するデータへの変更を可能とする第１及び第２記憶領域と、保持するデータへの変更を不可能とする第３記憶領域と、プログラムからの要求により、前記第２及び第３記憶領域が保持するデータに対するアクセスを実行する制御部と、を有する計算機に、
前記第２及び第３記憶領域に保持するデータにアクセスする為の特定データを前記第１記憶領域に設定する手順と、
前記特定データに第３記憶領域が保持するデータへの参照情報を含ませる手順と、
解放対象である前記第３記憶領域が保持するデータのうち、前記特定データと参照関係のあるデータを前記第２記憶領域に移動する手順と、
前記移動させる手順の実行中に、前記プログラムから、前記第３記憶領域が保持するデータに対する特定データを介したアクセスが発生した場合、アクセス対象であるデータが前記第２記憶領域に移動済みか否かを判定する手順と、
移動済みの場合に、該特定データに含まれる参照情報を移動先のデータに補正してアクセスすると共に前記第３記憶領域が保持するデータに参照関係を有する特定データからの参照を全て補正する手順と、
前記参照を全て補正した後に、前記第３記憶領域を解放する手順と、
を実行させるプログラム。
【請求項７】
請求項６に記載のプログラムであって、
前記特定データと参照関係のある前記第３記憶領域が保持するデータを前記第２記憶領域に移動する手順及び前記アクセスが発生したデータの参照を補正する手順を、前記プログラムの通常の処理と並行して実行させる
ことを特徴とするプログラム。
【請求項８】
請求項６又は７に記載のプログラムであって、
前記第３記憶領域が保持するデータと参照関係がある前記特定データの参照がすべて補正される前に該第３記憶領域を解放する場合、前記第３記憶領域が保持するデータに対する前記プログラムからのアクセスを停止する手順と、
前記第３記憶領域が保持するデータと参照関係を持つ特定データからの参照を補正する手順と
を実行させることを特徴とするプログラム。
【請求項９】
請求項８に記載のプログラムであって、
前記特定データをスレッドローカルデータとする手順と、
該スレッドローカルデータを扱うプログラムのデータ操作処理のみを停止する手順と、  前記参照を補正する手順と
を実行させることを特徴とするプログラム。
【請求項１０】
保持するデータへの変更を可能とする第１及び第２記憶領域と、保持するデータへの変更を不可能とする第３記憶領域と、プログラムからの要求により、前記第２及び第３記憶領域が保持するデータに対するアクセスを実行する制御部と、を有する計算機のメモリ管理方法であって、
前記制御部が、
前記第２及び第３記憶領域に保持するデータにアクセスする為の特定データを前記第１記憶領域に設定し、
前記特定データに第３記憶領域が保持するデータへの参照情報を含ませ、
解放対象である前記第３記憶領域が保持するデータのうち、前記特定データと参照関係のあるデータを前記第２記憶領域に移動する処理の実行中に、前記プログラムから、前記第３記憶領域が保持するデータに対する特定データを介したアクセスが発生した場合、アクセス対象であるデータが前記第２記憶領域に移動済みか否かを判定し、
移動していた場合は、該特定データに含まれる参照情報を移動先のデータに補正してアクセスすると共に前記第３記憶領域が保持するデータに参照関係を有する特定データからの参照を全て補正し、
前記参照を全て補正した後に、前記第３記憶領域を解放する
ことを含むメモリ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機、プログラム及びメモリ管理方法に係り、特に、データ参照関係を管理する計算機、プログラム及びメモリ管理方法に関する。
【背景技術】
【０００２】
計算機がデータ間の参照関係を調査する際、一般にデータに対する処理を停止する技術が用いられる。このようなデータ参照関係の調査は、例えば、データの要不要を自動的に管理するガベージコレクションで用いられており、Java（登録商標）仮想マシンで利用されるガベージコレクタでは、この仮想マシン上で動作するアプリケーション（以後、「ＡＰ」もしくは「プログラム」と称する。）の動作を完全に止めるＳｔｏｐ-ｔｈｅ-Ｗｏｒｌｄ方式が用いられることが多い。【０００３】
このように、データ参照関係調査においてデータに対する処理を停止するのは、参照調査中にデータ更新や削除によって、参照関係が書き換えられるのを防ぐためであり、Ｊａｖａのガベージコレクタのように、本方式を用いてデータ間参照関係を調査するものが多い。参照関係調査時間が増大するとプログラム実行（データに対する処理）の停止時間も長くなり、処理の遅延が発生する。【０００４】
本問題への対策として考えられるのが、調査範囲の限定である。非特許文献１は、関数型言語のようなデータ更新の無いシステムに対する参照調査領域を限定する技術を開示する。この技術は、まずデータを生成した順番で、旧世代のデータを格納する領域と、新世代のデータを格納する領域とにメモリ領域を分けるようになっている。そして、新世代のデータを格納する領域を対象とした不要領域の回収処理を優先的に実行することで、一定量の領域を回収するのに必要な不要データ回収処理の回数を低減するようになっている。その結果、この技術は、プリケーション等の処理の停止時間を削減できる。【０００５】
また、非特許文献２は世代別ガベージコレクションでの世代数を増大させることによる参照調査領域を限定する技術を開示する。この技術は、不要データを格納するメモリ領域の回収処理時には、世代別に分割した領域の１つのみを参照元調査の対象とする。これにより、旧世代の領域全てを回収処理対象にするのに比べ、参照元調査対象となるデータ量（領域）が減少する。その結果、この技術は、１回の不要データ領域の回収処理におけるデータに対する処理の停止時間を短くすることができる。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】Todd A. Anderson, Optimizations in a Private Nursery-based Garbage Collector, In Proceedings of the 2010 international symposium on Memory management, pp.21-30, 2010
【非特許文献２】Richard L. Hudson, Incremental collection of mature objects, In Proceedings of the International Workshop on Memory Management, pp.388-403, 1992
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、非特許文献１が開示する技術は、上述のように関数型言語を前提としていることから、旧世代のデータ生成時に存在しなかった新世代のデータを、その旧世代データが参照するような事象が発生しないという特定の環境下でのみ適用できるものである。データについて削除以外の更新（なお、ここでデータの削除とは、特定のデータから参照されない状態とすることをいう。即ち削除により新世代又は旧世代のデータに新しく参照元が追加されることはない。）が発生し、データの生成時に関係なく、旧世代のデータから新世代のデータを参照するような事象を発生させる言語を用いたシステムには適用することができない。このような旧世代のデータから新世代のデータを参照する言語を用いたシステムにおいて、旧世代に属するデータの参照元を調査するには、新世代と旧世代を含めた全領域を調査対象とする必要があり、参照調査範囲を新世代に属するデータに限定することができない。【０００８】
また、非特許文献２に開示されるように、旧世代のデータを格納するメモリ領域を世代別に分割し、データの生成順に分割した領域を第１世代、第２世代、・・・第Ｎ世代とすれば、第Ｎ世代のデータの参照元は第Ｎ世代以降のデータに限定できることから、参照調査範囲を限定することができるとも言える。【０００９】
しかしながら、非特許文献２であっても、第Ｎ世代よりも前の世代のデータに更新が発生した場合には、参照関係の調査対象が完全ではなく、（メモリの解放処理とともに）生存データを不用意に削除してしまうという課題が残る。即ち一度生成したデータの更新が発生する言語に適用するには不十分であるといえる。【００１０】
このように、非特許文献１及び２に開示された技術は、従前に格納されたデータに更新が発生し無いシステムでないと適用できない点と、世代数を増大させても、各世代の参照調査自体は定期的に行わなければならない点から、参照調査の時間を短縮するための根本的な解決策にはなっていない。
【課題を解決するための手段】
【００１１】
上記課題を解決するために、例えば、本発明の一態様は、保持するデータへの変更を可能とする第１及び第２記憶領域と、保持するデータへの変更を不可能とする第３記憶領域と、プログラムからの要求により、第２及び第３記憶領域が保持するデータに対するアクセスを実行する制御部と、を有する計算機であって、制御部は、第２及び第３記憶領域に保持するデータにアクセスする為の特定データを第１記憶領域に設定し、特定データに第３記憶領域が保持するデータへの参照情報を含ませ、解放対象である第３記憶領域が保持するデータのうち、特定データと参照関係のあるデータを第２記憶領域に移動する処理の実行中に、プログラムから、第３記憶領域が保持するデータに対する特定データを介したアクセスが発生した場合、アクセス対象であるデータが第２記憶領域に移動済みか否かを判定し、移動していた場合は、該特定データに含まれる参照情報を移動先のデータに補正してアクセスすると共に第３記憶領域が保持するデータに参照関係を有する特定データからの参照を全て補正し、参照を全て補正した後に第３記憶領域を解放する計算機である。
【発明の効果】
【００１２】
本発明の一態様によれば、データ格納領域の解放に伴うプログラム（例えば、アプリケーション等）の停止時間を短縮することができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の適用した一実施形態の構成を示すブロック図。
【図２Ａ】閉塞領域用データ生成ＡＰＩの一例を示す模式図。
【図２Ｂ】閉塞領域用データ生成ＡＰＩの一例を示す模式図。
【図３】本実施形態における記憶領域とデータ参照の関係例を示す模式図。
【図４】本実施形態における解放判定・データ移動処理の例を示すフロー図。
【図５】本実施形態における参照先補正処理の例を示すフロー図。
【図６】本実施形態における閉塞済み領域解放処理の例を示すフロー図。
【図７】本実施形態におけるプログラム実行、解放判定・データ移動処理、参照先補正処理及び閉塞済み領域解放処理との関係を時系列で示すタイムフロー。
【図８Ａ】本実施形態における、解放判定・データ移動処理実行前における、記憶領域とデータ参照関係の例を示す模式図。
【図８Ｂ】本実施形態における、閉塞済み領域解放処理実行直前における、記憶領域とデータ参照関係の例を示す模式図。
【発明を実施するための形態】
【００１４】
以下、本発明を適用した一実施の形態について図面を用いて説明する。なお、本実施形態は、Java仮想マシンを前提とした計算機システムに対して本発明を適用した例について説明するが、本発明はこれに限ったものではなく、ガベージコレクションのようなメモリ管理を自動化する機構を有する他のシステムにも有効なものである。
【００１５】
図１に、計算機システムの構成を示す。計算機システムは、ＣＰＵ１０２、主記憶装置としてのメモリ１０３、補助記憶装置としての外部記憶装置１０９及びユーザ操作を受け付ける入力装置（不図示）並びに種々の情報を出力する表示装置（不図示）を有するサーバ装置である。なお、外部記憶装置１０９は、計算機システム１０１内に設けられてもよい。
【００１６】
計算機システムは、Ｊａｖａ仮想マシンとしての動作環境を提供するために、プログラムと、ＣＰＵ１０２との協働により、ＪａｖａＶＭ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）１０５が構成される。Ｊａｖａプログラム１０４は、例えば、ＪａｖａＶＭ１０５で実行可能な少なくとも１つのユーザアプリケーション（ＡＰ）等である。Ｊａｖａプログラム１０４の実行により生成されたデータ（例えば、オブジェクト）は、先ず、メモリ１０３の一時領域１３０若しくは後述する閉塞待ち領域１５０に保持される。
【００１７】
本実施形態における計算機システムの特徴の一つは、データの記憶領域の構成にある。計算システムのメモリ１０３上には、データの記憶領域として、一時領域１３０と、閉塞領域１４０とが設けられるようになっている。一時領域１３０はＪａｖａプログラム１０４が生成・使用するデータを一時的に保持する記憶領域である。Ｊａｖａプログラム１０４の実行により生成されたデータは、一時領域１３０若しくは閉塞待ち領域１５０に保持するようになっている。閉塞待ち領域へのデータ配置は、特定ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  ｉｎｔｅｒｆａｃｅ）によって実施され、同領域に配置されたデータから参照可能な一時領域内データもガベージコレクション時に閉塞待ち領域１５０に移動するようになっている。
【００１８】
閉塞領域１４０は、一時領域１３０に保持されたデータを任意の契機で移動することが可能な記憶領域である。閉塞領域１４０には、１以上の閉塞待ち領域１５０及び１以上の閉塞済み領域１６０という２種類の記憶領域が設けられる。
【００１９】
閉塞待ち領域１５０は、一時領域１３０からのデータの移動先となる領域であり、新規なデータの追加記憶や更新されたデータの上書き等を行うことができる記憶領域である。  閉塞済み領域１６０は、一時領域１３０及び閉塞待ち領域１５０に格納されたデータの移動先とならない領域であり、新規データの追加記憶や保持するデータに上書き等の変更を加えることができない記憶領域である。閉塞待ち領域１５０と閉塞済み領域１６０の関係は、閉塞待ち領域１５０の使用量が所定の量に達したときに、その閉塞待ち領域１５０が、閉塞済み領域１６０になる関係にある。即ち閉塞済み領域１６０は、一度閉塞済みとなると、一時領域１３０に保持されたデータからの参照に変更が発生しないことが保障できる記憶領域である。
【００２０】
よって、ガーベッジコレクションの際、一時領域１３０との参照関係調査時に閉塞済み領域１６０内に格納されたデータを参照調査する必要がなくなり、参照調査領域を限定でき、ガーベッジコレクション時にＪａｖａプログラム１０４のスレッドが停止する時間を短縮することができるという効果がある。
【００２１】
なお、「一時領域１３０との参照関係が無くなる」というのは、プログラム実行によって参照が明示的に削除されるか、後述するように、閉塞待ち領域１５０へのデータ移動が完了することを表す。実際に一時領域１３０への参照が全てなくなったかどうかは、ガベージコレクション時に判断可能である。
【００２２】
なお、閉塞済み領域１６０は、それ自体に保持されたデータに対して変更はできずに参照のみを可能とする領域であるが、仮に変更が生ずる場合には、変更対象のデータを閉塞待ち領域１５０に移動させることで当該データの変更を可能とするようになっている。より具体的には、当該データを閉塞待ち領域１５０にコピーし、コピーしたデータに対して更新処理を行うＣｏｐｙ ｏｎ Ｗｒｉｔｅ方式を適用するようになっている。これにより、ユーザによるプログラミングには影響なく、データ変更可能領域と不可能領域を設定することが可能となる。
【００２３】
Ｊａｖａプログラム１０４は、閉塞領域アクセスデータ生成ＡＰＩを有する。閉塞領域アクセスデータ生成ＡＰＩは、種々の宣言によって、Ｊａｖａプログラム１０４が生成したデータの格納先を指定する。
【００２４】
図２Ａに、閉塞領域用データ生成ＡＰＩの具体例を示すステートメントを示す。ステートメント２０１は、クラス情報から目的データを生成するＡＰＩ利用例である。閉塞領域管理用クラス“Ｃａｃｈｅ”のｐｕｔメソッド２０２を呼び出し、引数２０３には作成したいデータのクラス（以下、「目的クラス」という場合がある。）として“ＴａｒｇｅｔＣｌａｓｓ”を取り、返り値として、閉塞領域アクセスデータ生成部１１０で生成された特定データ２０４（“ＴａｒｇｅｔＣｌａｓ ｐｏ”）を返す。本特定データ２０４は、クラス２０３と同様の目的クラスであるかのように見える。
【００２５】
図２Ｂに示すステートメント２０５は、既存のデータを閉塞待ち領域１６０に移動させるＡＰＩ利用例である。この場合、ステートメント２０１におけるｐｕｔメソッド２０２の引数２０３が、一時領域１３０内の既存データ２０６（“ＴａｒｇｅｔＯｂｊｅｃｔ”）となる。
【００２６】
特定データ及び目的データのメモリ１０３上での配置は、特定データは一時領域１３０内、目的クラス２０３を元に生成した目的データは、閉塞待ち領域１５０内に生成され、特定データから目的データを参照する形となる。なお、特定データと目的データは1対1に対応しており、閉塞待ち領域１５０に生成された目的データ２０４にアクセスする際は、一時領域１３０内の特定データ２０１を介するものとする。
なお、ステートメント２０５の場合、一時領域１３０内の既存データが閉塞待ち領域１５０に移動させられ、同様の参照形態をとるようになる。
【００２７】
図３に、以上説明したメモリ１０３の各記憶領域と、データの配置及び参照関係とを模式的示す。一時領域１３０には、特定データ３１１ａ、３１１ｂ及び３１１ｃが配置される。閉塞待ち領域１５０には、目的データ３２２ａ、３２２ｂ及び３２２ｃが配置される。閉塞済み領域１６０には、目的データ３３３ａ、３３３ｂ、３３３ｃ及び３３３ｄが配置される。
【００２８】
特定データ３１１ｃは、参照３５０によって閉塞待ち領域１５０の目的データ３２２ａ参照し、目的データ３３２ｂ及び３３２ｃも、参照３５１及び３５２によって、それぞれ目的データ３２２ａを参照する。
【００２９】
特定データ３１１ｂ又は３１１ｃは、閉塞済み領域１６０の参照３５３又は３５４によって、目的データ３３３ｂ又は３３３ｃをそれぞれ参照する。閉塞済み領域１６０の目的データ３３３ａは、参照３５５によって、同じ閉塞済み領域１６０の目的データ３３３ａから参照され、目的データ３３３ｄは何れのデータとも参照関係に無い。
【００３０】
図１に戻り、ＪａｖａＶＭ１０５の構成について説明する。
ＪａｖａＶＭ１０５は、その機能部として、閉塞領域アクセスデータ生成部１１０と、解放判定・データ移動部１１１と、閉塞済み領域解放部１１３とを有する。
【００３１】
閉塞領域アクセスデータ生成部１１０は、閉塞待ち領域１５０及び閉塞済み領域１６０に保持する目的データを指す特定データ３１１（ａ〜ｃ）を生成する機能部である。Ｊａｖａプログラム１０４が、閉塞待ち領域１５０の目的データ３２２ａ又は閉塞済み領域１６０の目的データ３３３ｂ並びに３３３ｃにアクセスする場合、それぞれ特定データ３１１ａ〜ｃを介してアクセスするようになっている。
【００３２】
解放判定・データ移動部１１１は、閉塞領域１４０の閉塞済み領域１６０から、解放対象とする記憶領域を選択して、「閉塞済み領域解放処理」の一部を担う機能部である。具体的には、解放判定・データ移動部１１１は、例えば、領域使用量が予め設定した閾値を超えた場合や、所定時間毎或いはＪａｖａプログラム１０４における所定の処理の終了後といった種々の選択基準に基づいて、解放対象とする閉塞済み領域１６０を選択するようになっている。そして、解放判定・データ移動部１１１は、全解放対象外領域のデータから、解放対象として選択した閉塞済み領域１６０に格納されたデータに対する直接的又は間接的な参照関係がある場合、そのデータを閉塞待ち領域１５０に移動（例えば、コピー）する様になっている。
【００３３】
参照先補正部１１２は、解放判定・データ移動部１１１によって、閉塞待ち領域１５０に移動される前に、一時領域１１３に保持された特定データとの参照関係があったデータに対し、閉塞待ち領域１５０に移動後に、Ｊａｖａプログラム１０４からアクセスが有った場合に、当該移動後のデータに対する参照を変更する機能部である。本機能部は、「閉塞済み領域解放処理」と並行して実行されることを特徴の一つとする。
【００３４】
閉塞済み領域解放部１１３は、解放対象として選択された閉塞済み領域１６０に保持されるデータに対し、解放対象外領域に保持されるデータからの参照が無い事を契機に、記憶領域の解放を実行する機能部である。
【００３５】
本実施形態の特徴の一つとして、上述の解放判定・データ移動部１１１、参照先補正部１１２及び閉塞済み領域解放部１１３による処理が、Ｊａｖａアプリケーション１０４による通常の処理と並行して実行されることを上げることができる。従来、記憶領域を解放するには、解放処理中に、その対象となる記憶領域に記憶されたデータに対する変更の発生を回避するため、Ｊａｖａプログラム１０４の処理を一時的に停止する必要があった。これに対し本実施形態では、解放処理に伴う参照関係調査や解放処理等をＪａｖａプログラム１０４の通常の処理と並行して実行することができるため、Ｊａｖａアプリケーション１０４の停止時間を低減することができるという効果がある。
【００３６】
次に、以上の構成を有する計算機システム１０１の処理について、図４〜６のフロー図を用いて説明する。
【００３７】
図４に、解放判定・データ移動部１１１による「解放判定・データ移動処理」のフローを示す。
Ｓ４０１で、解放判定・データ移動部１１１は、閉塞領域１４０の解放が必要かどうかを判断する。判断基準としては、例えば、メモリ使用量があらかじめ設定した閾値を超えた場合や、一定時間ごと、Ｊａｖａプログラム１０４でのある処理終了後といったものが考えられる。
【００３８】
解放が必要と判断された場合（Ｓ４０１：Ｙｅｓ）解放判定・データ移動部１１１は、Ｓ４０３で、閉塞済み領域１６０から解放対象領域を選択する。この選択基準としては、例えば、一連の閉塞済み領域１６０に対するアクセス頻度の低い順、生成されてからの時間順、Ｊａｖａプログラム１０４でのある処理終了後は利用しないとわかっているデータが配置されている領域を、希望する解放量となるまで選択するといった方法が考えられる。
【００３９】
Ｓ４０５で、解放判定・データ移動部１１１は、解放対象外の全領域から解放対象として選択した閉塞済み領域１６０への参照を調べ、直接及び間接的に参照可能なデータを全て閉塞待ち領域１５０に移動させ、処理を終了する。
【００４０】
なお、一連の解放処理を実行中もＪａｖａプログラム１０４の所定の処理は並行して動作し続けることから、解放対象である閉塞済み領域１６０のデータに解放対象外の領域（例えば、一時領域１３０）のデータから参照があり、そのデータを閉塞待ち領域１５０に移動してしまうと、当該解放対象外の領域のデータからの参照が不可能となる。より詳細には、前述のように、Ｊａｖａプログラム１０４から閉塞領域１４０内のデータにアクセスする際、一時領域１３０内に配置された特定データを介する必要があるが、特定データから見える閉塞領域１４０内の目的データが、閉塞済み領域１６０に存在する場合、並行して実行される上述のデータ移動により閉塞待ち領域１５０に移動されている可能性がある。
【００４１】
そこで、図４の解放判定・データ移動部１１１の処理と並行して、特定データからの参照先を最新に保つようにする参照補正処理を行う。
【００４２】
図５に、参照先補正部１１２による「参照先補正処理」のフローを示す。
Ｓ５０１で、参照先補正部１１２は、Ｊａｖａプログラム１０４からのデータアクセスが、特定データを介したアクセスかどうかを判定する。特定データを介したアクセスである場合（Ｓ５０１：Ｙｅｓ）、Ｓ５０３に進む。
【００４３】
Ｓ５０３で、参照先補正部１１２は、特定データからの参照先である目的データが解放対象の閉塞済み領域１６０か否かを判定する。目的データが解放対象の閉塞済み領域１６０である場合（Ｓ５０３：Ｙｅｓ）、Ｓ５０５に進む。
【００４４】
Ｓ５０５で、参照先補正部１１２は、目的データが閉塞待ち領域１５０に移動済みか否かを判断する。移動済みであった場合（Ｓ５０５：Ｙｅｓ）、Ｓ５０７に進む。
Ｓ５０７で、参照先補正部１１２は、当該特定データからの参照先を移動後の目的データに変更する。
【００４５】
以上の参照補正処理が、解放判定・データ移動処理と並列して実行されることで、Ｊａｖａプログラム１０４の通常の処理が停止することを防止する。
【００４６】
参照補正処理の実行により、解放対象の閉塞済み領域１６０への参照が無くなると、解放処理部１１３が、閉塞済み領域１６０の解放処理を実行する。
【００４７】
図６に、閉塞済み領域解放部１１３による、「閉塞済み領域解放処理」のフローを示す。
Ｓ６０１で、閉塞済み領域解放部１１３は、一時領域１３０の特定データについて、参照調査が未調査のものがあるか否かをチェックする。未調査の特定データが有る場合（Ｓ６０１：Ｙｅｓ）、Ｓ６０３に進み、無い場合（Ｓ６０１：Ｎｏ）は、Ｓ６０７の処理に進む。
【００４８】
Ｓ６０３で、閉塞済み領域解放処理部１１３は、未調査の特定データを一つ選択し、当該特定データからの参照先データが解放対象の閉塞済み領域１６０に保持されているか否かを判断する。解放対象の閉塞済み領域１６０への参照を保持していた場合（Ｓ６０３：Ｙｅｓ）は、当該閉塞済み領域１６０に印をつけ（チェックし）、Ｓ６０１に戻る。参照先データが閉塞済み領域１６０に保持されていない場合（Ｓ６０３：Ｎｏ）、Ｓ６０１に戻る。
【００４９】
この処理を全特定データに対して実施した後（Ｓ６０１：Ｎｏ）、Ｓ６０５において、印のついていない閉塞済み領域１６０を解放し、処理を終了する。
印がついていない閉塞済み領域１６０には、当該領域外に保持されたデータから当該領域が保持するデータ参照が全くない。このことは、Ｊａｖａプログラム１０４の実行で必要なデータが存在しないことを保障することから、領域全域を解放してもＪａｖａプログラム１０４の通常の実行に何ら影響を与えないことを意味する。
【００５０】
以上の図４〜図６の処理を、模式図を用いて纏める。図７に、閉塞済み領域１６０を解放する際の一連の処理の流れを模式的に示す。同図は左から右に通常のＪａｖａプログラム１０４の処理、特定データ参照の補正処理、解放判定・データ移動処理及び閉塞済み領域１６０の開放処理が時系列で実行される様を示す。
【００５１】
時刻７０１において、Ｊａｖａプログラム１０４と並行して、「解放判定・データ移動処理（図４）」が実行される。具体的には、解放判定・データ移動処理部１１１が、閉塞領域１４０の解放要否を判断し（Ｓ４０１）、解放対象とする閉塞済み領域１６０を選択し（Ｓ４０３）、選択した解放対象領域に保持されたデータに対する解放対象外領域に保持されたデータからの参照調査及び被参照データを閉塞待ち領域１５０に移動する処理を行う（Ｓ４０５）。
【００５２】
「解放判定・データ移動処理」に並行して、特定データの「参照先補正処理」が実行される。具体的には、Ｊａｖａプログラム１０４からのデータアクセスが、特定データを介したアクセスかどうかを判定し（Ｓ５０１）、特定データを介したアクセスである場合は、目的データが解放対象の閉塞済み領域１６０に保持されているか否かを判断し（Ｓ５０３）、解放対象領域に保持されている場合、その目的データが閉塞待ち領域１５０に移動済みか否か判断し（Ｓ５０５）、移動済みの場合、特定データからの参照先を移動後の目的データに変更する（Ｓ５０７）。
【００５３】
時刻７０２において、閉塞済み領域解放部１１３が、「閉塞済み領域解放処理」を実行する。これに並行して、Ｊａｖａプログラム１０４は、通常のプログラム実行を並列実行する状態となる。
【００５４】
なお、Ｓ５０１〜５０７に示す特定データからの参照先補正処理は、Ｊａｖａプログラム１０４の実行に伴って実施されるため、プログラムの進行度合いによっては、アクセスされない特定データが出てくることも予想される。このような特定データが存在すると、Ｓ６０１〜６０７における閉塞済み領域解放処理が滞り、解放されない状況となることも考えられる。このような場合、Ｓ４０５におけるデータ移動処理の終了後の任意の時点で、Ｊａｖａプログラム１０４を実行する全スレッドを一時停止させ、特定データからの参照先補正処理を強制的に実施するようにしてもよい。
【００５５】
また、他の構成としては、Ｊａｖａプログラム１０４を実行するスレッド群に対して特定データをスレッドローカルデータとして管理することにより、解放対象領域への参照を保持する特定データを持つスレッドのみを停止させるようにしてもよい。この場合、特定データからの参照先補正処理を強制的に実施する際においても、全てのスレッドを停止させる必要がないという効果が得られる。
【００５６】
最後に、図７の時刻７０１（解放処理前）と、時刻７０２（閉塞済み領域１６０の解放直前）との時点における、データの記憶領域と参照の関係を説明する。図８Ａに、時刻７０１のメモリイメージを示し、図８Ｂに、時刻７０２のメモリイメージを示す。
【００５７】
図８Ａにおいて、一時領域１３０には、特定データ３１１ａ、３１１ｂ及び３１１ｃ配置されている。それぞれに対応する目的データは３２２ａ、３３３ｂ及び３３３ｃである。
閉塞済み領域１６０に保持されたデータのうち、３３３ｂ及び３３３ｃは、参照３５３及び参照３５４によって、特定データ３１１ｂ及び３１１ｃに直接的に参照されており、３３３ａは、間接的に参照されている。
【００５８】
よって、図８Ｂに示すように、データ３３３ｂ、３３３ｃ及び３３３ａは、閉塞待ち領域１５０に移動（コピー）され、データ３３４ｂ、３３４ｃ及び３３４ａとなる。
参照先補正処理では、参照３５３、３５４、３５５も、新たに参照３７０、３８０、３９０に変更される。その後、閉塞済み領域１６０は、解放される。
【００５９】
本実施形態の特徴の一つは、Ｊａｖａプログラム１０４の通常の実行に必要なデータ、即ち参照関係のあるデータを参照可能にしつつ、記憶領域内にそのような参照がないデータのみを保持する領域（例えば、解放対象の閉塞済み領域１６０）を確保できる点にある。この構成により、参照調査の範囲を限定することができ、参照調査に要する時間を低減できるという効果がある。
【００６０】
また、本実施形態の他の特徴の一つは、参照関係のあるデータを特定の記憶領域（例えば、閉塞待ち領域１５０に集約しつつその移動中のデータにＪａｖａプログラム１０４からのアクセスが有った場合に、当該データに対する参照先補正処理を並行して実行する点にある。これにより、参照補正のための処理時間を別に設ける必要がなくなり、Ｊａｖａプログラム１０４の通常の実行を停止する必要がなくなるという効果がある。
【００６１】
なお、本発明は上記種々の構成に限定されるものではなく、その趣旨を変更しない範囲で当業者であれば想到するであろう種々の構成を適用することがきる。特に、本実施形態では、プログラムとの協働により各機能部を構成する例を説明したが、これら一部をハードウェア処理とすることも可能である。
【００６２】
更に、本実施形態で説明した種々のプログラムは、その一部又は全部を電子・電磁式及び又は光学式記録媒体に格納してコンピュータにインストールことも可能であるし、インターネット等の有線又は無線の通信網を介してダウンロードすることも可能である。
【符号の説明】
【００６３】
１０１    計算機システム
１０４    Javaプログラム
１０５    JavaＶＭ
１１０    閉塞領域アクセスデータ生成部
１１１    解放判定・データ移動部
１１２    参照先補正部
１１３    閉塞済み領域解放部
１３０    一時領域
１４０    閉塞領域
１５０    閉塞待ち領域
１６０    閉塞済み領域
【図１】
2013128492.tif 000003
【図２Ａ】
2013128492.tif 000004
【図２Ｂ】
2013128492.tif 000005
【図３】
2013128492.tif 000006
【図４】
2013128492.tif 000007
【図５】
2013128492.tif 000008
【図６】
2013128492.tif 000009
【図７】
2013128492.tif 000010
【図８Ａ】
2013128492.tif 000011
【図８Ｂ】
2013128492.tif 000012
【手続補正書】
【提出日】平成26年10月1日(2014.10.1)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００２８
【補正方法】変更
【補正の内容】
【００２８】
特定データ３１１ａは、参照３５０によって閉塞待ち領域１５０の目的データ３２２ａ参照し、目的データ３３２ｂ及び３３２ｃも、参照３５１及び３５２によって、それぞれ目的データ３２２ａを参照する。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００２９
【補正方法】変更
【補正の内容】
【００２９】
特定データ３１１ｂ又は３１１ｃは、閉塞済み領域１６０の参照３５３又は３５４によって、目的データ３３３ｂ又は３３３ｃをそれぞれ参照する。閉塞済み領域１６０の目的データ３３３ａは、参照３５５によって、同じ閉塞済み領域１６０の目的データ３３３ｃから参照され、目的データ３３３ｄは何れのデータとも参照関係に無い。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００３３
【補正方法】変更
【補正の内容】
【００３３】
参照先補正部１１２は、解放判定・データ移動部１１１によって、閉塞待ち領域１５０に移動される前に、一時領域１３０に保持された特定データとの参照関係があったデータに対し、閉塞待ち領域１５０に移動後に、Ｊａｖａプログラム１０４からアクセスが有った場合に、当該移動後のデータに対する参照を変更する機能部である。本機能部は、「閉塞済み領域解放処理」と並行して実行されることを特徴の一つとする。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００４９
【補正方法】変更
【補正の内容】
【００４９】
この処理を全特定データに対して実施した後（Ｓ６０１：Ｎｏ）、Ｓ６０７において、印のついていない閉塞済み領域１６０を解放し、処理を終了する。
印がついていない閉塞済み領域１６０には、当該領域外に保持されたデータから当該領域が保持するデータ参照が全くない。このことは、Ｊａｖａプログラム１０４の実行で必要なデータが存在しないことを保障することから、領域全域を解放してもＪａｖａプログラム１０４の通常の実行に何ら影響を与えないことを意味する。
【手続補正５】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項１
【補正方法】変更
【補正の内容】
【請求項１】
保持するデータへの変更を可能とする第１及び第２記憶領域と、保持するデータへの変更を不可能とする第３記憶領域と、プログラムからの要求により、前記第２及び第３記憶領域が保持するデータに対するアクセスを実行する制御部と、を有する計算機であって、前記制御部は、
前記第２及び第３記憶領域に保持するデータにアクセスする為の特定データを前記第１記憶領域に生成し、
前記特定データに第３記憶領域が保持するデータへの参照情報を含ませ、
解放対象である前記第３記憶領域が保持するデータのうち、前記特定データと参照関係のあるデータを前記第２記憶領域に移動する処理の実行中に、前記プログラムから、前記第３記憶領域が保持するデータに対する特定データを介したアクセスが発生した場合、第３記憶領域が保持するデータへのアクセスがデータの変更であれば、変更した第３記憶領域が保持するデータを第２記憶領域へ保存し、該特定データに含まれる参照情報を移動先のデータに補正してアクセスすると共に前記第３記憶領域が保持するデータに参照関係を有する特定データからの参照を全て補正し、
第３記憶領域が保持するデータへのアクセスがデータの参照であれば、第３記憶領域が保持するデータを参照させることを特徴とする計算機。
【手続補正６】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項６
【補正方法】変更
【補正の内容】
【請求項６】
保持するデータへの変更を可能とする第１及び第２記憶領域と、保持するデータへの変更を不可能とする第３記憶領域と、プログラムからの要求により、前記第２及び第３記憶領域が保持するデータに対するアクセスを実行する制御部と、を有する計算機に、
前記第２及び第３記憶領域に保持するデータにアクセスする為の特定データを前記第１記憶領域に設定する手順と、
前記特定データに第３記憶領域が保持するデータへの参照情報を含ませる手順と、
解放対象である前記第３記憶領域が保持するデータのうち、前記特定データと参照関係のあるデータを前記第２記憶領域に移動する手順と、
前記移動させる手順の実行中に、前記プログラムから、前記第３記憶領域が保持するデータに対する特定データを介したアクセスが発生した場合、第３記憶領域が保持するデータへのアクセスがデータの変更であれば、変更した第３記憶領域が保持するデータを第２記憶領域へ保存し、該特定データに含まれる参照情報を移動先のデータに補正してアクセスすると共に前記第３記憶領域が保持するデータに参照関係を有する特定データからの参照を全て補正する手順と、第３記憶領域が保持するデータへのアクセスがデータの参照であれば、第３記憶領域が保持するデータを参照させる手順と、
を実行させるプログラム。
【手続補正７】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項１０
【補正方法】変更
【補正の内容】
【請求項１０】
保持するデータへの変更を可能とする第１及び第２記憶領域と、保持するデータへの変更を不可能とする第３記憶領域と、プログラムからの要求により、前記第２及び第３記憶領域が保持するデータに対するアクセスを実行する制御部と、を有する計算機のメモリ管理方法であって、
前記制御部が、
前記第２及び第３記憶領域に保持するデータにアクセスする為の特定データを前記第１記憶領域に設定し、
前記特定データに第３記憶領域が保持するデータへの参照情報を含ませ、
解放対象である前記第３記憶領域が保持するデータのうち、前記特定データと参照関係のあるデータを前記第２記憶領域に移動する処理の実行中に、前記プログラムから、前記第３記憶領域が保持するデータに対する特定データを介したアクセスが発生した場合、第３記憶領域が保持するデータへのアクセスがデータの変更であれば、変更した第３記憶領域が保持するデータを第２記憶領域へ保存し、該特定データに含まれる参照情報を移動先のデータに補正してアクセスすると共に前記第３記憶領域が保持するデータに参照関係を有する特定データからの参照を全て補正し、
第３記憶領域が保持するデータへのアクセスがデータの参照であれば、第３記憶領域が保持するデータを参照させることを含むメモリ管理方法。
【国際調査報告】
2013128492.tif 000013
2013128492.tif 000014