(57)【要約】      （修正有）【課題】ガーベジコレクションによってアプリケーションが停止する時間を短縮する。【解決手段】メモリ管理方法は、メモリの領域に含まれ且つソフトウエアに割り当てられた第１の領域におけるデータのうちソフトウエアのプロセスにアクセスされないデータ以外のデータをメモリの領域のうち第２の領域に移動するデータ移動処理の開始から終了までの間に、第１の領域内の第１のアドレスにおけるデータをアクセス先とするリクエストをソフトウエアのプロセスから受信した場合、第１のアドレスにおけるデータの移動先である第２の領域内の第２のアドレスを、メモリの領域のうち第１の領域内のデータの移動先のアドレスを格納する領域から特定し、リクエストのアクセス先を、第１のアドレスから第２のアドレスに変更する処理を含む。【選択図】図７
2018010507.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサに、
メモリの領域に含まれ且つソフトウエアに割り当てられた第１の領域におけるデータのうち前記ソフトウエアのプロセスにアクセスされないデータ以外のデータを前記メモリの領域のうち第２の領域に移動するデータ移動処理の開始から終了までの間に、前記第１の領域内の第１のアドレスにおけるデータをアクセス先とするリクエストを前記ソフトウエアのプロセスから受信した場合、前記第１のアドレスにおけるデータの移動先である前記第２の領域内の第２のアドレスを、前記メモリの領域のうち前記第１の領域内のデータの移動先のアドレスを格納する領域から特定し、
前記リクエストのアクセス先を、前記第１のアドレスから前記第２のアドレスに変更する、
処理を実行させるメモリ管理プログラム。
【請求項２】
前記第１のアドレスにおけるデータが前記第２のアドレスにコピーされたか判定する、
処理を前記プロセッサにさらに実行させ、
前記リクエストのアクセス先を前記第１のアドレスから前記第２のアドレスに変更する処理において、
前記第１のアドレスにおけるデータが前記第２のアドレスにコピーされたと判定された場合、前記第１のアドレスを含む参照ポインタを前記第２のアドレスで更新する、
請求項１記載のメモリ管理プログラム。
【請求項３】
前記第１のアドレスにおけるデータが前記第２のアドレスにコピーされていないと判定された場合、前記第１のアドレスにおけるデータを前記第２のアドレスにコピーする、
処理を前記プロセッサにさらに実行させ、
前記リクエストのアクセス先を前記第１のアドレスから前記第２のアドレスに変更する処理において、
前記第１のアドレスにおけるデータを前記第２のアドレスにコピーする処理を完了した場合、前記参照ポインタを前記第２のアドレスで更新する、
請求項２記載のメモリ管理プログラム。
【請求項４】
前記第２のアドレスを特定する処理において、
前記リクエストに含まれ且つアクセス元を示す情報と、前記メモリに設定され且つ前記第１の領域が前記データ移動処理の対象であるか否かを示す情報とに基づき、前記データ移動処理の開始から終了までの間に前記リクエストを前記ソフトウエアのプロセスから受信したか判定する、
請求項１乃至３のいずれか１つ記載のメモリ管理プログラム。
【請求項５】
前記メモリの各領域について、当該領域が前記データ移動処理の対象であるか否かを示す情報を前記メモリに設定する、
処理を前記プロセッサにさらに実行させる請求項４記載のメモリ管理プログラム。
【請求項６】
プロセッサが、
メモリの領域に含まれ且つソフトウエアに割り当てられた第１の領域におけるデータのうち前記ソフトウエアのプロセスにアクセスされないデータ以外のデータを前記メモリの領域のうち第２の領域に移動するデータ移動処理の開始から終了までの間に、前記第１の領域内の第１のアドレスにおけるデータをアクセス先とするリクエストを前記ソフトウエアのプロセスから受信した場合、前記第１のアドレスにおけるデータの移動先である前記第２の領域内の第２のアドレスを、前記メモリの領域のうち前記第１の領域内のデータの移動先のアドレスを格納する領域から特定し、
前記リクエストのアクセス先を、前記第１のアドレスから前記第２のアドレスに変更する、
処理を実行するメモリ管理方法。
【請求項７】
メモリと、
前記メモリの領域に含まれ且つソフトウエアに割り当てられた第１の領域におけるデータのうち前記ソフトウエアのプロセスにアクセスされないデータ以外のデータを前記メモリの領域のうち第２の領域に移動するデータ移動処理の開始から終了までの間に、前記第１の領域内の第１のアドレスにおけるデータをアクセス先とするリクエストを前記ソフトウエアのプロセスから受信した場合、前記第１のアドレスにおけるデータの移動先である前記第２の領域内の第２のアドレスを、前記メモリの領域のうち前記第１の領域内のデータの移動先のアドレスを格納する領域から特定する特定部と、
前記リクエストのアクセス先を、前記第１のアドレスから前記第２のアドレスに変更する変更部と、
を有するメモリ管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ管理技術に関する。
【背景技術】
【０００２】
メモリに対してガーベジコレクションが行われる場合、データの不整合が発生しないようにするためアプリケーションの処理は停止される。図１を用いて、ガーベジコレクションとアプリケーションの処理との関係について説明する。図１においては、アプリケーションの処理が停止されると、ガーベジコレクションが開始し、オブジェクトのコピーが行われる。図１の例では、生存オブジェクトであるオブジェクトＡが古い領域から新しい領域にコピーされる。ガーベジコレクションが終了すると、アプリケーションの処理が再開される。
【０００３】
メモリの容量が数ＧＢ（ギガバイト）程度である場合、コピーイングＧＣ（Garbage Collection）を利用することで停止時間を数十ミリ秒から数百ミリ秒程度に抑えることができる。しかし、メモリの容量が数ＴＢ（テラバイト）程度である場合には、コピーイングＧＣ等を利用したとしても停止時間が数秒から数分程度になることがある。
【０００４】
或る文献は、ガーベジコレクションにおいてアプリケーションの処理の停止時間を短縮する技術を開示する。具体的には、オブジェクトがコピーされるフェーズにおいて、コピー元のオブジェクトが存在する世代領域を読み出し専用にするための設定が行われる。これにより、アプリケーションによる読み出しのアクセスが停止されることを防ぎ、アプリケーションによる処理が滞ることが抑制される。
【０００５】
但し、この技術を利用したとしても、アクセス時のオーバーヘッド等が原因でアプリケーションの停止時間を十分に短縮できないことがある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１４−０４４４７２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明の目的は、１つの側面では、ガーベジコレクションによってアプリケーションが停止する時間を短縮するための技術を提供することである。
【課題を解決するための手段】
【０００８】
本発明に係るメモリ管理方法は、メモリの領域に含まれ且つソフトウエアに割り当てられた第１の領域におけるデータのうちソフトウエアのプロセスにアクセスされないデータ以外のデータをメモリの領域のうち第２の領域に移動するデータ移動処理の開始から終了までの間に、第１の領域内の第１のアドレスにおけるデータをアクセス先とするリクエストをソフトウエアのプロセスから受信した場合、第１のアドレスにおけるデータの移動先である第２の領域内の第２のアドレスを、メモリの領域のうち第１の領域内のデータの移動先のアドレスを格納する領域から特定し、リクエストのアクセス先を、第１のアドレスから第２のアドレスに変更する処理を含む。
【発明の効果】
【０００９】
１つの側面では、ガーベジコレクションによってアプリケーションが停止する時間を短縮できるようになる。
【図面の簡単な説明】
【００１０】
【図１】図１は、ガーベジコレクションとアプリケーションの処理との関係について説明するための図である。
【図２】図２は、情報処理装置のハードウエア構成図である。
【図３】図３は、ＣＰＵコアのハードウエア構成図である。
【図４】図４は、本実施の形態におけるメモリの使用態様について説明するための図である。
【図５Ａ】図５Ａは、ＨＤＤに格納されるプログラムの一例を示す図である。
【図５Ｂ】図５Ｂは、ＧＣハンドラの機能ブロック図である。
【図６】図６は、ガーベジコレクタの処理の処理フローを示す図である。
【図７】図７は、ロード命令及びストア命令の発行時に実行される処理の処理フローを示す図である。
【図８】図８は、ロード命令及びストア命令に従ったアクセスについて説明するための図である。
【図９】図９は、検知処理の処理フローを示す図である。
【図１０】図１０は、アクセス属性値のコピーについて説明するための図である。
【図１１】図１１は、アクセス可能か否かの判定について説明するための図である。
【図１２】図１２は、本実施の形態のガーベジコレクションを具体的に説明するための図である。
【図１３】図１３は、停止時間の短縮について説明するための図である。
【発明を実施するための形態】
【００１１】
図２に、本実施の形態の情報処理装置１のハードウエア構成図を示す。情報処理装置１は、ＣＰＵ（Central Processing Unit）１０と、例えばＤＩＭＭ（Dual Inline Memory Module）であるメモリ１１と、ＨＤＤ（Hard Disk Drive）１２とを有する。ＣＰＵ１０は、複数のＣＰＵコア１００を有する。情報処理装置１は、例えば、パーソナルコンピュータ、サーバ或いはスマートフォン等である。ＨＤＤ１２の代わりにＳＤＤ（Solid State Drive）等の記憶装置を使用してもよい。
【００１２】
図３に、ＣＰＵコア１００のハードウエア構成図を示す。ＣＰＵコア１００は、１又は複数の汎用レジスタ１０１と、１又は複数のＡＳＩ（Address Space Identifier）レジスタ１０２と、メモリ管理ユニット１０３と、演算ユニット１０４と、データ保護部１０５とを有する。汎用レジスタ１０１には、演算ユニット１０４の処理に使用されるデータ等が格納される。ＡＳＩレジスタ１０２には、ロード命令及びストア命令の発行者を表すアクセスキーが格納される。メモリ管理ユニット１０３は、ＴＬＢ（Translation Lookaside Buffer）１０３０を有し、メモリ１１を管理する。演算ユニット１０４は、命令を実行する。データ保護部１０５は、データ管理部１０５１及び判定部１０５２を有する。データ保護部１０５は、例えばＣＰＵコア１００の制御装置に設けられるハードウエアモジュールである。なお、ＣＰＵコア１００は、汎用レジスタ１０１及びＡＳＩレジスタ１０２以外のレジスタを有してもよい。
【００１３】
データ管理部１０５１は、メモリ１１に格納されたアクセス属性値とロード命令及びストア命令に基づくアクセスキーとを取得する処理等を実行する。判定部１０５２は、取得されたアクセス属性値とアクセスキーとに基づき、アクセスを許可するか否か判定する処理等を実行する。
【００１４】
図４を用いて、メモリ１１の使用態様について説明する。本実施の形態においては、メモリ１１が複数のセグメントに分割されて使用される。各セグメントに対しては、アクセス属性値が格納される属性格納領域が設けられる。アクセス属性値は、対応するセグメントがガーベジコレクションの対象であるか否かを表す情報であり、ガーベジコレクタによって管理される。
【００１５】
図５Ａに、ＨＤＤ１２に格納されるプログラムの一例を示す。ＨＤＤ１２には、アプリケーションプログラムと、ガーベジコレクタのプログラムと、ＧＣハンドラのプログラムとが格納される。これらのプログラムは、メモリ１１にロードされＣＰＵ１０によって実行されることによって、各種の機能を実現する。具体的には、アプリケーションプログラムがＣＰＵ１０により実行されることによって以下の説明におけるアプリケーション（ミューテータとも呼ばれる）が実現される。ガーベジコレクタのプログラムがＣＰＵ１０によって実行されることによって以下の説明におけるガーベジコレクタが実現される。ＧＣハンドラのプログラムがＣＰＵ１０によって実行されることによって以下の説明におけるＧＣハンドラが実現される。アプリケーション、ガーベジコレクタ及びＧＣハンドラは、例えばプロセス或いはスレッドに相当する。なお、アプリケーションのプログラム、ガーベジコレクタのプログラム及びＧＣハンドラのプログラムは、ＨＤＤ１２以外の記憶装置（例えばＲＯＭ（Read Only Memory））に格納されてもよい。
【００１６】
図５Ｂに、ＧＣハンドラの機能ブロック図を示す。図５Ｂの例では、ＧＣハンドラは、第１処理部１１０１と、第２処理部１１０２とを含む。第１処理部１１０１及び第２処理部１１０２は、ハードウエア例外の発生時に処理を実行する。
【００１７】
次に、図６乃至図１２を用いて、情報処理装置１の動作について説明する。
【００１８】
まず、図６を用いて、ガーベジコレクタの処理について説明する。
【００１９】
ガーベジコレクタは、メモリ１１の領域を複数のセグメントに分割する（図６：ステップＳ１）。ステップＳ１においては、各セグメントの開始アドレスと終了アドレスとを設定する処理等が行われる。複数のセグメントのサイズは同じであってもよいし、異なっていてもよい。
【００２０】
ガーベジコレクタは、ガーベジコレクションの対象とするセグメント（以下、ＧＣ対象セグメントと呼ぶ）を１つ特定する（ステップＳ３）。
【００２１】
ガーベジコレクタは、ＧＣ対象セグメント内のオブジェクトに対してマーキングを実行する（ステップＳ５）。マーキングとは、参照ポインタを辿ることによって到達可能なオブジェクトに対して、生存オブジェクトであることを表すマークを付す処理である。生存オブジェクトは、アプリケーションから見て今後使用する予定がないオブジェクトである。
【００２２】
ガーベジコレクタは、ＧＣ対象セグメントのアクセス属性値として、アプリケーションからのアクセスが不可であり且つガーベジコレクタからのアクセスが可能であることを表す値を、ＧＣ対象セグメントの属性格納領域に設定する（ステップＳ７）。
【００２３】
ガーベジコレクタは、ＧＣ対象セグメント内のオブジェクトのうちマークが付されたオブジェクトを、コピー先のセグメントにコピーする（ステップＳ９）。
【００２４】
ガーベジコレクタは、マークが付された全オブジェクトのコピーが完了したか判定する（ステップＳ１１）。マークが付された全オブジェクトのコピーが完了していない場合（ステップＳ１１：Ｎｏルート）、処理はステップＳ９に戻る。
【００２５】
一方、マークが付された全オブジェクトのコピーが完了した場合（ステップＳ１１：Ｙｅｓルート）、ガーベジコレクタは以下の処理を実行する。具体的には、ガーベジコレクタは、ＧＣ対象セグメントのアクセス属性値として、アプリケーション及びガーベジコレクタからのアクセスが可能であることを表す値を、ＧＣ対象セグメントの属性格納領域に設定する（ステップＳ１３）。
【００２６】
ガーベジコレクタは、処理の終了指示（例えば情報処理装置１のシャットダウン指示）があったか判定する（ステップＳ１５）。処理の終了指示がない場合（ステップＳ１５：Ｎｏルート）、処理はステップＳ３に戻る。一方、処理の終了指示があった場合（ステップＳ１５：Ｙｅｓルート）、処理は終了する。
【００２７】
以上のような処理を実行すれば、ＧＣ対象領域に対するアプリケーションからのアクセスを制限することができるが、ガーベジコレクタからのアクセスは許可されるので、通常どおりのガーベジコレクションを実行することできる。なお、以下で説明するように、ＧＣ対象領域に対するアプリケーションからのアクセスは完全に禁止されるわけではないので、アプリケーションの処理が停止される時間が長くなることを抑制することができる。
【００２８】
図７乃至図１１を用いて、ロード命令及びストア命令の発行時に実行される処理について説明する。
【００２９】
まず、アクセス元（例えば、アプリケーション、ガーベジコレクタ又はＧＣハンドラ）が、ロード命令又はストア命令を発行する（図７：ステップＳ２１）。ロード命令はメモリ１１に格納されているデータを汎用レジスタ１０１に設定する命令であり、ストア命令は汎用レジスタ１０１に格納されているデータをメモリ１１に設定する命令である。図８に示すように、ＣＰＵコア１００における演算ユニット１０４は、発行されたロード命令及びストア命令に従って、メモリ管理ユニット１０３を介してメモリ１１へのアクセスを行う。
【００３０】
ロード命令又はストア命令を受け取ったＣＰＵコア１００は、検知処理を実行する（ステップＳ２３）。検知処理については、図９乃至図１１を用いて説明する。
【００３１】
まず、データ管理部１０５１は、命令において指定されたアドレスのセグメントに対応するアクセス属性値をメモリ１１の属性格納領域から読み出し、読み出したアクセス属性値をメモリ管理ユニット１０３のＴＬＢ１０３０の所定領域に書き込む（図９：ステップＳ４１）。ステップＳ４１においては、図１０に示すように、メモリ１１に格納されているアクセス属性値がＴＬＢ１０３０にコピーされ、後で判定部１０５２により利用される。
【００３２】
例えば、ロード命令「Ｌｏａｄ ａｄｄｒｅｓｓ−Ａ ｒｅｇｉｓｔｅｒ−Ｘ ｗｉｔｈ ＡＳＩ−１」の場合、ａｄｄｒｅｓｓ−Ａのセグメントに対応する属性格納領域からアクセス属性値が読み出される。なお、このロード命令は、「ＡＳＩ−１レジスタの値をアクセスキーとしてメモリ１１のａｄｄｒｅｓｓ−Ａからデータを読み込みｒｅｇｉｓｔｅｒ−Ｘにロードする」ことを意味する。ここで「ｒｅｇｉｓｔｅｒ−Ｘ」とは、例えば汎用レジスタ１０１である。
【００３３】
データ管理部１０５１は、命令において指定されたＡＳＩレジスタ１０２からアクセスキーを取得する（ステップＳ４３）。
【００３４】
判定部１０５２は、ステップＳ４１においてＴＬＢ１０３０に書き込まれたアクセス属性値とステップＳ４３において取得されたアクセスキーとに基づき、命令に係るアクセスが可能であるか判定する（ステップＳ４５）。
【００３５】
図１１を用いて、ステップＳ４５において実行される処理について説明する。セグメントには、ガーベジコレクションの対象であるか否かによって異なるアクセス属性値が割り当てられる。ここでは、ガーベジコレクションの対象である（すなわち、アプリケーションからのアクセスは不可であるがガーベジコレクタからのアクセスは可である）場合に「１０」が割り当てられ、ガーベジコレクションの対象ではない（すなわち、アプリケーション及びガーベジコレクタからのアクセスが可である）場合に「１１」が割り当てられる。一方で、アプリケーションからのアクセスにはアクセスキー「０１」が使用され、ガーベジコレクタからのアクセスにはアクセスキー「１１」が設定される。アクセス属性値とアクセスキーとについてＡＮＤ演算を実行し、実行結果の２ビットが「００」である場合には、アプリケーションがガーベジコレクションの対象であるセグメントにアクセスしたので、アクセスは許可されない。その場合にはハードウエア例外が発生しＧＣハンドラが動作を開始する。一方、実行結果の２ビットが「００」ではない場合には、アプリケーションがガーベジコレクションの対象ではないセグメントにアクセスしたか又はアプリケーション以外からのアクセスであるので、アクセスは許可され、ハードウエア例外は発生しない。
【００３６】
命令に係るアクセスが可能である場合（ステップＳ４７：Ｙｅｓルート）、データ保護部１０５は、命令に係るアクセスが可能であることを演算ユニット１０４に通知する。これに応じ、演算ユニット１０４は、命令に従ったアクセスをメモリ管理ユニット１０３を介して実行する（ステップＳ４９）。そして処理は呼び出し元に戻り、データ保護部１０５の処理は終了する。
【００３７】
一方、命令に係るアクセスが可能ではない場合（ステップＳ４７：Ｎｏルート）、データ保護部１０５はハードウエア例外を発生させ、呼び出し元の処理に戻る。
【００３８】
図７の説明に戻り、データ保護部１０５の判定部１０５２は、検知処理（ステップＳ２３）においてハードウエア例外が発生した場合に制御をＧＣハンドラに移す（ステップＳ２５）。これにより、アプリケーションの処理は停止し、ＧＣハンドラが動作を開始する。
【００３９】
ＧＣハンドラの第１処理部１１０１は、アクセス対象のオブジェクトがガーベジコレクタによってコピー先のセグメントにコピーされたか判定する（ステップＳ２７）。アクセス対象のオブジェクトは、ロード命令及びストア命令において指定されるアドレスによって特定される。オブジェクトのヘッダにはコピーされたか否かを示すフラグが設定されているので、そのフラグが利用される。
【００４０】
アクセス対象のオブジェクトがガーベジコレクタによってコピー先のセグメントにコピーされた場合（ステップＳ２９：Ｙｅｓルート）、ＧＣハンドラがコピーを実行しなくてもよいので、処理はステップＳ３２に移行する。
【００４１】
一方、アクセス対象のオブジェクトがガーベジコレクタによってコピー先のセグメントにコピーされていない場合（ステップＳ２９：Ｎｏルート）、第１処理部１１０１は、アクセス対象のオブジェクトをコピー先のセグメントにコピーする（ステップＳ３１）。
【００４２】
第１処理部１１０１は、アクセス対象のオブジェクトのコピー先のアドレスを特定する（ステップＳ３２）。ステップＳ３２においては、例えば、アクセス対象のオブジェクトの領域に予め格納されたアドレスが特定される。或いは、アクセス対象のオブジェクトのアドレスとコピー先のアドレスとを対応付けたテーブルを用意しておき、そのテーブルによってコピー先アドレスを特定してもよい。
【００４３】
第２処理部１１０２は、アクセス元の参照ポインタ（すなわち、アプリケーションがアクセスに使用する参照ポインタ）を、コピー先のアドレスで更新する（ステップＳ３３）。
【００４４】
第２処理部１１０２は、制御をアクセス元（ここでは、アプリケーション）に戻す（ステップＳ３５）。これにより、ＧＣハンドラの処理は停止し、アプリケーションの処理の停止が解除される。
【００４５】
そして、アクセス元（ここでは、アプリケーション）は、更新後の参照ポインタを使用してアクセスを行う（ステップＳ３７）。
【００４６】
次に、図１２を用いて、本実施の形態のガーベジコレクションを具体的に説明する。図１２（ａ）に示すように、ガーベジコレクションの対象であるセグメントにおける生存オブジェクトに対してマークが付されるフェーズにおいて、オブジェクトを配置する領域がコピー先のセグメントに予約される。マークが付されていないオブジェクトについては、コピーが行われないので領域は予約されない。
【００４７】
図１２（ｂ）に示すように、ガーベジコレクションの対象であるセグメントにおける生存オブジェクトは、予約された領域にコピーされる。このとき、生存オブジェクトのコピーは順番に行われるので、コピーが完了した生存オブジェクト１２１及び１２２とコピー完了していない生存オブジェクト１２３とが発生する。
【００４８】
図１２（ｂ）の状態において、アプリケーションからのアクセスが発生したとする。すると、図１２（ｃ）に示すように、生存オブジェクト１２１に対するアクセスについては、既に生存オブジェクト１２１のコピーが完了していることから、ＧＣハンドラはコピーを行わず参照ポインタを更新するので、アプリケーションの停止時間が長くなることを抑制する。生存オブジェクト１２３に対するアクセスについては、生存オブジェクト１２３のコピーが完了していないため、ＧＣハンドラがコピーを行った後に参照ポインタを更新する。これにより、不整合が発生することを防ぐことができる。
【００４９】
以上のように、本実施の形態によれば、ガーベジコレクションの対象ではないセグメントに対してアプリケーションがアクセスした場合にはアクセスが許可されるので、アプリケーションを停止することを回避できる。また、たとえガーベジコレクションの対象であるセグメントに対してアプリケーションがアクセスする場合であっても、アクセス先のオブジェクトのコピーが完了している場合には参照ポインタを更新してアプリケーションの処理を再開させるので、停止時間が短縮される。また、アクセス先のオブジェクトのコピーが完了していない場合にはガーベジコレクタによるコピーを待たずにコピーを完了させることができるので、停止時間が短縮される。
【００５０】
さらに、アクセスについての判定はハードウエアモジュールであるデータ保護部１０５によって行われるので、判定にかかる時間を短縮することができる。
【００５１】
図１３を用いて、アプリケーションの処理の停止時間の短縮について説明する。なお、図１３には参考としてＬＴＥ（Long Term Evolution）の通信速度と５Ｇ（5th Generation）の通信速度との比較及びＳＡＴＡ３（Serial ATA 3.0）のデータ転送速度とＳＡＳ３（Serial Attached SCSI 3.0）のデータ転送速度との比較が示されている。メモリのサイズが数ＧＢである場合には約１００ミリ秒でガーベジコレクションが終了し、メモリのサイズが１０ＧＢより大きい場合にはガーベジコレクションの終了までに１００００ミリ秒以上かかる。一方で、本実施の形態のガーベジコレクションによれば、メモリのサイズが１０ＧＢより大きくても１ミリ秒未満でガーベジコレクションを終了させることができる。
【００５２】
以上本発明の一実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上で説明した情報処理装置１のブロック構成は実際のプログラムモジュール構成に一致しない場合もある。
【００５３】
また、上で説明したデータ保持構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
【００５４】
また、データ保護部１０５の機能を、ソフトウエアによって実装してもよい。すなわち、演算ユニット１０４に命令を実行させることでデータ保護部１０５の機能を実現してもよい。
【００５５】
以上述べた本発明の実施の形態をまとめると、以下のようになる。
【００５６】
本実施の形態の第１の態様に係るメモリ管理方法は、（Ａ）メモリの領域に含まれ且つソフトウエア（例えば実施の形態におけるアプリケーション）に割り当てられた第１の領域におけるデータ（例えば実施の形態におけるオブジェクト）のうちソフトウエアのプロセスにアクセスされないデータ以外のデータをメモリの領域のうち第２の領域に移動するデータ移動処理の開始から終了までの間に、第１の領域内の第１のアドレスにおけるデータをアクセス先とするリクエストをソフトウエアのプロセスから受信した場合、第１のアドレスにおけるデータの移動先である第２の領域内の第２のアドレス（例えば実施の形態におけるコピー先のアドレス）を、メモリの領域のうち第１の領域内のデータの移動先のアドレスを格納する領域から特定し、（Ｂ）リクエストのアクセス先を、第１のアドレスから第２のアドレスに変更する処理を含む。
【００５７】
データ移動処理の実行中にデータ移動処理の対象の領域に対してソフトウエアのプロセスからのアクセスが発生した場合においても、第２のアドレスにおけるデータにアクセスさせることができるようになる。すなわち、不整合が発生することを防止すると共に、ソフトウエアのプロセスの処理の停止時間を短縮することができるようになる。
【００５８】
また、本メモリ管理方法は、（Ｃ）第１のアドレスにおけるデータが第２のアドレスにコピーされたか判定する処理をさらに含んでもよい。そして、リクエストのアクセス先を第１のアドレスから第２のアドレスに変更する処理において、（ｂ１）第１のアドレスにおけるデータが第２のアドレスにコピーされたと判定された場合、第１のアドレスを含む参照ポインタを、第２のアドレスで更新してもよい。第２のアドレスにデータがコピーされていることを担保できるようになる。
【００５９】
また、本メモリ管理方法は、（Ｄ）第１のアドレスにおけるデータが第２のアドレスにコピーされていないと判定された場合、第１のアドレスにおけるデータを第２のアドレスにコピーする処理をさらに含んでもよい。そして、リクエストのアクセス先を第１のアドレスから第２のアドレスに変更する処理において、（ｂ２）第１のアドレスにおけるデータが第２のアドレスにコピーする処理を完了した場合、第１のアドレスを含む参照ポインタを、第２のアドレスで更新してもよい。第２のアドレスにデータが格納されていない場合にはコピーしたうえでソフトウエアのプロセスによるアクセスを再開させることができるので、停止時間を短縮することができるようになる。
【００６０】
第２のアドレスを特定する処理において、（ａ１）リクエストに含まれ且つアクセス元を示す情報と、メモリに設定され且つ第１の領域がデータ移動処理の対象であるか否かを示す情報とに基づき、データ移動処理の開始から終了までの間にリクエストをソフトウエアのプロセスから受信したか判定してもよい。これにより、検知すべきリクエストをもれなく検知できるようになる。
【００６１】
また、本メモリ管理方法は、（Ｅ）メモリの各領域について、当該領域がデータ移動処理の対象であるか否かを示す情報をメモリに設定する処理をさらに含んでもよい。
【００６２】
本実施の形態の第２の態様に係るメモリ管理装置は、（Ｆ）メモリ（例えばメモリ１１）と、（Ｇ）メモリの領域に含まれ且つソフトウエアに割り当てられた第１の領域におけるデータのうちソフトウエアのプロセスにアクセスされないデータ以外のデータをメモリの領域のうち第２の領域に移動するデータ移動処理の開始から終了までの間に、第１の領域内の第１のアドレスにおけるデータをアクセス先とするリクエストをソフトウエアのプロセスから受信した場合、第１のアドレスにおけるデータの移動先である第２の領域内の第２のアドレスを、メモリの領域のうち第１の領域内のデータの移動先のアドレスを格納する領域から特定する特定部（例えば第１処理部１１０１）と、（Ｈ）リクエストのアクセス先を、第１のアドレスから第２のアドレスに変更する変更部（例えば第２処理部１１０２）とを有する。
【００６３】
なお、上記方法による処理をプロセッサに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【００６４】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００６５】
（付記１）
プロセッサに、
メモリの領域に含まれ且つソフトウエアに割り当てられた第１の領域におけるデータのうち前記ソフトウエアのプロセスにアクセスされないデータ以外のデータを前記メモリの領域のうち第２の領域に移動するデータ移動処理の開始から終了までの間に、前記第１の領域内の第１のアドレスにおけるデータをアクセス先とするリクエストを前記ソフトウエアのプロセスから受信した場合、前記第１のアドレスにおけるデータの移動先である前記第２の領域内の第２のアドレスを、前記メモリの領域のうち前記第１の領域内のデータの移動先のアドレスを格納する領域から特定し、
前記リクエストのアクセス先を、前記第１のアドレスから前記第２のアドレスに変更する、
処理を実行させるメモリ管理プログラム。
【００６６】
（付記２）
前記第１のアドレスにおけるデータが前記第２のアドレスにコピーされたか判定する、
処理を前記プロセッサにさらに実行させ、
前記リクエストのアクセス先を前記第１のアドレスから前記第２のアドレスに変更する処理において、
前記第１のアドレスにおけるデータが前記第２のアドレスにコピーされたと判定された場合、前記第１のアドレスを含む参照ポインタを前記第２のアドレスで更新する、
付記１記載のメモリ管理プログラム。
【００６７】
（付記３）
前記第１のアドレスにおけるデータが前記第２のアドレスにコピーされていないと判定された場合、前記第１のアドレスにおけるデータを前記第２のアドレスにコピーする、
処理を前記プロセッサにさらに実行させ、
前記リクエストのアクセス先を前記第１のアドレスから前記第２のアドレスに変更する処理において、
前記第１のアドレスにおけるデータを前記第２のアドレスにコピーする処理を完了した場合、前記参照ポインタを前記第２のアドレスで更新する、
付記２記載のメモリ管理プログラム。
【００６８】
（付記４）
前記第２のアドレスを特定する処理において、
前記リクエストに含まれ且つアクセス元を示す情報と、前記メモリに設定され且つ前記第１の領域が前記データ移動処理の対象であるか否かを示す情報とに基づき、前記データ移動処理の開始から終了までの間に前記リクエストを前記ソフトウエアのプロセスから受信したか判定する、
付記１乃至３のいずれか１つ記載のメモリ管理プログラム。
【００６９】
（付記５）
前記メモリの各領域について、当該領域が前記データ移動処理の対象であるか否かを示す情報を前記メモリに設定する、
処理を前記プロセッサにさらに実行させる付記４記載のメモリ管理プログラム。
【００７０】
（付記６）
プロセッサが、
メモリの領域に含まれ且つソフトウエアに割り当てられた第１の領域におけるデータのうち前記ソフトウエアのプロセスにアクセスされないデータ以外のデータを前記メモリの領域のうち第２の領域に移動するデータ移動処理の開始から終了までの間に、前記第１の領域内の第１のアドレスにおけるデータをアクセス先とするリクエストを前記ソフトウエアのプロセスから受信した場合、前記第１のアドレスにおけるデータの移動先である前記第２の領域内の第２のアドレスを、前記メモリの領域のうち前記第１の領域内のデータの移動先のアドレスを格納する領域から特定し、
前記リクエストのアクセス先を、前記第１のアドレスから前記第２のアドレスに変更する、
処理を実行するメモリ管理方法。
【００７１】
（付記７）
メモリと、
前記メモリの領域に含まれ且つソフトウエアに割り当てられた第１の領域におけるデータのうち前記ソフトウエアのプロセスにアクセスされないデータ以外のデータを前記メモリの領域のうち第２の領域に移動するデータ移動処理の開始から終了までの間に、前記第１の領域内の第１のアドレスにおけるデータをアクセス先とするリクエストを前記ソフトウエアのプロセスから受信した場合、前記第１のアドレスにおけるデータの移動先である前記第２の領域内の第２のアドレスを、前記メモリの領域のうち前記第１の領域内のデータの移動先のアドレスを格納する領域から特定する特定部と、
前記リクエストのアクセス先を、前記第１のアドレスから前記第２のアドレスに変更する変更部と、
を有するメモリ管理装置。
【００７２】
（付記８）
プロセッサが、
メモリに格納されたデータに対するアクセスの命令から、アクセス元を特定するための第１の情報を取得し、
前記データが格納された領域がガーベジコレクションの対象であるか否かを表す第２の情報を、前記メモリから取得し、
取得した前記第１の情報と前記第２の情報とに基づき、特定のソフトウエアのプロセスからのアクセスであり且つ前記データが前記ガーベジコレクションの対象である領域に格納されているという第１の条件を前記アクセスが満たすか判定し、
前記アクセスが前記第１の条件を満たす場合、前記特定のソフトウエアのプロセスを停止し、
前記アクセスが前記第１の条件を満たさない場合、前記アクセスを許可する、
処理を実行するメモリ管理方法。
【００７３】
（付記９）
前記プロセッサが、
前記アクセスが前記第１の条件を満たす場合、前記ガーベジコレクションの実行プログラムのプロセスによって前記オブジェクトがコピー先にコピーされたか判定し、
前記ガーベジコレクションの実行プログラムのプロセスによって前記オブジェクトが前記コピー先にコピーされた場合、前記アクセスに使用される参照ポインタを前記コピー先のアドレスで更新し、前記特定のソフトウエアのプロセスの停止を解除する、
処理をさらに実行する付記８記載のメモリ管理方法。
【００７４】
（付記１０）
前記プロセッサが、
前記ガーベジコレクションの実行プログラムのプロセスによって前記オブジェクトが前記コピー先にコピーされていない場合、前記オブジェクトのコピーを実行し、前記アクセスに使用される参照ポインタを前記コピー先のアドレスで更新し、前記特定のソフトウエアのプロセスの停止を解除する、
処理をさらに実行する付記９記載のメモリ管理方法。
【符号の説明】
【００７５】
１  情報処理装置    １０  ＣＰＵ
１１  メモリ    １２  ＨＤＤ
１００  ＣＰＵコア    １０１  汎用レジスタ
１０２  ＡＳＩレジスタ    １０３  メモリ管理ユニット
１０３０  ＴＬＢ    １０４  演算ユニット
１０５  データ保護部    １０５１  データ管理部
１０５２  判定部
１１０１  第１処理部    １１０２  第２処理部
【図１】
2018010507.tif 000003
【図２】
2018010507.tif 000004
【図３】
2018010507.tif 000005
【図４】
2018010507.tif 000006
【図５Ａ】
2018010507.tif 000007
【図５Ｂ】
2018010507.tif 000008
【図６】
2018010507.tif 000009
【図７】
2018010507.tif 000010
【図８】
2018010507.tif 000011
【図９】
2018010507.tif 000012
【図１０】
2018010507.tif 000013
【図１１】
2018010507.tif 000014
【図１２】
2018010507.tif 000015
【図１３】
2018010507.tif 000016