(57)【要約】【課題】メモリ管理方法、メモリ管理装置、及びメモリ管理プログラムが記録されている記録媒体において、連続した利用可能領域を生成する処理を中断して、主プログラムが処理を行う。【解決手段】メモリ管理プログラムは、コンパクション処理中に、主プログラムがヒープ領域にデータを書込むとき、データの書込み先が、複製元オブジェクトの記録領域又は複製先オブジェクトの記録領域のいずれかであるかを判断し（Ｓ３１）、データの書込み先がいずれかであると判断したとき（Ｓ３２でＹＥＳ）、書込むデータを、複製元及び複製先オブジェクトの記録領域の両方に書込む（Ｓ３３）。そのため、コンパクション処理中に主プログラムが書込み処理を行っても複製元オブジェクトと複製先オブジェクトとのデータの整合性を保つことができる。【選択図】図１０
2008191952.tif 000002
【特許請求の範囲】
【請求項１】
メモリ中に、動的にデータを生成するプログラム（以下、主プログラム）の実行等に利用されるデータが記録されたデータ記録領域と、主プログラムが実行中に使用するデータ要素を含むデータ（以下、オブジェクト）を記録するためのヒープ領域とが設けられ、
主プログラムの実行が進むことにより不要となった前記ヒープ領域のオブジェクトを消去し、該ヒープ領域に利用可能な空き領域（以下、利用可能領域）を生成すると共に、該ヒープ領域に連続した利用可能領域を生成するために、該ヒープ領域に記録されているオブジェクトを移動させるメモリ管理方法において、
前記オブジェクトは、オブジェクトの複製先の位置又は複製元の位置を記録するための複製位置ポインタをさらに含み、
前記データ記録領域に、前記オブジェクトの位置を参照するオブジェクト位置ポインタが記録され、
前記ヒープ領域に連続した利用可能領域を生成する限定範囲を設定する範囲設定ステップと、
前記限定範囲内に含まれる複製元オブジェクトをこの限定範囲外の利用可能領域に複製先オブジェクトとして複製すると共に、該複製元オブジェクト及び該複製先オブジェクトの複製位置ポインタの参照先を互いのオブジェクトの位置に設定するオブジェクト複製ステップと、
前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記オブジェクト複製ステップにより複製された複製先オブジェクトの位置に更新する第１ポインタ更新ステップと、
前記限定範囲の領域を利用可能領域にする限定範囲利用可能化ステップと、
前記オブジェクト複製ステップを実行中に、前記主プログラムが前記ヒープ領域に記録されたオブジェクトの記録領域にデータの書込み処理を行うとき、又は書込み処理を行った後、データの書込み先の記録領域が、前記複製元オブジェクトの記録領域又は前記複製先オブジェクトの記録領域のいずれかであるかを判断する複製判断ステップと、
前記複製判断ステップにより書込み先が前記複製元オブジェクトの記録領域又は前記複製先オブジェクトの記録領域のいずれかであると判断されたとき、前記主プログラムが書込み処理を行うデータを、前記複製元オブジェクトの記録領域及び前記複製先オブジェクトの記録領域の両方に書込みを行う複製書込みステップと、を含むことを特徴とするメモリ管理方法。
【請求項２】
メモリ中に、動的にデータを生成するプログラム（以下、主プログラム）の実行等に利用されるデータが記録されたデータ記録領域と、主プログラムが実行中に使用するデータ要素を含むデータ（以下、オブジェクト）を記録するためのヒープ領域とが設けられ、
主プログラムの実行が進むことにより不要となった前記ヒープ領域のオブジェクトを消去し、該ヒープ領域に利用可能な空き領域（以下、利用可能領域）を生成すると共に、該ヒープ領域に連続した利用可能領域を生成するために、該ヒープ領域に記録されているオブジェクトを移動させるメモリ管理方法において、
前記データ記録領域に、前記オブジェクトの位置を参照するオブジェクト位置ポインタが記録され、
前記メモリ中に、オブジェクトの位置を記録するオブジェクト位置記録領域がさらに設けられ、
前記ヒープ領域に連続した利用可能領域を生成する限定範囲を設定する範囲設定ステップと、
前記限定範囲内に含まれる複製元オブジェクトをこの限定範囲外の利用可能領域に複製先オブジェクトとして複製すると共に、前記オブジェクト位置記録領域に、該複製元オブジェクトの位置及び該複製先オブジェクの位置を記録するオブジェクト複製ステップと、
前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記オブジェクト複製ステップにより複製された複製先オブジェクトの位置に更新する第１ポインタ更新ステップと、
前記限定範囲の領域を利用可能領域にする限定範囲利用可能化ステップと、
前記オブジェクト複製ステップを実行中に、前記主プログラムが前記ヒープ領域に記録されたオブジェクトの記録領域にデータの書込み処理を行うとき、又は書込み処理を行った後、データの書込み先の記録領域が、前記複製元オブジェクトの記録領域又は前記複製先オブジェクトの記録領域のいずれかであるかを判断する複製判断ステップと、
前記複製判断ステップにより書込み先が前記複製元オブジェクトの記録領域又は前記複製先オブジェクトの記録領域のいずれかであると判断されたとき、前記主プログラムが書込み処理を行うデータを、前記複製元オブジェクトの記録領域及び前記複製先オブジェクトの記録領域の両方に書込みを行う複製書込みステップと、を含むことを特徴とするメモリ管理方法。
【請求項３】
前記オブジェクトは、前記データ要素として前記オブジェクト位置ポインタをさらに含み、
前記複製元オブジェクトの位置を参照する前記ヒープ領域内のオブジェクト位置ポインタの参照先を、前記オブジェクト複製ステップにより複製された複製先オブジェクトの位置に更新する第２ポインタ更新ステップと、
前記第２ポインタ更新ステップを実行中に、前記主プログラムが前記ヒープ領域に前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの書込み処理を行うとき、又は書込み処理を行った後、該オブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に変更する参照先変更ステップと、
前記第２ポインタ更新ステップの実行中に、前記主プログラムが２つのオブジェクト位置ポインタの参照先が同じオブジェクトの位置であるかどうかの検査処理を行うとき、該２つのオブジェクト位置ポインタのうちの一方が前記複製元オブジェクトの位置を、他方が前記複製先オブジェクトの位置を参照している場合、同一のオブジェクトを参照していると判断する同一判断ステップと、をさらに備え、
前記複製判断ステップは、前記オブジェクト複製ステップ、又は前記第２ポインタ更新ステップを実行中に、前記主プログラムが前記ヒープ領域に記録されたオブジェクトの記録領域にデータの書込み処理を行うとき、又は書込み処理を行った後、データの書込み先の記録領域が、前記複製元オブジェクトの記録領域又は前記複製先オブジェクトの記録領域のいずれかであるかを判断することを特徴とする請求項１又は請求項２に記載のメモリ管理方法。
【請求項４】
前記データ記録領域中に、前記主プログラムが実行する関数の実行結果等を一時的に記録する関数フレームが積み上げられて配置されるスタック領域が設けられ、
前記スタック領域内の前記関数フレームを上位から下位に向かって走査し、この順に該スタック領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記オブジェクト複製ステップにより複製された複製先オブジェクトの位置に更新する第３ポインタ更新ステップと、
前記第３ポインタ更新ステップによるオブジェクト位置ポインタの更新処理を中断するときに、該第３ポインタ更新ステップによる処理が最後に行われた前記関数フレームに、関数の実行を制御する障壁を設定する障壁設定ステップと、をさらに備え、
前記第１ポインタ更新ステップは、前記スタック領域を除く前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新し、
前記障壁が、関数の実行完了後、前記第３ポインタ更新ステップによる処理を再開させることを特徴とする請求項１乃至請求項３のいずれかに記載のメモリ管理方法。
【請求項５】
前記ヒープ領域内に前記データ記録領域の一部又は全部を割当て、該ヒープ領域内の該データ記録領域外の領域を、請求項１乃至請求項３のいずれかに記載のヒープ領域とし、
前記範囲設定ステップは、前記ヒープ領域内の前記データ記録領域が割当てられた領域に対して限定範囲を設定することができ、
前記第１ポインタ更新ステップは、
前記限定範囲内の前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新すると共に、該限定範囲内の前記データ記録領域を、前記ヒープ領域内の利用可能領域に移動させ、
前記限定範囲外の前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新することを特徴とする請求項１乃至請求項３のいずれかに記載のメモリ管理方法。
【請求項６】
前記ヒープ領域内に、前記スタック領域を除く前記データ記録領域の一部又は全部を割当て、該ヒープ領域内の該データ記録領域外の領域を、請求項１乃至請求項３のいずれかに記載のヒープ領域とし、
前記範囲設定ステップは、前記ヒープ領域内の前記データ記録領域が割当てられた領域に対して限定範囲を設定することができ、
前記第１ポインタ更新ステップは、
前記限定範囲内の前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新すると共に、該限定範囲内の前記データ記録領域を、前記ヒープ領域内の利用可能領域に移動させ、
前記限定範囲及び前記スタック領域を除く前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新することを特徴とする請求項４に記載のメモリ管理方法。
【請求項７】
前記ヒープ領域内に、前記スタック領域を含む前記データ記録領域の一部又は全部を割当て、該ヒープ領域内の該データ記録領域外の領域を、請求項１乃至請求項３のいずれかに記載のヒープ領域とし、
前記範囲設定ステップは、前記ヒープ領域内の前記データ記録領域が割当てられた領域に対して限定範囲を設定することができ、
前記第１ポインタ更新ステップは、
前記限定範囲内の前記スタック領域を除く前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新すると共に、該限定範囲内に割当てられた、前記スタック領域を除く該データ記録領域を、前記ヒープ領域内の利用可能領域に移動させ、
前記限定範囲外の前記スタック領域を除く前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新し、
前記第３ポインタ更新ステップは、
前記ヒープ領域内に割当てられた前記スタック領域内の前記関数フレームを上位から下位に向かって走査し、前記限定範囲内の前記関数フレームに記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新すると共に、該限定範囲内の該関数フレームを、該ヒープ領域内の利用可能領域に移動させ、
前記限定範囲外の前記関数フレームに記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新し、
前記障壁設定ステップは、前記第３ポインタ更新処理による処理を中断して、前記主プログラムを実行するときに、前記障壁を、該第３ポインタ更新処理による処理が最後に行われた前記関数フレームに設定することを特徴とする請求項４に記載のメモリ管理方法。
【請求項８】
メモリ中に、動的にデータを生成するプログラム（以下、主プログラム）の実行等に利用されるデータが記録されたデータ記録領域と、主プログラムが実行中に使用するデータ要素を含むデータ（以下、オブジェクト）を記録するためのヒープ領域とが設けられ、
主プログラムの実行が進むことにより不要となった前記ヒープ領域のオブジェクトを消去し、該ヒープ領域に利用可能な空き領域（以下、利用可能領域）を生成すると共に、該ヒープ領域に連続した利用可能領域を生成するために、該ヒープ領域に記録されているオブジェクトを移動させるメモリ管理装置において、
前記オブジェクトは、オブジェクトの複製先の位置又は複製元の位置を記録するための複製位置ポインタをさらに含み、
前記データ記録領域に、前記オブジェクトの位置を参照するオブジェクト位置ポインタが記録され、
前記ヒープ領域に連続した利用可能領域を生成する限定範囲を設定する範囲設定手段と、
前記限定範囲内に含まれる複製元オブジェクトをこの限定範囲外の利用可能領域に複製先オブジェクトとして複製すると共に、該複製元オブジェクト及び該複製先オブジェクトの複製位置ポインタの参照先を互いのオブジェクトの位置に設定するオブジェクト複製手段と、
前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記オブジェクト複製手段により複製された複製先オブジェクトの位置に更新する第１ポインタ更新手段と、
前記限定範囲の領域を利用可能領域にする限定範囲利用可能化手段と、
前記オブジェクト複製手段を実行中に、前記主プログラムが前記ヒープ領域に記録されたオブジェクトの記録領域にデータの書込み処理を行うとき、又は書込み処理を行った後、データの書込み先の記録領域が、前記複製元オブジェクトの記録領域又は前記複製先オブジェクトの記録領域のいずれかであるかを判断する複製判断手段と、
前記複製判断手段により書込み先が前記複製元オブジェクトの記録領域又は前記複製先オブジェクトの記録領域のいずれかであると判断されたとき、前記主プログラムが書込み処理を行うデータを、前記複製元オブジェクトの記録領域及び前記複製先オブジェクトの記録領域の両方に書込みを行う複製書込み手段と、を備えることを特徴とするメモリ管理装置。
【請求項９】
メモリ中に、動的にデータを生成するプログラム（以下、主プログラム）の実行等に利用されるデータが記録されたデータ記録領域と、主プログラムが実行中に使用するデータ要素を含むデータ（以下、オブジェクト）を記録するためのヒープ領域とが設けられ、
主プログラムの実行が進むことにより不要となった前記ヒープ領域のオブジェクトを消去し、該ヒープ領域に利用可能な空き領域（以下、利用可能領域）を生成すると共に、該ヒープ領域に連続した利用可能領域を生成するために、該ヒープ領域に記録されているオブジェクトを移動させるメモリ管理装置において、
前記データ記録領域に、前記オブジェクトの位置を参照するオブジェクト位置ポインタが記録され、
前記メモリ中に、オブジェクトの位置を記録するオブジェクト位置記録領域がさらに設けられ、
前記ヒープ領域に連続した利用可能領域を生成する限定範囲を設定する範囲設定手段と、
前記限定範囲内に含まれる複製元オブジェクトをこの限定範囲外の利用可能領域に複製先オブジェクトとして複製すると共に、前記オブジェクト位置記録領域に、該複製元オブジェクトの位置及び該複製先オブジェクの位置を記録するオブジェクト複製手段と、
前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記オブジェクト複製手段により複製された複製先オブジェクトの位置に更新する第１ポインタ更新手段と、
前記限定範囲の領域を利用可能領域にする限定範囲利用可能化手段と、
前記オブジェクト複製手段を実行中に、前記主プログラムが前記ヒープ領域に記録されたオブジェクトの記録領域にデータの書込み処理を行うとき、又は書込み処理を行った後、データの書込み先の記録領域が、前記複製元オブジェクトの記録領域又は前記複製先オブジェクトの記録領域のいずれかであるかを判断する複製判断手段と、
前記複製判断手段により書込み先が前記複製元オブジェクトの記録領域又は前記複製先オブジェクトの記録領域のいずれかであると判断されたとき、前記主プログラムが書込み処理を行うデータを、前記複製元オブジェクトの記録領域及び前記複製先オブジェクトの記録領域の両方に書込みを行う複製書込み手段と、を備えることを特徴とするメモリ管理装置。
【請求項１０】
前記オブジェクトは、前記データ要素として前記オブジェクト位置ポインタをさらに含み、
前記複製元オブジェクトの位置を参照する前記ヒープ領域内のオブジェクト位置ポインタの参照先を、前記オブジェクト複製手段により複製された複製先オブジェクトの位置に更新する第２ポインタ更新手段と、
前記第２ポインタ更新手段を実行中に、前記主プログラムが前記ヒープ領域に前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの書込み処理を行うとき、又は書込み処理を行った後、該オブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に変更する参照先変更手段と、
前記第２ポインタ更新手段の実行中に、前記主プログラムが２つのオブジェクト位置ポインタの参照先が同じオブジェクトの位置であるかどうかの検査処理を行うとき、該２つのオブジェクト位置ポインタのうちの一方が前記複製元オブジェクトの位置を、他方が前記複製先オブジェクトの位置を参照している場合、同一のオブジェクトを参照していると判断する同一判断手段と、をさらに備え、
前記複製判断手段は、前記オブジェクト複製手段、又は前記第２ポインタ更新手段を実行中に、前記主プログラムが前記ヒープ領域に記録されたオブジェクトの記録領域にデータの書込み処理を行うとき、又は書込み処理を行った後、データの書込み先の記録領域が、前記複製元オブジェクトの記録領域又は前記複製先オブジェクトの記録領域のいずれかであるかを判断することを特徴とする請求項８又は請求項９に記載のメモリ管理装置。
【請求項１１】
前記データ記録領域中に、前記主プログラムが実行する関数の実行結果等を一時的に記録する関数フレームが積み上げられて配置されるスタック領域が設けられ、
前記スタック領域内の前記関数フレームを上位から下位に向かって走査し、この順に該スタック領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記オブジェクト複製手段により複製された複製先オブジェクトの位置に更新する第３ポインタ更新手段と、
前記第３ポインタ更新手段によるオブジェクト位置ポインタの更新処理を中断するときに、該第３ポインタ更新手段による処理が最後に行われた前記関数フレームに、関数の実行を制御する障壁を設定する障壁設定手段と、をさらに備え、
前記第１ポインタ更新手段は、前記スタック領域を除く前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新し、
前記障壁が、関数の実行完了後、前記第３ポインタ更新手段による処理を再開させることを特徴とする請求項８乃至請求項１０のいずれかに記載のメモリ管理装置。
【請求項１２】
前記ヒープ領域内に前記データ記録領域の一部又は全部を割当て、該ヒープ領域内の該データ記録領域外の領域を、請求項８乃至請求項１０のいずれかに記載のヒープ領域とし、
前記範囲設定手段は、前記ヒープ領域内の前記データ記録領域が割当てられた領域に対して限定範囲を設定することができ、
前記第１ポインタ更新手段は、
前記限定範囲内の前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新すると共に、該限定範囲内の前記データ記録領域を、前記ヒープ領域内の利用可能領域に移動させ、
前記限定範囲外の前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新することを特徴とする請求項８乃至請求項１０のいずれかに記載のメモリ管理装置。
【請求項１３】
前記ヒープ領域内に、前記スタック領域を除く前記データ記録領域の一部又は全部を割当て、該ヒープ領域内の該データ記録領域外の領域を、請求項８乃至請求項１０のいずれかに記載のヒープ領域とし、
前記範囲設定手段は、前記ヒープ領域内の前記データ記録領域が割当てられた領域に対して限定範囲を設定することができ、
前記第１ポインタ更新手段は、
前記限定範囲内の前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新すると共に、該限定範囲内の前記データ記録領域を、前記ヒープ領域内の利用可能領域に移動させ、
前記限定範囲及び前記スタック領域を除く前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新することを特徴とする請求項１１に記載のメモリ管理装置。
【請求項１４】
前記ヒープ領域内に、前記スタック領域を含む前記データ記録領域の一部又は全部を割当て、該ヒープ領域内の該データ記録領域外の領域を、請求項８乃至請求項１０のいずれかに記載のヒープ領域とし、
前記範囲設定手段は、前記ヒープ領域内の前記データ記録領域が割当てられた領域に対して限定範囲を設定することができ、
前記第１ポインタ更新手段は、
前記限定範囲内の前記スタック領域を除く前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新すると共に、該限定範囲内に割当てられた、前記スタック領域を除く該データ記録領域を、前記ヒープ領域内の利用可能領域に移動させ、
前記限定範囲外の前記スタック領域を除く前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新し、
前記第３ポインタ更新手段は、
前記ヒープ領域内に割当てられた前記スタック領域内の前記関数フレームを上位から下位に向かって走査し、前記限定範囲内の前記関数フレームに記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新すると共に、該限定範囲内の該関数フレームを、該ヒープ領域内の利用可能領域に移動させ、
前記限定範囲外の前記関数フレームに記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新し、
前記障壁設定手段は、前記第３ポインタ更新処理による処理を中断して、前記主プログラムを実行するときに、前記障壁を、該第３ポインタ更新処理による処理が最後に行われた前記関数フレームに設定することを特徴とする請求項１１に記載のメモリ管理装置。
【請求項１５】
請求項１乃至請求項７のいずれか一項に記載のメモリ管理方法をコンピュータに実行させるためのメモリ管理プログラムが記録されているコンピュータ読取可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ管理方法、メモリ管理装置、及びメモリ管理プログラムが記録されている記録媒体に関する。
【背景技術】
【０００２】
Ｊａｖａ（登録商標）言語等の動的にデータを生成するプログラミング言語を用いて作成されたプログラム（以下、主プログラム）は、生成したデータを動的にメモリ領域に記録するので、主プログラムの実行が進むことにより不要となったメモリ領域のデータを消去しなければ主プログラムが利用可能な空き領域（以下、利用可能領域という）が不足してしまう。そのため、従来から、メモリ領域内の不要なデータを消去し、メモリ領域を再利用する方法が知られている。
【０００３】
メモリ領域内の不要なデータを消去し、その領域を再利用できるようにする処理はガーベッジコレクション（以下、ＧＣ）と呼ばれる。ＧＣ処理によって再利用可能となった利用可能領域を一箇所に集めて連続した領域にする処理はコンパクションと呼ばれる。メモリ領域を再利用できるようにするこれら一連の処理は、主プログラムを実行する場合に不可欠な処理である。主プログラムが実時間性を必要とする処理を実行する場合、ＧＣ処理及びコンパクション処理は、主プログラムの処理と実質的に並行して実行される必要がある。
【０００４】
コンパクション処理は、利用可能領域を一箇所に集めるために、メモリ領域内の必要なデータを移動させた後、移動元データの位置を参照するポインタの参照先を、移動先データの位置に更新する処理を行う。コンパクション処理がデータを移動した後、ポインタの参照先を更新する前に、主プログラムが移動元データを参照したとき、ここにデータが存在しないため、主プログラムが処理異常を発生する。そのため、移動元データの位置を参照する全てのポインタの参照先が、移動先データの位置に更新されるまで、コンパクション処理を中断させることができない。その結果、主プログラムの実時間性が損なわれる。
【０００５】
ＧＣ処理は、本発明者の一人により特許第３５３０８８７号に提案された発明によって、主プログラムの実時間性を損なわずに行うことができる。しかし、この発明は、連続した利用可能領域を生成するコンパクション処理を中断することができず、コンパクション処理が終了するまで主プログラムが処理を行うことができない。
【０００６】
ところで、従来から、小型機器である携帯電話等には、組込み用Ｊａｖａ（登録商標）処理系としてＫＶＭ（Ｋ  ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ）が多く使われている。ＫＶＭには、上述したＧＣ処理及びコンパクション処理を行うプログラム（以下、メモリ管理プログラム）が採用されており、このプログラムは、通常、メモリ領域内の利用可能領域が不足してきたときに、自動的に実行される。その結果、メモリ管理プログラムの処理を中断させることができないので、主プログラムの実行が数ミリ秒〜数秒の間中断させられることがある。
【０００７】
これに対して、従来の携帯電話は、主プログラムが実時間性を必要とする処理、例えば、なめらかな動作が必要なアニメーションやゲームのキャラクタを画面上で動かす処理などを行う場合、主プログラムの実行中にメモリ管理プログラムが自動的に実行されないように、実時間性を必要とする処理を行う直前に、強制的にメモリ管理プログラムを実行させるものがある。これにより、利用可能領域のサイズが大きくなり、しばらくの間はメモリ管理プログラムを実行する必要がないので、主プログラムは、実時間性を損なわずに処理を行うことができる。
【０００８】
しかし、実時間性を必要とする処理の内容の違いや、携帯電話の機種によるメモリ領域のサイズや主プログラムを処理する実行処理速度の違いにより、強制的にメモリ管理プログラムを実行させるタイミングが異なることがある。そのため、開発者は、これらの違いを考慮して、メモリ管理プログラムを強制的に実行させるタイミングを設定しなければならず、開発に手間がかかり、開発効率が低下するという問題がある。
【０００９】
ところで、非特許文献１には、ＧＣ処理後のメモリ領域全体に対して、例えば１６分割したメモリ領域のうちの１つの領域を限定領域とし、この限定領域内のデータを、限定領域外のメモリ領域に一括して移動させた後、限定領域内のデータを参照するポインタの参照先を一括して更新するコンパクション処理が開示されている。しかし、このコンパクション処理では、データを移動した後に移動元を参照する全てのポインタの参照先を更新するまでの処理を一括して実行する必要があるので、コンパクション処理を中断して主プログラムの処理を行うことができない。そのため、主プログラムの実時間性が損なわれてしまう。
【００１０】
また、非特許文献２には、メモリ領域を任意の数に分割し、このうちの１つをデータ移動先領域として設定した後、主プログラムがデータ移動先領域を除くメモリ領域にデータを記録する。そして、データ移動先領域を除くメモリ領域のうちの１つをデータ移動元領域とし、このデータ移動元領域のデータをデータ移動先領域に移動させることにより連続した利用可能領域を生成する処理が開示されている。しかし、この処理も、非特許文献１と同様に、コンパクション処理を中断して主プログラムを実行することができないので、主プログラムの実時間性が損なわれてしまう。また、この処理では、主プログラムがメモリ領域にデータが記録する前に、データ移動先領域を設定しなければならないので、メモリ領域に記録されるデータの記録状態等を加味した後に、データ移動先領域を設定することができず、効率良く利用可能領域を生成することができない。
【００１１】
ところで、一般的に、主プログラムがメモリ領域からデータを読出す回数は、主プログラムがメモリ領域にデータを書込む回数よりもはるかに多い。そのため、データの読出し処理に特別な処理を追加すると、データの読出し時にオーバヘッドが掛かり、主プログラムの処理の実行効率が悪くなることがある。上述した非特許文献２の処理において、各データの先頭に最新のデータの位置を指すフォワーディングポインタを付加し、主プログラムがデータ要素を読み出すとき、フォワーディングポインタを辿って最新のデータの位置からデータ要素を読み出す方法が知られている。しかし、この処理でも、データの読出し時にオーバヘッドが掛かり、主プログラムの処理の実行効率が悪くなることがある。
【非特許文献１】Parallel Incremental Compaction  (US 2004/0128329 A1)
【非特許文献２】Incremental Incrementally Compacting Garbage Collection(SIGPLAN Notice 22(7) pp.253-263)
【発明の開示】
【発明が解決しようとする課題】
【００１２】
本発明は、上述した問題点を解決するためになされたものであり、連続した利用可能領域を生成する処理を中断して、主プログラムが処理を行うことができるメモリ管理方法、メモリ管理装置、及びメモリ管理プログラムが記録されている記録媒体を提供することを目的とする。
【課題を解決するための手段】
【００１３】
上記目的を達成するために請求項１の発明は、メモリ中に、動的にデータを生成するプログラム（以下、主プログラム）の実行等に利用されるデータが記録されたデータ記録領域と、主プログラムが実行中に使用するデータ要素を含むデータ（以下、オブジェクト）を記録するためのヒープ領域とが設けられ、主プログラムの実行が進むことにより不要となった前記ヒープ領域のオブジェクトを消去し、該ヒープ領域に利用可能な空き領域（以下、利用可能領域）を生成すると共に、該ヒープ領域に連続した利用可能領域を生成するために、該ヒープ領域に記録されているオブジェクトを移動させるメモリ管理方法において、前記オブジェクトは、オブジェクトの複製先の位置又は複製元の位置を記録するための複製位置ポインタをさらに含み、前記データ記録領域に、前記オブジェクトの位置を参照するオブジェクト位置ポインタが記録され、前記ヒープ領域に連続した利用可能領域を生成する限定範囲を設定する範囲設定ステップと、前記限定範囲内に含まれる複製元オブジェクトをこの限定範囲外の利用可能領域に複製先オブジェクトとして複製すると共に、該複製元オブジェクト及び該複製先オブジェクトの複製位置ポインタの参照先を互いのオブジェクトの位置に設定するオブジェクト複製ステップと、前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記オブジェクト複製ステップにより複製された複製先オブジェクトの位置に更新する第１ポインタ更新ステップと、前記限定範囲の領域を利用可能領域にする限定範囲利用可能化ステップと、前記オブジェクト複製ステップを実行中に、前記主プログラムが前記ヒープ領域に記録されたオブジェクトの記録領域にデータの書込み処理を行うとき、又は書込み処理を行った後、データの書込み先の記録領域が、前記複製元オブジェクトの記録領域又は前記複製先オブジェクトの記録領域のいずれかであるかを判断する複製判断ステップと、前記複製判断ステップにより書込み先が前記複製元オブジェクトの記録領域又は前記複製先オブジェクトの記録領域のいずれかであると判断されたとき、前記主プログラムが書込み処理を行うデータを、前記複製元オブジェクトの記録領域及び前記複製先オブジェクトの記録領域の両方に書込みを行う複製書込みステップと、を含むものである。
【００１４】
請求項２の発明は、メモリ中に、動的にデータを生成するプログラム（以下、主プログラム）の実行等に利用されるデータが記録されたデータ記録領域と、主プログラムが実行中に使用するデータ要素を含むデータ（以下、オブジェクト）を記録するためのヒープ領域とが設けられ、主プログラムの実行が進むことにより不要となった前記ヒープ領域のオブジェクトを消去し、該ヒープ領域に利用可能な空き領域（以下、利用可能領域）を生成すると共に、該ヒープ領域に連続した利用可能領域を生成するために、該ヒープ領域に記録されているオブジェクトを移動させるメモリ管理方法において、前記データ記録領域に、前記オブジェクトの位置を参照するオブジェクト位置ポインタが記録され、前記メモリ中に、オブジェクトの位置を記録するオブジェクト位置記録領域がさらに設けられ、前記ヒープ領域に連続した利用可能領域を生成する限定範囲を設定する範囲設定ステップと、前記限定範囲内に含まれる複製元オブジェクトをこの限定範囲外の利用可能領域に複製先オブジェクトとして複製すると共に、前記オブジェクト位置記録領域に、該複製元オブジェクトの位置及び該複製先オブジェクの位置を記録するオブジェクト複製ステップと、前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記オブジェクト複製ステップにより複製された複製先オブジェクトの位置に更新する第１ポインタ更新ステップと、前記限定範囲の領域を利用可能領域にする限定範囲利用可能化ステップと、前記オブジェクト複製ステップを実行中に、前記主プログラムが前記ヒープ領域に記録されたオブジェクトの記録領域にデータの書込み処理を行うとき、又は書込み処理を行った後、データの書込み先の記録領域が、前記複製元オブジェクトの記録領域又は前記複製先オブジェクトの記録領域のいずれかであるかを判断する複製判断ステップと、前記複製判断ステップにより書込み先が前記複製元オブジェクトの記録領域又は前記複製先オブジェクトの記録領域のいずれかであると判断されたとき、前記主プログラムが書込み処理を行うデータを、前記複製元オブジェクトの記録領域及び前記複製先オブジェクトの記録領域の両方に書込みを行う複製書込みステップと、を含むものである。
【００１５】
請求項３の発明は、請求項１又は請求項２に記載のメモリ管理方法において、前記オブジェクトは、前記データ要素として前記オブジェクト位置ポインタをさらに含み、前記複製元オブジェクトの位置を参照する前記ヒープ領域内のオブジェクト位置ポインタの参照先を、前記オブジェクト複製ステップにより複製された複製先オブジェクトの位置に更新する第２ポインタ更新ステップと、前記第２ポインタ更新ステップを実行中に、前記主プログラムが前記ヒープ領域に前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの書込み処理を行うとき、又は書込み処理を行った後、該オブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に変更する参照先変更ステップと、前記第２ポインタ更新ステップの実行中に、前記主プログラムが２つのオブジェクト位置ポインタの参照先が同じオブジェクトの位置であるかどうかの検査処理を行うとき、該２つのオブジェクト位置ポインタのうちの一方が前記複製元オブジェクトの位置を、他方が前記複製先オブジェクトの位置を参照している場合、同一のオブジェクトを参照していると判断する同一判断ステップと、をさらに備え、前記複製判断ステップは、前記オブジェクト複製ステップ、又は前記第２ポインタ更新ステップを実行中に、前記主プログラムが前記ヒープ領域に記録されたオブジェクトの記録領域にデータの書込み処理を行うとき、又は書込み処理を行った後、データの書込み先の記録領域が、前記複製元オブジェクトの記録領域又は前記複製先オブジェクトの記録領域のいずれかであるかを判断するものである。
【００１６】
請求項４の発明は、請求項１乃至請求項３のいずれかに記載のメモリ管理方法において、前記データ記録領域中に、前記主プログラムが実行する関数の実行結果等を一時的に記録する関数フレームが積み上げられて配置されるスタック領域が設けられ、前記スタック領域内の前記関数フレームを上位から下位に向かって走査し、この順に該スタック領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記オブジェクト複製ステップにより複製された複製先オブジェクトの位置に更新する第３ポインタ更新ステップと、前記第３ポインタ更新ステップによるオブジェクト位置ポインタの更新処理を中断するときに、該第３ポインタ更新ステップによる処理が最後に行われた前記関数フレームに、関数の実行を制御する障壁を設定する障壁設定ステップと、をさらに備え、前記第１ポインタ更新ステップは、前記スタック領域を除く前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新し、前記障壁が、関数の実行完了後、前記第３ポインタ更新ステップによる処理を再開させるものである。
【００１７】
請求項５の発明は、請求項１乃至請求項３のいずれかに記載のメモリ管理方法において、前記ヒープ領域内に前記データ記録領域の一部又は全部を割当て、該ヒープ領域内の該データ記録領域外の領域を、請求項１乃至請求項３のいずれかに記載のヒープ領域とし、前記範囲設定ステップは、前記ヒープ領域内の前記データ記録領域が割当てられた領域に対して限定範囲を設定することができ、前記第１ポインタ更新ステップは、前記限定範囲内の前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新すると共に、該限定範囲内の前記データ記録領域を、前記ヒープ領域内の利用可能領域に移動させ、前記限定範囲外の前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新するものである。
【００１８】
請求項６の発明は、請求項４に記載のメモリ管理方法において、前記ヒープ領域内に、前記スタック領域を除く前記データ記録領域の一部又は全部を割当て、該ヒープ領域内の該データ記録領域外の領域を、請求項１乃至請求項３のいずれかに記載のヒープ領域とし、前記範囲設定ステップは、前記ヒープ領域内の前記データ記録領域が割当てられた領域に対して限定範囲を設定することができ、前記第１ポインタ更新ステップは、前記限定範囲内の前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新すると共に、該限定範囲内の前記データ記録領域を、前記ヒープ領域内の利用可能領域に移動させ、前記限定範囲及び前記スタック領域を除く前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新するものである。
【００１９】
請求項７の発明は、請求項４に記載のメモリ管理方法において、前記ヒープ領域内に、前記スタック領域を含む前記データ記録領域の一部又は全部を割当て、該ヒープ領域内の該データ記録領域外の領域を、請求項１乃至請求項３のいずれかに記載のヒープ領域とし、前記範囲設定ステップは、前記ヒープ領域内の前記データ記録領域が割当てられた領域に対して限定範囲を設定することができ、前記第１ポインタ更新ステップは、前記限定範囲内の前記スタック領域を除く前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新すると共に、該限定範囲内に割当てられた、前記スタック領域を除く該データ記録領域を、前記ヒープ領域内の利用可能領域に移動させ、前記限定範囲外の前記スタック領域を除く前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新し、前記第３ポインタ更新ステップは、前記ヒープ領域内に割当てられた前記スタック領域内の前記関数フレームを上位から下位に向かって走査し、前記限定範囲内の前記関数フレームに記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新すると共に、該限定範囲内の該関数フレームを、該ヒープ領域内の利用可能領域に移動させ、前記限定範囲外の前記関数フレームに記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新し、前記障壁設定ステップは、前記第３ポインタ更新処理による処理を中断して、前記主プログラムを実行するときに、前記障壁を、該第３ポインタ更新処理による処理が最後に行われた前記関数フレームに設定するものである。
【００２０】
請求項８の発明は、メモリ中に、動的にデータを生成するプログラム（以下、主プログラム）の実行等に利用されるデータが記録されたデータ記録領域と、主プログラムが実行中に使用するデータ要素を含むデータ（以下、オブジェクト）を記録するためのヒープ領域とが設けられ、主プログラムの実行が進むことにより不要となった前記ヒープ領域のオブジェクトを消去し、該ヒープ領域に利用可能な空き領域（以下、利用可能領域）を生成すると共に、該ヒープ領域に連続した利用可能領域を生成するために、該ヒープ領域に記録されているオブジェクトを移動させるメモリ管理装置において、前記オブジェクトは、オブジェクトの複製先の位置又は複製元の位置を記録するための複製位置ポインタをさらに含み、前記データ記録領域に、前記オブジェクトの位置を参照するオブジェクト位置ポインタが記録され、前記ヒープ領域に連続した利用可能領域を生成する限定範囲を設定する範囲設定手段と、前記限定範囲内に含まれる複製元オブジェクトをこの限定範囲外の利用可能領域に複製先オブジェクトとして複製すると共に、該複製元オブジェクト及び該複製先オブジェクトの複製位置ポインタの参照先を互いのオブジェクトの位置に設定するオブジェクト複製手段と、前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記オブジェクト複製手段により複製された複製先オブジェクトの位置に更新する第１ポインタ更新手段と、前記限定範囲の領域を利用可能領域にする限定範囲利用可能化手段と、前記オブジェクト複製手段を実行中に、前記主プログラムが前記ヒープ領域に記録されたオブジェクトの記録領域にデータの書込み処理を行うとき、又は書込み処理を行った後、データの書込み先の記録領域が、前記複製元オブジェクトの記録領域又は前記複製先オブジェクトの記録領域のいずれかであるかを判断する複製判断手段と、前記複製判断手段により書込み先が前記複製元オブジェクトの記録領域又は前記複製先オブジェクトの記録領域のいずれかであると判断されたとき、前記主プログラムが書込み処理を行うデータを、前記複製元オブジェクトの記録領域及び前記複製先オブジェクトの記録領域の両方に書込みを行う複製書込み手段と、を備えるものである。
【００２１】
請求項９の発明は、メモリ中に、動的にデータを生成するプログラム（以下、主プログラム）の実行等に利用されるデータが記録されたデータ記録領域と、主プログラムが実行中に使用するデータ要素を含むデータ（以下、オブジェクト）を記録するためのヒープ領域とが設けられ、主プログラムの実行が進むことにより不要となった前記ヒープ領域のオブジェクトを消去し、該ヒープ領域に利用可能な空き領域（以下、利用可能領域）を生成すると共に、該ヒープ領域に連続した利用可能領域を生成するために、該ヒープ領域に記録されているオブジェクトを移動させるメモリ管理装置において、前記データ記録領域に、前記オブジェクトの位置を参照するオブジェクト位置ポインタが記録され、前記メモリ中に、オブジェクトの位置を記録するオブジェクト位置記録領域がさらに設けられ、
前記ヒープ領域に連続した利用可能領域を生成する限定範囲を設定する範囲設定手段と、前記限定範囲内に含まれる複製元オブジェクトをこの限定範囲外の利用可能領域に複製先オブジェクトとして複製すると共に、前記オブジェクト位置記録領域に、該複製元オブジェクトの位置及び該複製先オブジェクの位置を記録するオブジェクト複製手段と、前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記オブジェクト複製手段により複製された複製先オブジェクトの位置に更新する第１ポインタ更新手段と、前記限定範囲の領域を利用可能領域にする限定範囲利用可能化手段と、前記オブジェクト複製手段を実行中に、前記主プログラムが前記ヒープ領域に記録されたオブジェクトの記録領域にデータの書込み処理を行うとき、又は書込み処理を行った後、データの書込み先の記録領域が、前記複製元オブジェクトの記録領域又は前記複製先オブジェクトの記録領域のいずれかであるかを判断する複製判断手段と、前記複製判断手段により書込み先が前記複製元オブジェクトの記録領域又は前記複製先オブジェクトの記録領域のいずれかであると判断されたとき、前記主プログラムが書込み処理を行うデータを、前記複製元オブジェクトの記録領域及び前記複製先オブジェクトの記録領域の両方に書込みを行う複製書込み手段と、を備えるものである。
【００２２】
請求項１０の発明は、請求項８又は請求項９に記載のメモリ管理装置において、前記オブジェクトは、前記データ要素として前記オブジェクト位置ポインタをさらに含み、前記複製元オブジェクトの位置を参照する前記ヒープ領域内のオブジェクト位置ポインタの参照先を、前記オブジェクト複製手段により複製された複製先オブジェクトの位置に更新する第２ポインタ更新手段と、前記第２ポインタ更新手段を実行中に、前記主プログラムが前記ヒープ領域に前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの書込み処理を行うとき、又は書込み処理を行った後、該オブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に変更する参照先変更手段と、前記第２ポインタ更新手段の実行中に、前記主プログラムが２つのオブジェクト位置ポインタの参照先が同じオブジェクトの位置であるかどうかの検査処理を行うとき、該２つのオブジェクト位置ポインタのうちの一方が前記複製元オブジェクトの位置を、他方が前記複製先オブジェクトの位置を参照している場合、同一のオブジェクトを参照していると判断する同一判断手段と、をさらに備え、前記複製判断手段は、前記オブジェクト複製手段、又は前記第２ポインタ更新手段を実行中に、前記主プログラムが前記ヒープ領域に記録されたオブジェクトの記録領域にデータの書込み処理を行うとき、又は書込み処理を行った後、データの書込み先の記録領域が、前記複製元オブジェクトの記録領域又は前記複製先オブジェクトの記録領域のいずれかであるかを判断するものである。
【００２３】
請求項１１の発明は、請求項８乃至請求項１０のいずれかに記載のメモリ管理装置において、前記データ記録領域中に、前記主プログラムが実行する関数の実行結果等を一時的に記録する関数フレームが積み上げられて配置されるスタック領域が設けられ、前記スタック領域内の前記関数フレームを上位から下位に向かって走査し、この順に該スタック領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記オブジェクト複製手段により複製された複製先オブジェクトの位置に更新する第３ポインタ更新手段と、前記第３ポインタ更新手段によるオブジェクト位置ポインタの更新処理を中断するときに、該第３ポインタ更新手段による処理が最後に行われた前記関数フレームに、関数の実行を制御する障壁を設定する障壁設定手段と、をさらに備え、前記第１ポインタ更新手段は、前記スタック領域を除く前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新し、前記障壁が、関数の実行完了後、前記第３ポインタ更新手段による処理を再開させるものである。
【００２４】
請求項１２の発明は、請求項８乃至請求項１０のいずれかに記載のメモリ管理装置において、前記ヒープ領域内に前記データ記録領域の一部又は全部を割当て、該ヒープ領域内の該データ記録領域外の領域を、請求項８乃至請求項１０のいずれかに記載のヒープ領域とし、前記範囲設定手段は、前記ヒープ領域内の前記データ記録領域が割当てられた領域に対して限定範囲を設定することができ、前記第１ポインタ更新手段は、前記限定範囲内の前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新すると共に、該限定範囲内の前記データ記録領域を、前記ヒープ領域内の利用可能領域に移動させ、前記限定範囲外の前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新するものである。
【００２５】
請求項１３の発明は、請求項１１に記載のメモリ管理装置において、前記ヒープ領域内に、前記スタック領域を除く前記データ記録領域の一部又は全部を割当て、該ヒープ領域内の該データ記録領域外の領域を、請求項８乃至請求項１０のいずれかに記載のヒープ領域とし、前記範囲設定手段は、前記ヒープ領域内の前記データ記録領域が割当てられた領域に対して限定範囲を設定することができ、前記第１ポインタ更新手段は、前記限定範囲内の前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新すると共に、該限定範囲内の前記データ記録領域を、前記ヒープ領域内の利用可能領域に移動させ、前記限定範囲及び前記スタック領域を除く前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新するものである。
【００２６】
請求項１４の発明は、請求項１１に記載のメモリ管理装置において、前記ヒープ領域内に、前記スタック領域を含む前記データ記録領域の一部又は全部を割当て、該ヒープ領域内の該データ記録領域外の領域を、請求項８乃至請求項１０のいずれかに記載のヒープ領域とし、前記範囲設定手段は、前記ヒープ領域内の前記データ記録領域が割当てられた領域に対して限定範囲を設定することができ、前記第１ポインタ更新手段は、前記限定範囲内の前記スタック領域を除く前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新すると共に、該限定範囲内に割当てられた、前記スタック領域を除く該データ記録領域を、前記ヒープ領域内の利用可能領域に移動させ、前記限定範囲外の前記スタック領域を除く前記データ記録領域に記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新し、前記第３ポインタ更新手段は、前記ヒープ領域内に割当てられた前記スタック領域内の前記関数フレームを上位から下位に向かって走査し、前記限定範囲内の前記関数フレームに記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新すると共に、該限定範囲内の該関数フレームを、該ヒープ領域内の利用可能領域に移動させ、前記限定範囲外の前記関数フレームに記録されている、前記複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、前記複製先オブジェクトの位置に更新し、前記障壁設定手段は、前記第３ポインタ更新処理による処理を中断して、前記主プログラムを実行するときに、前記障壁を、該第３ポインタ更新処理による処理が最後に行われた前記関数フレームに設定するものである。
【００２７】
請求項１５の発明は、請求項１乃至請求項７のいずれか一項に記載のメモリ管理方法をコンピュータに実行させるためのメモリ管理プログラムが記録されているコンピュータ読取可能な記録媒体である。
【発明の効果】
【００２８】
請求項１の発明によれば、主プログラムが複製元オブジェクトの記録領域又は複製先オブジェクトの記録領域にデータの書込み処理を行うとき、又は書込み処理を行った後、書込み処理を行うデータを、複製元データの記録領域及び複製先データの記録領域の両方に書込むことができる。そのため、複製元データと複製先データとのデータの整合性を保つことができ、連続した利用可能領域を生成する処理を中断して、主プログラムが処理を行うことができる。従って、主プログラムの処理の実時間性を損なわずに、ヒープ領域に連続した利用可能領域を生成することができる。
【００２９】
請求項２の発明によれば、主プログラムが複製元オブジェクトの記録領域又は複製先オブジェクトの記録領域にデータの書込み処理を行うとき、又は書込み処理を行った後、書込み処理を行うデータを、複製元データの記録領域及び複製先データの記録領域の両方に書込むことができるので、請求項１と同様の効果を得られる。また、オブジェクト位置記録領域を参照して、複製元オブジェクトの位置及び複製先オブジェクトの位置や、複製元オブジェクトの記録領域及び複製先オブジェクトの記録領域を取得することができるので、オブジェクトは複製位置ポインタを有する必要がない。そのため、ヒープ領域の使用効率が良くなる。
【００３０】
請求項３の発明によれば、主プログラムがヒープ領域に複製元オブジェクトの位置を参照するオブジェクト位置ポインタの書込み処理を行うとき、又は書込み処理を行った後、オブジェクト位置ポインタの参照先を、複製先オブジェクトの位置に変更することができる。そのため、これらの処理（コンパクション処理）終了後にオブジェクト位置ポインタの参照先にデータが存在しなくなることを防ぐことができるので、主プログラムが処理異常を発生することを防ぐことができ、連続した利用可能領域を生成する処理を中断して、主プログラムが処理を行うことができる。従って、主プログラムの処理の実時間性を損なわずに、ヒープ領域に連続した利用可能領域を生成することができる。
【００３１】
請求項４の発明によれば、オブジェクト位置ポインタの更新処理が最後に行われた関数フレームに障壁を設定し、関数の実行完了後、障壁により、オブジェクト位置ポインタの更新処理が再開される。そのため、スタック領域内のオブジェクト位置ポインタの更新処理を中断して、主プログラムが関数を実行することができ、主プログラムの処理の実時間性を損なわずに、スタック領域のオブジェクト位置ポインタを更新することができる。
【００３２】
請求項５の発明によれば、ヒープ領域内にデータ記録領域を割当て、ヒープ領域内のデータ記録領域外の領域を、請求項１乃至請求項３のいずれかに記載のヒープ領域とするので、請求項１乃至請求項３のいずれかの発明と同様の効果が得られる。
【００３３】
請求項６の発明によれば、ヒープ領域内に、スタック領域を除くデータ記録領域を割当て、ヒープ領域内のデータ記録領域外の領域を、請求項１乃至請求項３のいずれかに記載のヒープ領域とするので、請求項４の発明と同様の効果が得られる。
【００３４】
請求項７の発明によれば、ヒープ領域内に、スタック領域を含むデータ記録領域を割当て、ヒープ領域内のデータ記録領域外の領域を、請求項１乃至請求項３のいずれかに記載のヒープ領域とするので、請求項４の発明と同様の効果が得られる。また、限定範囲内のスタック領域をヒープ領域内の利用可能領域に移動させる処理を中断して、主プログラムが処理を行うことができる。そのため、主プログラムの処理の実時間性を損なわずに、限定範囲内のスタック領域をヒープ領域内の利用可能領域に移動させる処理を行うことができる。
【００３５】
請求項８の発明によれば、請求項１の発明と同様の効果を得ることができる。
【００３６】
請求項９の発明によれば、請求項２の発明と同様の効果を得ることができる。
【００３７】
請求項１０の発明によれば、請求項３の発明と同様の効果を得ることができる。
【００３８】
請求項１１の発明によれば、請求項４の発明と同様の効果を得ることができる。
【００３９】
請求項１２の発明によれば、ヒープ領域内にデータ記録領域を割当て、ヒープ領域内のデータ記録領域外の領域を、請求項８乃至請求項１０のいずれかに記載のヒープ領域とするので、請求項５の発明と同様の効果を得ることができる。
【００４０】
請求項１３の発明によれば、ヒープ領域内に、スタック領域を除くデータ記録領域を割当て、ヒープ領域内のデータ記録領域外の領域を、請求項８乃至請求項１０のいずれかに記載のヒープ領域とするので、請求項６の発明と同様の効果を得ることができる。
【００４１】
請求項１４の発明によれば、ヒープ領域内に、スタック領域を含むデータ記録領域を割当て、ヒープ領域内のデータ記録領域外の領域を、請求項８乃至請求項１０のいずれかに記載のヒープ領域とするので、請求項７の発明と同様の効果を得ることができる。
【００４２】
請求項１５の発明によれば、コンピュータにメモリ管理プログラムを読み取らせて、コンピュータ上でこのプログラムを実行することにより、請求項１乃至請求項７のいずれか一項に記載の発明と同様の効果が得られる。
【発明を実施するための最良の形態】
【００４３】
以下、本発明の第１実施形態に係る携帯電話（メモリ管理装置）について、図１乃至図３を参照して説明する。以下の実施形態では、本発明のメモリ管理装置を携帯電話に適用した場合について説明する。図１は、携帯電話１の構成を示し、図２はフラッシュメモリ（記録媒体）１７の構成を示し、図３は、データ記録領域２１の構成を示す。携帯電話１は、動的なデータを生成するＪａｖａ（登録商標）言語を用いて作成されたプログラム（以下、主プログラム）９１、及び本発明のメモリ管理プログラム９３の実行が可能である。
【００４４】
携帯電話１は、音声を入力するためのマイク等の入力部１２と、音声を出力するためのスピーカ等の出力部１３と、ユーザによって操作されるキーを有する操作部１４と、音声データ等の送受信を行うための通信部１５と、メニューや通信状態等を表示するための表示部１６とを備える、また、携帯電話１は、プログラム及びデータの情報が記録されたフラッシュメモリ１７と、各種情報を一時的に記録するメモリ部（メモリ）１８と、装置各部の制御を行うためのＣＰＵ１１と、を備える。
【００４５】
フラッシュメモリ１７には、図２に示すように、主プログラム９１と、主プログラム９１の実行に必要なＪａｖａ（登録商標）  ＶＭ（Ｊａｖａ（登録商標）  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）等の実行環境プログラム９２と、実行環境プログラム９２の一部であるメモリ管理プログラム９３と、各種設定情報等のデータ９４等と、が記録されている。携帯電話１は、メモリ管理プログラム９３をメモリ部１８に読み取らせて、ＣＰＵ１１で実行することにより、本発明のメモリ管理装置として動作する。なお、メモリ管理プログラム９３は、フラッシュメモリ１７中に、主プログラム９１の一部として記録されていてもよいし、独立したプログラムとして記録されていてもよい。
【００４６】
メモリ部１８には、主プログラム９１の実行等に利用されるデータを記録するためのデータ記録領域２１と、主プログラム９１が実行中に使用するデータ要素を含むデータ（以下、オブジェクト）を記録するためのヒープ領域２２と、フリーリスト２３と、が設けられている。データ記録領域２１は、特別なオブジェクト等の位置を参照するオブジェクト位置ポインタや、スタック領域２７の位置を示すポインタや、プログラムの実行位置を示すデータ等が記録されている固定データ記録領域（図示せず）や、一時的なデータを記録する一時データ記録領域（図示せず）などを記録している。
【００４７】
ヒープ領域２２は、主プログラム９１の実行によりオブジェクトが記録され、主プログラム９１の実行過程において利用可能な空き領域（以下、利用可能領域）が次第に不足する。そのため、ヒープ領域２２は、メモリ管理プログラム９３により、主プログラム９１の実行が進むことにより不要になったオブジェクトを消去するガーベッジコレクション（以下、ＧＣ）処理と、ＧＣ処理の後に必要に応じて連続した利用可能領域を生成するためのコンパクション処理とを含むメモリ管理処理が行われる。フリーリスト２３は、ヒープ領域２２内の利用可能領域の位置が記録されている。
【００４８】
次に、スタック領域２７の構成について、図４を参照して説明する。図４は、スタック領域２７に記録された関数フレームを概念的に示したものである。関数フレームは、主プログラム９１の実行に必要な関数（Ｊａｖａ（登録商標）言語ではメソッドと呼ばれる）を記録する領域である。スタック領域２７は、主プログラム９１が実行する関数の実行結果等を一時的に記録する関数フレーム６０ａ〜６０ｃが積み上げられて配置されている。実行中の関数フレームはカレントフレームと呼ばれ、図４では、関数フレーム６０ａがカレントフレーム７０となる。
【００４９】
主プログラム９１の関数は、実行中の関数が、実行すべき関数を呼び出して処理を行う。関数が関数を呼び出すとき、スタック領域２７内に確保された実行中の関数の関数フレームに、呼び出し元の関数は、新たな関数フレームを積み上げる形で確保し、呼び出し先の関数を実行する。そして、呼び出し先の関数の実行完了後、呼び出し元の関数の関数フレームは不要であるため、積み上げられている不要な関数フレームを破棄する。なお、スタック領域２７内に積み上げられる関数フレームは、それぞれの位置がデータ記録領域２１内の記録領域において隣接している必要は無い。
【００５０】
次に、ヒープ領域２２に記録されるオブジェクトの構成について、図５を参照して説明する。図５は、ヒープ領域２２に記録されるオブジェクト３０の一例を概念的に示すものである。オブジェクト３０は、複製位置ポインタ５０の参照先アドレス１１１と、データ要素１２１〜１２３と、データ要素１３１と、を含むものから構成される。データ要素１２１〜１２３は、数値や文字などの値が記録されているものであり、データ要素１３１はオブジェクト位置ポインタ４０の参照先アドレスが記録されているものである。
【００５１】
オブジェクト位置ポインタ４０は、データ要素として、他のオブジェクトを参照するものであり、データ要素１２１〜１２３とオブジェクト位置ポインタ４０とは、主プログラム９１によって使用される。複製位置ポインタ５０は、オブジェクト３０の複製先の位置又は複製元の位置を記録するためのものである。複製位置ポインタ５０の参照先アドレス１１１は、オブジェクト３０の先頭に記録されており、主プログラム９１によって使用されない。オブジェクトが複製されていない場合、複製位置ポインタ５０の参照先アドレス１１１には、「オブジェクトが複製されていない」という旨を示す特別な値が記録される。
【００５２】
次に、メモリ管理プログラム９３によるメモリ管理処理について図６を参照して説明する。携帯電話１は、ヒープ領域２２の利用可能領域が不足したときに、メモリ管理プログラム９３を実行することによりメモリ管理処理を行う。携帯電話１は、ヒープ領域２２の利用可能領域がある基準値以下になったとき、ヒープ領域２２の利用可能領域が不足していると判断する。なお、ヒープ領域２２の利用可能領域の不足を判断する基準値は、任意に設定可能である。
【００５３】
まず、メモリ管理プログラム９３は、ヒープ領域２２内の不要なオブジェクトを消去し、利用可能領域を生成するＧＣ処理を行った後（Ｓ１）、ヒープ領域２２内の利用可能領域をフリーリスト２３に登録する（Ｓ２）。なお、ＧＣ処理は、本発明者により特許第３５３０８８７号に提案された発明によって、主プログラムの実時間性を損なわずに行うことができるが、これに限られず、主プログラムの実時間性を損なわずにＧＣ処理を行うことができる他の方法を用いてＧＣ処理を行ってもよい。
【００５４】
そして、上記Ｓ２処理の後、ヒープ領域２２内に連続した利用可能領域を生成するためにコンパクション処理を行う（Ｓ３）。コンパクション処理の詳細については後述する。上記Ｓ３処理の後、メモリ管理プログラム９２は、データ記録領域２１内のオブジェクト位置ポインタ更新処理を行う（Ｓ４）。オブジェクト位置ポインタ更新処理の詳細については後述する。上記Ｓ４処理の後、ヒープ領域２２内の限定範囲（図７参照）を連続した利用可能領域としてフリーリスト２３に登録し（Ｓ５：限定範囲利用可能化ステップ）、メモリ管理処理を終了する。
【００５５】
次に、上記Ｓ３のコンパクション処理について、図７を参照して説明する。まず、メモリ管理プログラム９３は、ヒープ領域２２中に連続した利用可能領域を生成する限定範囲を設定し（Ｓ１１：範囲設定ステップ）、この限定範囲内に含まれるオブジェクト（以下、複製元オブジェクト）をこの限定範囲外の利用可能領域に複製先のオブジェクト（以下、複製先オブジェクト）として複製すると共に、複製元オブジェクト及び複製先オブジェクトの複製位置ポインタの参照先を、互いのオブジェクトの位置に設定する（Ｓ１２：オブジェクト複製ステップ）。なお、複製元オブジェクト及び複製先オブジェクトは、オブジェクトの一種であり、便宜上、上記のように呼ぶ。
【００５６】
そして、ヒープ領域２２内の複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、上記Ｓ１２により複製された複製先オブジェクトの位置に更新し（Ｓ１３：第２ポインタ更新ステップ）、コンパクション処理を終了する。なお、本処理では、上記Ｓ１１により限定範囲を設定した後に、上記Ｓ１２の処理を実行しているが、これに限らず、上記Ｓ１２の処理中に限定範囲を設定してもよい。また、上記Ｓ１１による限定範囲設定処理は、メモリ管理プログラム９３に含まれない独立したプログラムであってもよい。上記Ｓ１１による限定範囲設定処理が独立したプログラムである場合、このプログラムは、メモリ管理プログラム９３の実行前に実行される。
【００５７】
次に、上記Ｓ４のオブジェクト位置ポインタ更新処理について、図８を参照して説明する。メモリ管理プログラム９３は、データ記録領域２１に記録されている、複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、オブジェクト複製ステップにより複製された複製先オブジェクトの位置に更新し（Ｓ２１：第１ポインタ更新ステップ）、処理を終了する。データ記録領域２１内のスタック領域２７のオブジェクト位置ポインタ更新処理については、メモリ管理プログラム９３が、スタック領域２７の関数フレームを上位から下位に向かって走査する。そして、この順にスタック領域２７に記録されている、複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、オブジェクト複製ステップにより複製された複製先オブジェクトの位置に更新する（Ｓ２１：第３ポインタ更新ステップ）。
【００５８】
次に、メモリ管理処理中のヒープ領域２２の状態について、図９を参照して説明する。図９（ａ）（ｂ）（ｃ）は、メモリ管理処理を行った際のヒープ領域２２の状態を概念的に示したものであり、図９（ａ）は上記Ｓ１１の処理を、図９（ｂ）は上記Ｓ１２の処理を、図９（ｃ）は上記Ｓ１３の処理を行った際の状態に相当する。
【００５９】
図９において、３１〜３７、３４ａ、３５ａはオブジェクト、４１〜４４はオブジェクト位置ポインタ、５１〜５４は複製位置ポインタ、Ｒは限定範囲を示す。なお、３４と３５は複製元オブジェクトになっており、３４aと３５aは複製先オブジェクトになっている。
【００６０】
図９（ａ）に示すように、限定範囲Ｒには、複製元オブジェクト３４、３５が含まれ、オブジェクト３１のオブジェクト位置ポインタ４１は複製元オブジェクト３４の位置を参照し、オブジェクト３７のオブジェクト位置ポインタ４２は複製元オブジェクト３５の位置を参照している。オブジェクト３２〜３６は、オブジェクト位置ポインタを保持していない。また、オブジェクト３１〜３７のオブジェクトは複製されておらず、オブジェクト３１〜３７の複製位置ポインタは他のオブジェクトの位置を参照していない。
【００６１】
複製元オブジェクト３４、３５を複製すると、図９（ｂ）に示すように、ヒープ領域２２内の利用可能領域に複製先オブジェクト３４ａ、３５ａとして複製される。このとき、複製先オブジェクト３４ａの複製位置ポインタ５１が複製元オブジェクト３４の位置を参照し、複製元オブジェクト３４の複製位置ポインタ５３が複製先オブジェクト３４ａの位置を参照するように複製位置ポインタ５１及び複製位置ポインタ５３が設定される。また、複製先オブジェクト３５ａの複製位置ポインタ５２が複製元オブジェクト３５の位置を参照し、複製元オブジェクト３５の複製位置ポインタ５４が複製先オブジェクト３５ａの位置を参照するように複製位置ポインタ５２及び複製位置ポインタ５４が設定される。
【００６２】
そして、ヒープ領域２２を走査して、オブジェクト３１〜３７のオブジェクト位置ポインタが、限定範囲Ｒ内の複製元オブジェクト３４、３５を参照している場合、このオブジェクト位置ポインタの参照先を複製先オブジェクト３４ａ、３５ａの位置に更新する。ここでは、図９（ｃ）に示すように、オブジェクト３１のオブジェクト位置ポインタ４３の参照先を複製先オブジェクト３４ａの位置に、オブジェクト３７のオブジェクト位置ポインタ４４の参照先を複製先オブジェクト３５ａの位置に更新している。
【００６３】
次に、上述したコンパクション処理の上記Ｓ１２及び上記Ｓ１３の処理中に、主プログラム９１がヒープ領域２２にデータの書込みを行う際の処理について、図１０を参照して説明する。まず、メモリ管理プログラム９３は、主プログラム９１がヒープ領域２２にデータの書込み処理を行うとき、又は書込み処理を行った後、データの書込み先の記録領域が、複製元オブジェクトの記録領域又は複製先オブジェクトの記録領域のいずれかであるかを判断する（Ｓ３１：複製判断ステップ）。そして、データの書込み先が複製元オブジェクトの記録領域又は複製先オブジェクトの記録領域のいずれかであると判断されたとき（Ｓ３２でＹＥＳ）、メモリ管理プログラム９３は、主プログラム９１が書込むデータを、複製元オブジェクトの記録領域及び複製先オブジェクトの記録領域の両方に書込む（Ｓ３３：複製書込みステップ）。
【００６４】
一方、上記Ｓ３１により、データの書込み先が複製元オブジェクトの記録領域又は複製先オブジェクトの記録領域のいずれかでもないと判断されたとき（Ｓ３２でＮＯ）、上記Ｓ３３の処理を行わず、主プログラム９１がデータを書込む（Ｓ３４）。なお、上記Ｓ３１乃至上記Ｓ３３の処理は、主プログラム９１が、ヒープ領域２２に記録されたオブジェクトの記録領域にデータの書込み処理を行った後、メモリ管理プログラム９３は、主プログラム９１により複製元オブジェクトの記録領域又は複製先オブジェクトの記録領域のいずれかにだけデータが書込まれたかどうかを判断し（上記Ｓ３１に相当）、この判断の結果、データの書込みがあった場合（上記Ｓ３２でＹＥＳに相当）、メモリ管理プログラム９３は、データが書込まれていない複製元オブジェクトの記録領域又は複製先オブジェクトの記録領域のいずれかに、主プログラム９１により書込まれたデータを書込む（上記Ｓ３３に相当）処理により実現されてもよい。
【００６５】
次に、上述したコンパクション処理の上記Ｓ１３の処理中に、主プログラム９１がヒープ領域２２に複製元オブジェクトの位置を参照するオブジェクト位置ポインタの書込みを行う際の処理について、図１１を参照して説明する。まず、メモリ管理プログラム９３は、主プログラム９１が、ヒープ領域２２にオブジェクト位置ポインタの書込み処理を行うとき、又は書込み処理を行った後、このオブジェクト位置ポインタの参照先が、複製元オブジェクトの位置であるかどうかを判断する（Ｓ４１）。そして、このオブジェクト位置ポインタの参照先が、ヒープ領域２２の複製元オブジェクトの位置である場合（Ｓ４２でＹＥＳ）、このオブジェクト位置ポインタの参照先を、複製先オブジェクトの位置に変更し（Ｓ４３）、参照先を変更したオブジェクト位置ポインタを上記図１０の処理手順に従って書込む（Ｓ４４）。このとき、参照先を変更したオブジェクト位置ポインタは、上述した図１０の処理中のデータに相当する。
【００６６】
一方、上記Ｓ４１により、オブジェクト位置ポインタの参照先が複製元オブジェクトの位置でない場合（Ｓ４２でＮＯ）、上記Ｓ４３の処理は行わず、主プログラム９１がオブジェクト位置ポインタをヒープ領域２２に、上記図１０の処理手順に従って書込む（Ｓ４４）。なお、図１０及び図１１の処理は、主プログラム９１又は実行環境プログラム９２が行ってもよい。
【００６７】
上述したように携帯電話１は、主プログラム９１が複製元オブジェクトの記録領域又は複製先オブジェクトの記録領域にデータの書込み処理を行うとき、又は書込み処理を行った後、書込み処理を行うデータを、複製元データの記録領域及び複製先データの記録領域の両方に書込むことができる。そのため、複製元オブジェクトと複製先オブジェクトとのデータの整合性を保つことができる。従って、オブジェクトの複製処理を中断して主プログラム９１が処理を行うことができる。
【００６８】
また、主プログラム９１が、ヒープ領域２２に複製元オブジェクトの位置を参照するオブジェクト位置ポインタの書込み処理を行うとき、又は書込み処理を行った後、オブジェクト位置ポインタの参照先を、複製先オブジェクトの位置に変更することができる。そのため、オブジェクト位置ポインタの参照先にデータが存在しないことを防ぐことができるので、主プログラム９１が処理異常を発生することを防ぐことができる。従って、携帯電話１は、コンパクション処理を中断して、主プログラム９１の処理を行うことができ、主プログラム９１の処理の実時間性を損なわずに、ヒープ領域２２に連続した利用可能領域を生成することができる。
【００６９】
次に、スタック領域２７に対する上述したオブジェクト位置ポインタ更新処理の上記Ｓ２１の処理中に、主プログラム９１が関数を実行する際の処理について、図１２を参照して説明する。まず、メモリ管理プログラム９３がオブジェクト位置ポインタの更新処理を中断するときに、メモリ管理プログラム９３は、オブジェクト位置ポインタの更新処理が最後に行われた関数フレームに、関数の実行を制御する障壁を設定する（Ｓ５１：障壁設定ステップ）。そして、主プログラム９１が関数を実行し、この関数の実行が完了して関数フレームを破棄するとき（Ｓ５２）、主プログラム９１が、この関数フレームに障壁が設定されているどうか判断する（Ｓ５３）。
【００７０】
上記Ｓ５３の結果、障壁が設定されている場合（Ｓ５４でＹＥＳ）、障壁がメモリ管理プログラム９３による、スタック領域２７のオブジェクト位置ポインタの更新処理を再開させ、メモリ管理プログラム９３は、この関数フレームの下位に位置する関数フレーム内の複製元オブジェクトを参照するオブジェクト位置ポインタの参照先を、複製先オブジェクトの位置に更新する（Ｓ５５）。そして、オブジェクト位置ポインタの更新処理が最後に行われた関数フレームに、関数の実行を制御する障壁を再設定し、カレントフレームを下位の関数フレームに移動し、カレントフレームが移動した関数フレームの関数を実行する（Ｓ５６）。
【００７１】
一方、上記Ｓ５３により、関数フレームに障壁が設定されていない場合（Ｓ５４でＮＯ）、上記Ｓ５５の処理は行わず、上記Ｓ５６の処理を行う。なお、上述した障壁の設定処理、及び障壁が設定されているかどうかの判断処理は、実行環境プログラム９２が行ってもよい。また、本処理によりスタック領域２７のオブジェクト位置ポインタの更新が行われる場合、スタック領域２７を除くデータ記録領域２１に対して、上述した図８によるオブジェクト位置ポインタの更新処理が行われる。
【００７２】
次に、上記図１２に示したオブジェクト位置ポインタ処理中のスタック領域２７の状態について、図１３を参照して説明する。図１３は、スタック領域２７を概念的に示した図であり、（ａ）は、上記Ｓ５２の処理に相当し、（ｂ）は上記Ｓ５６の処理に相当する。図１３において、６１〜６４は関数フレーム、７０はカレントフレーム、８０は障壁を示す。
【００７３】
図１３（ａ）に示すように、カレントフレーム７０は関数フレーム６１に位置し、このとき、関数フレーム６１のオブジェクト位置ポインタは既に更新されている。この関数フレーム６１の関数の実行が完了したとき、設定されている障壁８０により、メモリ管理プログラム９３が関数フレーム６２のオブジェクト位置ポインタの更新処理を行う。そして、関数フレーム６２のオブジェクト位置ポインタの更新後、図１３（ｂ）に示すように、メモリ管理プログラム９３は、関数フレーム６２に対して障壁８０を設定し、カレントフレーム７０を関数フレーム６２に移動させ、主プログラム９１が関数フレーム６２の関数を実行する。なお、上記Ｓ５５において、複数の関数フレームのオブジェクト位置ポインタを更新してもよい。
【００７４】
上述したように、携帯電話１は、オブジェクト位置ポインタの更新処理が最後に行われた関数フレームに障壁を設定し、関数の実行完了後、障壁により、オブジェクト位置ポインタの更新処理を再開される。そのため、オブジェクト位置ポインタの更新処理を中断して、主プログラムが実行する関数を実行することができ、主プログラム９１による関数の処理の実時間性を損なわずに、スタック領域のオブジェクト位置ポインタを更新することができる。また、スタック領域２７内のオブジェクト位置ポインタの更新処理を分割して行うことができるので、主プログラム９１の処理の実時間性を損なわない。
【００７５】
次に、上述したコンパクション処理の上記Ｓ１３の処理中における、２つのオブジェクト位置ポインタの比較処理について、図１４を参照して説明する。ここでは、主プログラム９１が、ヒープ領域２２から読出し処理などを行うことにより、２つのオブジェクト位置ポインタを得ているものとする。まず、主プログラム９１は、２つのオブジェクト位置ポインタを比較し（Ｓ６１）、同一のオブジェクトを参照している場合（Ｓ６２でＹＥＳ）、同一のオブジェクトを参照しているものと判断し（Ｓ６５）、同一判断処理を終了する。
【００７６】
一方、同一のオブジェクトを参照していない場合（Ｓ６２でＮＯ）、一方のオブジェクト位置ポインタが参照するオブジェクトの複製位置ポインタと他方のオブジェクト位置ポインタを比較する（Ｓ６３）。そして、これらのポインタが同一のオブジェクトを参照しているとき（Ｓ６４でＹＥＳ）、上記Ｓ６５の判断を行い、同一判断処理を終了する。また、上記Ｓ６３で、これらのポインタが同一のオブジェクトを参照していないとき（Ｓ６４でＮＯ）、異なるオブジェクトを参照しているものと判断し（Ｓ６６）、同一判断処理は終了する。なお、上記図１４の処理は実行環境プログラム９２が行ってもよい。
【００７７】
上記Ｓ６１の結果、２つのオブジェクト位置ポインタのうちの一方が複製元オブジェクトの位置を、他方が複製先オブジェクトの位置を参照している場合（Ｓ６２でＹＥＳ）、メモリ管理プログラム９３は、２つのオブジェクト位置ポインタが同一のオブジェクトを参照していると判断し（Ｓ６３：同一判断ステップ）、処理を終了する。一方、上記Ｓ６１の結果、２つのオブジェクト位置ポインタのうちの一方が複製元オブジェクトの位置を、他方が複製先オブジェクトの位置を参照していない場合（Ｓ６２でＮＯ）、上記Ｓ６３の処理は行わないで処理を終了する。これにより、携帯電話１は、２つのオブジェクト位置ポインタが、同一のオブジェクトを参照しているかどうか判断することができる。
【００７８】
上記のように、本実施形態に係る携帯電話１によれば、ヒープ領域２２内に連続した利用可能領域を生成する処理を中断して、主プログラム９１が処理を行うことができるので、主プログラム９１の処理の実時間性を損なわない。そのため、開発者が、従来のように、携帯電話の機種毎によるメモリ部１８のサイズの違い等により、メモリ管理プログラム９３を強制的に実行させるタイミングを設定する必要がないので、開発効率が良くなり、開発期間が短縮する。
【００７９】
また、主プログラム９１がヒープ領域２２にデータやオブジェクト位置ポインタの書込みを行うときに、書込み先の記録領域と書込むポインタの参照先を判断する処理を追加する。主プログラム９１は、一般的に、ヒープ領域２２への読出し処理よりも書込み処理を行う回数の方が少ないので、ヒープ領域２２からオブジェクトを読出す際に処理を追加する場合よりも、主プログラム９１の実行時にオーバヘッドが小さい。
【００８０】
また、ＧＣ処理を行った後に、限定範囲の設定をすることができるので、利用可能領域や利用しているデータ量等のさまざまな要因を加味して限定範囲の設定をすることができるので、効率良く利用可能領域を生成することができる。
【００８１】
次に、本発明の第２実施形態に係る携帯電話について、図１５を参照して説明する。図１５は、本実施形態の携帯電話１の構成を示す。携帯電話１は、メモリ部１８が位置記録リスト（オブジェクト位置記録領域）２４をさらに有していること、及びヒープ領域２２に記録されるオブジェクトが複製位置ポインタを含んでいないこと以外は、第１実施形態に示した携帯電話１と同様の構成である。位置記録リスト２４は、第１実施形態における複製位置ポインタに相当する、ヒープ領域２２内のオブジェクトの位置を記録するためのリストである。ヒープ領域２２内に記録されているオブジェクトは、データ要素と、オブジェクト位置ポインタと、を含むものから構成されている。
【００８２】
次に、位置記録リスト２４について、図１６を参照して説明する。図１６は、複製元オブジェクトの位置及び複製先オブジェクトの位置が記録されている位置記録リスト２４の一例を示す。図１６に示すように、位置記録リスト２４は、隣接する複数の複製元オブジェクトを複製元オブジェクト群として、隣接する複数の複製先オブジェクトを複製先オブジェクト群としてまとめて記録し、複製元オブジェクト群の起点及び終点の位置と、この複製元オブジェクト群に対応する複製先オブジェクト群の起点及び終点の位置が、ヒープ領域２２内のアドレスを示す数値で記録されている。そのため、複製元オブジェクトの位置、複製先オブジェクトの位置、複製元オブジェクトの記録領域、又は複製先オブジェクトの記録領域の取得を行うとき、メモリ管理プログラム９３は、位置記録リスト２４を参照する。
【００８３】
次に、携帯電話１のコンパクション処理について、図１７を参照して説明する。まず、メモリ管理プログラム９３は、ヒープ領域２２中に連続した利用可能領域を生成する限定範囲を設定し（Ｓ７１）、この限定範囲内に含まれる複製元オブジェクトをこの限定範囲外の利用可能領域に複製先オブジェクトとして複製すると共に、位置記録リスト２４に、複製元オブジェクトの位置及び複製先オブジェクの位置を記録する（Ｓ７２）。
【００８４】
そして、メモリ管理プログラム９３は、位置記録リスト２４を参照して、ヒープ領域２２内の複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、上記Ｓ７２により複製された複製先オブジェクトの位置に更新し（Ｓ７３）、ヒープ領域２２のコンパクション処理を終了する。
【００８５】
上記のように、本実施形態に係る携帯電話１によれば、第１実施形態に係る携帯電話と同様の効果を得ることができる。また、位置記録リスト２４を参照して、複製元オブジェクトの位置及び複製先オブジェクトの位置や、複製元オブジェクトの記録領域及び複製先オブジェクトの記録領域を取得することができるので、オブジェクトは複製位置ポインタを有する必要がない。そのため、ヒープ領域２２の使用効率が良くなる。
【００８６】
次に、本発明の第３実施形態に係る携帯電話について、図１８及び図１９を参照して説明する。図１８は、本実施形態の携帯電話１の構成を示し、図１９はヒープ領域２５内のデータ記録領域２６の割当て状態を示す。携帯電話１は、ヒープ領域２５内にデータ記録領域２６の一部が割り当てられていること以外は、第１実施形態に示した携帯電話１の構成と同様である。スタック領域２７は、図１９に示すように、ヒープ領域２５内に割当てられていない。
【００８７】
携帯電話１は、ヒープ領域２５内のデータ記録領域２６外の領域を、第１実施形態に係る携帯電話のヒープ領域とすることができる。メモリ管理プログラム９３は、ヒープ領域２５内の前記データ記録領域２６が割当てられた領域に対しても限定範囲を設定することができる。
【００８８】
次に、メモリ管理プログラム９３による限定範囲内のデータ記録領域２６のコンパクション処理について、図２０を参照して説明する。まず、メモリ管理プログラム９３は、限定範囲内のデータ記録領域２６に記録されている、複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、複製先オブジェクトの位置に更新すると共に、限定範囲内のデータ記録領域２６を、ヒープ領域２５内の利用可能領域に移動させる（Ｓ８１）。
【００８９】
そして、限定範囲及びスタック領域２７を除くデータ記録領域２６に記録されている、複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、複製先オブジェクトの位置に更新し（Ｓ８２）、処理を終了する。これにより、ヒープ領域２５に割当てられているデータ記録領域２６に対してもコンパクション処理を行うことができるので、ヒープ領域２５内に連続した利用可能領域を効率良く生成することができる。
【００９０】
上記のように、本実施形態に係る携帯電話１によれば、ヒープ領域２５にデータ記録領域２６の一部が割当てられている場合であっても、第１実施形態の携帯電話と同様の効果を得ることができる。なお、ここでは、ヒープ領域２５にデータ記録領域２６の一部が割当てられている場合を示したが、ヒープ領域２５に、スタック領域２７を除くデータ記録領域２６の全部が割当てられてもよい。この場合であっても、携帯電話１は、第１実施形態の携帯電話と同様の効果を得ることができる。
【００９１】
また、本実施形態に係る携帯電話１のメモリ部１８が、オブジェクトの位置を記録するための位置記録リスト２４をさらに有し、ヒープ領域２５に記録されているオブジェクトが複製位置ポインタを有しない場合、本実施形態に係る携帯電話１は、第２実施形態に係る携帯電話と同様の効果を得ることができる。
【００９２】
次に、本発明の第４実施形態に係る携帯電話について、図２１を参照して説明する。図２１は、ヒープ領域２５内のデータ記録領域２６の割当て状態を示す。携帯電話１は、ヒープ領域２５内にデータ記録領域２６の一部が割り当てられると共に、スタック領域２７がヒープ領域２５内に割当てられていること以外は、第３実施形態に示した携帯電話１の構成と同様である。
【００９３】
次に、メモリ管理プログラム９３による限定範囲内のデータ記録領域２６のコンパクション処理について、図２２を参照して説明する。まず、メモリ管理プログラム９３は、限定範囲内のスタック領域２７を除くデータ記録領域２６に記録されている、複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、複製先オブジェクトの位置に更新すると共に、限定範囲内に割当てられた、スタック領域２７を除くデータ記録領域２６を、ヒープ領域２５内の利用可能領域に移動させる（Ｓ９１）。
【００９４】
そして、限定範囲外のスタック領域２７を除くデータ記録領域２６に記録されている、複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、複製先オブジェクトの位置に更新し（Ｓ９２）、処理を終了する。これにより、ヒープ領域２５に割当てられている、スタック領域２７を除くデータ記録領域２６に対してもコンパクション処理を行うことができるので、ヒープ領域２５内に連続した利用可能領域を効率良く生成することができる。
【００９５】
次に、メモリ管理プログラム９３による限定範囲内のスタック領域２７のコンパクション処理について、図２３を参照して説明する。まず、メモリ管理プログラム９３は、限定範囲内の関数フレームの移動先を決定し（Ｓ１０１）、ヒープ領域２５内に割当てられたスタック領域２７内の関数フレームを上位から下位に向かって走査する（Ｓ１０２）。そして、限定範囲内の関数フレームに記録されている、複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、複製先オブジェクトの位置に更新すると共に、限定範囲内の関数フレームを、ヒープ領域２５内の利用可能領域に移動させる（Ｓ１０３）。
【００９６】
そして、限定範囲外の関数フレームに記録されている、複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、複製先オブジェクトの位置に更新し（Ｓ１０４）、処理を終了する。これにより、ヒープ領域２５内のスタック領域２７に対してもコンパクション処理を行うことができるので、ヒープ領域２５内に連続した利用可能領域を効率良く生成することができる。
【００９７】
上記のように、本実施形態に係る携帯電話１によれば、スタック領域２７がヒープ領域２５内に割当てられている場合であっても、第３実施形態の携帯電話と同様の効果を得ることができる。なお、ここでは、ヒープ領域２６にデータ記録領域２６の一部が割当てられている場合を示したが、ヒープ領域２６に、データ記録領域２６の全部が割当てられてもよい。この場合であっても、携帯電話１は、第３実施形態の携帯電話と同様の効果を得ることができる。また、スタック領域２７の一部がヒープ領域２５外に割当てられている場合でもよく、この場合であっても、携帯電話１は、第３実施形態の携帯電話と同様の効果を得ることができる。
【００９８】
次に、メモリ管理プログラム９３をコンピュータ上で実行した場合の主プログラムの最大停止時間の実験結果について説明する。本実験で使用したコンピュータの性能は、ＣＰＵが「Ｘｅｏｎ  ３．２ＧＨｚ」、メモリが１ＧＢである。実験方法は、このコンピュータに、ヒープ領域が５ＭＢであるＪａｖａ（登録商標）実行環境を実装し、ＪＡＫＬＤ（Ｊａｖａ（登録商標）  Ａｐｐｌｉｃａｔｉｏｎ  Ｋｕｍｉｋｏｍｉ  Ｌｉｓｐ  Ｄｒｉｖｅｒ：ＬＩＳＰ処理系：情報処理学会論文誌  プログラミング  ４４巻  ｐ１〜１６参照）上でＢｏｙｅｒベンチマークを実行することにより、メモリ管理プログラム９３による主プログラムの最大停止時間を測定した。なお、メモリ管理プログラム９３のＧＣ処理は、特許３５３０８８７号で本発明者が提案した処理を利用している。また、本実験では、データ記録領域及びスタック領域がヒープ領域内に割当てられている。
【００９９】
まず、従来の一括してコンパクション処理を行う方法の場合、主プログラムの最大停止時間は９．５ｍｓであった。一方、本発明のメモリ管理プログラム９３による主プログラムの最大停止時間は０．７ｍｓであった。
【０１００】
なお、本発明は、上記各実施形態の構成に限られず、発明の趣旨を変更しない範囲で種々の変形が可能である。例えば、上記各実施形態では、本発明のメモリ管理装置を携帯電話に適用した例を示したが、これに限られず、例えば、コンピュータに適用したものであってもよい。また、上記各実施形態の携帯電話１では、フラッシュメモリ１７にメモリ管理プログラム９３が記録されている例を示したが、これに限らず、他の記憶媒体にメモリ管理プログラム９３が記録されていてもよく、また、通信部１５を用いて、インターネット上からメモリ管理プログラム９３をダウンロードして、携帯電話に実行させるものであってもよい。また、ＣＰＵ１１内のレジスタをデータ領域とし、メモリ管理プログラム９３が、レジスタに対して処理を行ってもよい。
【０１０１】
また、上記各実施形態のメモリ管理プログラム９３は、データ記録領域に記録されている、複製元オブジェクトの位置を参照するオブジェクト位置ポインタの参照先を、複製先オブジェクトの位置に更新する処理中に、主プログラム９１がデータ記録領域に複製元オブジェクトの位置を参照するオブジェクト位置ポインタを書込む処理を行うとき、又は書込み処理を行った後、オブジェクト位置ポインタの参照先を、複製先オブジェクトの位置に変更する処理と、主プログラム９１がヒープ領域に、複製元オブジェクトの位置を参照するオブジェクト位置ポインタを書込む処理を行うとき、又は書込み処理を行った後、オブジェクト位置ポインタの参照先を、複製先オブジェクトの位置に変更する処理と、をさらに行うものであってもよい。
【図面の簡単な説明】
【０１０２】
【図１】本発明の第１実施形態に係る携帯電話の構成を示すブロック図。
【図２】上記携帯電話のフラッシュメモリの構成を示すブロック図。
【図３】上記携帯電話のデータ記録領域の構成を示すブロック図。
【図４】上記携帯電話のスタック領域の構成を説明する図。
【図５】上記携帯電話のヒープ領域に記録されるオブジェクトの構成を説明する図。
【図６】上記携帯電話におけるメモリ管理処理手順を示すフローチャート。
【図７】上記メモリ管理処理におけるコンパクション処理手順を示すフローチャート。
【図８】上記メモリ管理処理におけるオブジェクト位置ポインタ更新手順を示すフローチャート。
【図９】（ａ）（ｂ）（ｃ）は、上記携帯電話のヒープ領域におけるコンパクション処理を説明する図。
【図１０】上記携帯電話のヒープ領域のコンパクション処理中にデータを書込む処理手順を示すフローチャート。
【図１１】上記携帯電話のヒープ領域のコンパクション処理中にオブジェクト位置ポインタを書込む処理手順を示すフローチャート。
【図１２】上記携帯電話のスタック領域におけるオブジェクト位置ポインタ更新処理手順を示すフローチャート。
【図１３】（ａ）（ｂ）は、上記携帯電話のスタック領域における障壁設定処理を説明する図。
【図１４】上記携帯電話のオブジェクト位置ポインタの同一判断処理手順を示すフローチャート。
【図１５】本発明の第２実施形態に係る携帯電話の構成を示すブロック図。
【図１６】上記携帯電話の位置記録リストの一例を示す図。
【図１７】上記携帯電話のヒープ領域のコンパクション処理手順を示すフローチャート。
【図１８】本発明の第３の実施形態に係る携帯電話の構成を示すブロック図。
【図１９】上記携帯電話のヒープ領域とデータ記録領域とスタック領域の状態を示す説明図。
【図２０】上記携帯電話のデータ記録領域のコンパクション処理手順を示すフローチャート。
【図２１】本発明の第３の実施形態に係る携帯電話のヒープ領域とデータ記録領域とスタック領域の状態を示す説明図。
【図２２】上記携帯電話のデータ記録領域のコンパクション処理手順を示すフローチャート。
【図２３】上記携帯電話のスタック領域のコンパクション処理手順を示すフローチャート。
【符号の説明】
【０１０３】
１  携帯電話（メモリ管理装置）
１１  ＣＰＵ
１２  入力部
１３  出力部
１４  操作部
１５  通信部
１６  表示部
１７  フラッシュメモリ（記録媒体）
１８  メモリ部（メモリ）
２１  データ記録領域
２２  ヒープ領域
２４  位置記録リスト（オブジェクト位置記録領域）
２５  ヒープ領域
２６  データ記録領域
２７  スタック領域
３０  オブジェクト
３１〜３３  オブジェクト
３６  オブジェクト
３７  オブジェクト
３４  複製元オブジェクト
３５  複製元オブジェクト
３４ａ  複製先オブジェクト
３５ａ  複製先オブジェクト
４０〜４４  オブジェクト位置ポインタ
５０〜５４  複製位置ポインタ
６０ａ〜６０ｃ  関数フレーム
６１〜６４  関数フレーム
７０  カレントフレーム
８０  障壁
９１  主プログラム
９３  メモリ管理プログラム
９４  データ
１２１〜１２３  データ要素
Ｒ  限定範囲
【図１】
2008191952.tif 000003
【図２】
2008191952.tif 000004
【図３】
2008191952.tif 000005
【図４】
2008191952.tif 000006
【図５】
2008191952.tif 000007
【図６】
2008191952.tif 000008
【図７】
2008191952.tif 000009
【図８】
2008191952.tif 000010
【図９】
2008191952.tif 000011
【図１０】
2008191952.tif 000012
【図１１】
2008191952.tif 000013
【図１２】
2008191952.tif 000014
【図１３】
2008191952.tif 000015
【図１４】
2008191952.tif 000016
【図１５】
2008191952.tif 000017
【図１６】
2008191952.tif 000018
【図１７】
2008191952.tif 000019
【図１８】
2008191952.tif 000020
【図１９】
2008191952.tif 000021
【図２０】
2008191952.tif 000022
【図２１】
2008191952.tif 000023
【図２２】
2008191952.tif 000024
【図２３】
2008191952.tif 000025