【手続補正書】
【提出日】平成26年4月24日(2014.4.24)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の世代領域に分割されたヒープ領域から、第１のポインタが指す第１のオブジェクトを特定し、
前記第１のオブジェクトの移動先のアドレスとして、前記第１のオブジェクトが属する第１の世代領域とは異なる第２の世代領域のアドレスが設定されているか否かを判断し、
前記第１のオブジェクトの移動先のアドレスとして前記第２の世代領域のアドレスが設定されている場合には、前記移動先のアドレスを取得し、
前記移動先のアドレスで前記第１のポインタを更新する
処理を、コンピュータが実行する情報処理方法。
【請求項２】
前記判断する処理が、
前記第１の世代領域が、前記第１のポインタを更新するフェーズにある世代領域として設定されているか否かを判断する
処理を含む請求項１記載の情報処理方法。
【請求項３】
前記ヒープ領域における前記複数の世代領域のうち第３の世代領域に対してガーベジコレクションを実行する場合、前記第３の世代領域のオブジェクトの移動先の領域である第４の世代領域を確保し、
前記ヒープ領域を使用してアプリケーションプログラムの処理を実行する処理部が前記第３の世代領域のオブジェクトに対して書き込みをすることを禁止し且つ読み出しをすることを可能とするための設定をし、
前記第３の世代領域のオブジェクトを、前記第４の世代領域にコピーする、
処理を前記コンピュータがさらに実行する請求項１又は２記載の情報処理方法。
【請求項４】
前記４の世代領域を確保する処理において、
前記第３の世代領域のオブジェクトの移動先のアドレスを当該第３の世代領域のオブジェクトに格納し、
前記処理部が、
前記第３の世代領域におけるオブジェクトに対して読み出し又は書き込みのためにアクセスする場合、当該オブジェクトの移動先のアドレスを当該オブジェクトから取得し、当該オブジェクトを指す第２のポインタを、取得した前記移動先のアドレスで更新し、
更新後の前記第２のポインタによって、前記第４の世代領域にコピーされたオブジェクトにアクセスする
ことを特徴とする請求項３記載の情報処理方法。
【請求項５】
複数の世代領域に分割されたヒープ領域から、第１のポインタが指す第１のオブジェクトを特定し、
前記第１のオブジェクトの移動先のアドレスとして、前記第１のオブジェクトが属する第１の世代領域とは異なる第２の世代領域のアドレスが設定されているか否かを判断し、
前記第１のオブジェクトの移動先のアドレスとして前記第２の世代領域のアドレスが設定されている場合には、前記移動先のアドレスを取得し、
前記移動先のアドレスで前記第１のポインタを更新する
処理をコンピュータに実行させるためのプログラム。
【請求項６】
メモリと、
前記メモリにおける、複数の世代領域に分割されたヒープ領域から、第１のポインタが指す第１のオブジェクトを特定し、前記第１のオブジェクトの移動先のアドレスとして、前記第１のオブジェクトが属する第１の世代領域とは異なる第２の世代領域のアドレスが設定されているか否かを判断し、前記第１のオブジェクトの移動先のアドレスとして前記第２の世代領域のアドレスが設定されている場合には、前記移動先のアドレスを取得し、前記移動先のアドレスで前記第１のポインタを更新する処理部と、
を有する情報処理装置。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００９
【補正方法】変更
【補正の内容】
【０００９】
また、特に生存オブジェクトを移動する処理（すなわち、移動先の領域に生存オブジェクトをコピーする処理）をアプリケーションプログラムの処理と並行で実行することについては、上で述べた技術では十分ではない。上で述べた技術では、例えばリードバリアを利用する方法を採用しているが、このような方法は処理コストが高いという問題がある。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００１３
【補正方法】変更
【補正の内容】
【００１３】
本発明に係る情報処理方法は、複数の世代領域に分割されたヒープ領域から、第１のポインタが指す第１のオブジェクトを特定し、第１のオブジェクトの移動先のアドレスとして、第１のオブジェクトが属する第１の世代領域とは異なる第２の世代領域のアドレスが設定されているか否かを判断し、第１のオブジェクトの移動先のアドレスとして第２の世代領域のアドレスが設定されている場合には、移動先のアドレスを取得し、移動先のアドレスで第１のポインタを更新する処理を含む。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００１９
【補正方法】変更
【補正の内容】
【００１９】
アプリケーション処理部１０５は、ユーザが開発したアプリケーションプログラムを処理するインタプリタ又はコンパイラとして動作する。アプリケーション処理部１０５は、例えばユーザスレッドである。アプリケーション処理部１０５は、オブジェクト生成要求を出力することにより、ヒープ領域１０１にオブジェクトを生成する。アプリケーション処理部１０５は、読み出し要求及び書き込み要求を出力することにより、アクセサ１０９を介してオブジェクトにアクセスする。アプリケーション処理部１０５の数は複数である場合もある。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００４６
【補正方法】変更
【補正の内容】
【００４６】
移動フェーズ（２）が完了すると、参照更新フェーズ（２）が開始する。参照更新フェーズ（２）においては、設定部１０３９が、参照更新処理が有効になるように設定をする。すると、移動フェーズ（２）において移動されたオブジェクトを指す参照ポインタは、アプリケーション処理部１０５がそのオブジェクトにアクセスする際に更新される。また、マークフェーズ（３）が開始すると、マーキング部１０３１が、参照ポインタを更新する。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００６６
【補正方法】変更
【補正の内容】
【００６６】
マーキング部１０３１は、参照ポインタが指すオブジェクトにマークが有るか判断する（ステップＳ９）。マークが無い場合（ステップＳ９：Ｎｏルート）、マーキング部１０３１は、参照ポインタが指すオブジェクトにマークを付与する（ステップＳ１１）。そして処理は端子Ｂを介して図７のステップＳ１７に移行する。なお、ステップＳ７において参照ポインタが更新されている場合には、移動先のオブジェクトにマークが付与される。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００８７
【補正方法】変更
【補正の内容】
【００８７】
一方、移動先のアドレスが格納されていないオブジェクトが有る場合（ステップＳ４１：Ｙｅｓルート）、第１処理部１０３５は、その生存オブジェクトの移動先の世代領域が有るか判断する（ステップＳ４３）。移動先の世代領域が有る場合（ステップＳ４３：Ｙｅｓルート）、移動先のアドレスは、移動先の世代領域に存在するオブジェクトの末尾の位置に設定されているので、ステップＳ５１の処理に移行する。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】０１００
【補正方法】変更
【補正の内容】
【０１００】
まず、設定部１０３９は、回収対象の世代領域をアクセス禁止に設定する（図１４：ステップＳ７１）。ステップＳ７１においては、例えばＰＲＯＴ＿ＮＯＮＥに設定することにより、読み出し及び書き込みを禁止する。このようにするのは、アクセサ１０９が繰り返し呼び出されることによって設定部１０３９の処理が遅延することを防ぐためである。
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】０１４６
【補正方法】変更
【補正の内容】
【０１４６】
また、本情報処理方法が、（Ｅ）ヒープ領域における複数の領域の中のうち第１の領域に対してガーベジコレクションを実行する場合、第１の領域のオブジェクトの移動先の領域である第２の領域を確保し、（Ｆ）ヒープ領域を使用してアプリケーションプログラムの処理を実行する処理部が第１の領域のオブジェクトに対して書き込みをすることを禁止し且つ読み出しをすることを可能とするための設定をし、（Ｇ）第１の領域のオブジェクトを、第２の領域にコピーする処理をさらに含むようにしてもよい。このようにすれば、オブジェクトの移動中であっても、ガーベジコレクションの対象とする領域のオブジェクトに対する読み出しを停止せずに済み、またガーベジコレクションの対象ではない領域のオブジェクトに対する書き込み及び読み出しを停止せずに済む。また、ガーベジコレクションを実行する領域のオブジェクトに対する書き込みは禁止されているので、移動先のオブジェクトが移動元のオブジェクトと同じであることが保証される。
【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】０１５３
【補正方法】変更
【補正の内容】
【０１５３】
（付記１）
複数の世代領域に分割されたヒープ領域から、第１のポインタが指す第１のオブジェクトを特定し、
前記第１のオブジェクトの移動先のアドレスとして、前記第１のオブジェクトが属する第１の世代領域とは異なる第２の世代領域のアドレスが設定されているか否かを判断し、
前記第１のオブジェクトの移動先のアドレスとして前記第２の世代領域のアドレスが設定されている場合には、前記移動先のアドレスを取得し、
前記移動先のアドレスで前記第１のポインタを更新する
処理を、コンピュータが実行する情報処理方法。
（付記２）
前記判断する処理が、
前記第１の世代領域が、前記第１のポインタを更新するフェーズにある世代領域として設定されているか否かを判断する
処理を含む付記１記載の情報処理方法。
【手続補正１１】
【補正対象書類名】明細書
【補正対象項目名】０１５４
【補正方法】変更
【補正の内容】
【０１５４】
（付記３）
前記移動先のアドレスにより特定されるオブジェクトに対し、生存オブジェクトであることを表すマークを付与する
処理を前記コンピュータがさらに実行する付記１記載の情報処理方法。
【手続補正１２】
【補正対象書類名】明細書
【補正対象項目名】０１５５
【補正方法】変更
【補正の内容】
【０１５５】
（付記４）
前記ヒープ領域における前記複数の世代領域のうち第３の世代領域に対してガーベジコレクションを実行する場合、前記第３の世代領域のオブジェクトの移動先の領域である第４の世代領域を確保し、
前記ヒープ領域を使用してアプリケーションプログラムの処理を実行する処理部が前記第３の世代領域のオブジェクトに対して書き込みをすることを禁止し且つ読み出しをすることを可能とするための設定をし、
前記第３の世代領域のオブジェクトを、前記第４の世代領域にコピーする、
処理を前記コンピュータがさらに実行する付記１乃至３のいずれか１つ記載の情報処理方法。
【手続補正１３】
【補正対象書類名】明細書
【補正対象項目名】０１５６
【補正方法】変更
【補正の内容】
【０１５６】
（付記５）
前記第４の世代領域を確保する処理において、
前記第３の世代領域のオブジェクトの移動先のアドレスを当該第３の世代領域のオブジェクトに格納し、
前記処理部が、
前記第３の世代領域におけるオブジェクトに対して読み出し又は書き込みのためにアクセスする場合、当該オブジェクトの移動先のアドレスを当該オブジェクトから取得し、当該オブジェクトを指す第２のポインタを、取得した前記移動先のアドレスで更新し、
更新後の前記第２のポインタによって、前記第４の世代領域にコピーされたオブジェクトにアクセスする
ことを特徴とする付記４記載の情報処理方法。
【手続補正１４】
【補正対象書類名】明細書
【補正対象項目名】０１５７
【補正方法】変更
【補正の内容】
【０１５７】
（付記６）
前記第３の世代領域のオブジェクトにアクセスする処理部があるか否かを、アクセス中の前記処理部の数を計数するためのカウンタを用いて判断し、
前記第３の世代領域のオブジェクトにアクセスする処理部が無いと判断した場合に、前記第３の世代領域を解放する
処理を前記コンピュータがさらに実行する付記５記載の情報処理方法。
【手続補正１５】
【補正対象書類名】明細書
【補正対象項目名】０１５８
【補正方法】変更
【補正の内容】
【０１５８】
（付記７）
前記複数の世代領域のうち解放されている世代領域のいずれかに対し、前記処理部が書き込み及び読み出しをすることを可能とするための設定をする
処理を前記コンピュータがさらに実行する付記６記載の情報処理方法。
【手続補正１６】
【補正対象書類名】明細書
【補正対象項目名】０１５９
【補正方法】変更
【補正の内容】
【０１５９】
（付記８）
前記第４の世代領域を確保する処理において、
前記複数の世代領域の中から、生存オブジェクトのサイズ又は数に基づき、前記ガーベジコレクションを実行する世代領域を特定する
ことを特徴とする付記３乃至７のいずれか１つ記載の情報処理方法。
【手続補正１７】
【補正対象書類名】明細書
【補正対象項目名】０１６０
【補正方法】変更
【補正の内容】
【０１６０】
（付記９）
複数の世代領域に分割されたヒープ領域から、第１のポインタが指す第１のオブジェクトを特定し、
前記第１のオブジェクトの移動先のアドレスとして、前記第１のオブジェクトが属する第１の世代領域とは異なる第２の世代領域のアドレスが設定されているか否かを判断し、
前記第１のオブジェクトの移動先のアドレスとして前記第２の世代領域のアドレスが設定されている場合には、前記移動先のアドレスを取得し、
前記移動先のアドレスで前記第１のポインタを更新する
処理をコンピュータに実行させるためのプログラム。
【手続補正１８】
【補正対象書類名】明細書
【補正対象項目名】０１６１
【補正方法】変更
【補正の内容】
【０１６１】
（付記１０）
メモリと、
前記メモリにおける、複数の世代領域に分割されたヒープ領域から、第１のポインタが指す第１のオブジェクトを特定し、前記第１のオブジェクトの移動先のアドレスとして、前記第１のオブジェクトが属する第１の世代領域とは異なる第２の世代領域のアドレスが設定されているか否かを判断し、前記第１のオブジェクトの移動先のアドレスとして前記第２の世代領域のアドレスが設定されている場合には、前記移動先のアドレスを取得し、前記移動先のアドレスで前記第１のポインタを更新する処理部と、
を有する情報処理装置。