(57)【要約】【課題】オブジェクトを生成して格納する場合、ガベージコレクションを不要にしてアプリケーションプログラムの実行速度を向上する。【解決手段】実行時ライブラリ３０は、アプリケーションプログラム１０の起動時に呼び出されると、このアプリケーションプログラム１０の解析を行うことによりその生成される各オブジェクトが、メソッド内部でのみ利用されるオブジェクトであるか否かをそれぞれ判定し、メソッド内部でのみ利用されるオブジェクトはスタック領域４０のフレーム上に生成し、それ以外のオブジェクトはヒープ領域２０上に生成する。【選択図】　　　図１
2004078750.tif 000002
【特許請求の範囲】
【請求項１】
中間コードの実行を行う情報処理装置において、アプリケーションプログラムからの生成要求に応じてオブジェクトを生成し、生成したオブジェクトが不要となった場合には消去するというオブジェクトの生成／消去の管理を行うオブジェクト管理装置であって、
メソッドが呼び出されるごとにオブジェクトを格納するためのフレームが生成され、そのメソッドの終了時に解放されるスタック領域と、
メソッドが使用されなくなっても格納されているオブジェクトが自動的に消去されることがないヒープ領域と、
アプリケーションプログラムの起動時に呼び出されると、該アプリケーションプログラムの解析を行うことによりその生成される各オブジェクトが、メソッド内部でのみ利用されるオブジェクトであるか否かをそれぞれ判定し、メソッド内部でのみ利用されるオブジェクトはスタック領域のフレーム上に生成し、それ以外のオブジェクトはヒープ領域上に生成する実行時ライブラリと、を備えたオブジェクト管理装置。
【請求項２】
中間コードの実行を行う情報処理装置において、アプリケーションプログラムからの生成要求に応じてオブジェクトを生成し、生成したオブジェクトが不要となった場合には消去するというオブジェクトの生成／消去の管理を行うオブジェクト管理装置であって、
メソッドが呼び出されるごとにオブジェクトを格納するためのフレームが生成され、そのメソッドの終了時に解放されるスタック領域と、
メソッドが使用されなくなっても格納されているオブジェクトが自動的に消去されることがないヒープ領域と、
アプリケーションプログラムの起動前に該アプリケーションプログラムの解析を行うことにより、該アプリケーションプログラムによって生成される各オブジェクトが、メソッド内部でのみ利用されるオブジェクトであるか否かをそれぞれ判定し、メソッド内部でのみ利用されると判定されたオブジェクトを生成する命令を、スタック領域のフレーム上にオブジェクトを生成する命令に置き換え、置き換えられたそれらの命令により生成されるオブジェクトの合計サイズを前記アプリケーションプログラムのメソッド管理テーブルに設定する実行時ライブラリと、を備えたオブジェクト管理装置。
【請求項３】
中間コードの実行を行う情報処理装置において、アプリケーションプログラムからの生成要求に応じてオブジェクトを生成し、生成したオブジェクトが不要となった場合には消去するというオブジェクトの生成／消去の管理を行うためのオブジェクト管理方法であって、
アプリケーションプログラムの起動時に呼び出されると、該アプリケーションプログラムの解析を行うことによりその生成される各オブジェクトが、メソッド内部でのみ利用されるオブジェクトであるか否かをそれぞれ判定するステップと、
メソッド内部でのみ利用されるオブジェクトは、メソッドが呼び出されるごとに生成されそのメソッドの終了時に解放されるスタック領域のフレーム上に生成し、それ以外のオブジェクトは、メソッドが使用されなくなっても格納されているオブジェクトが自動的に消去されることがないヒープ領域上に生成するステップと、を備えたオブジェクト管理方法。
【請求項４】
中間コードの実行を行う情報処理装置において、アプリケーションプログラムからの生成要求に応じてオブジェクトを生成し、生成したオブジェクトが不要となった場合には消去するというオブジェクトの生成／消去の管理を行うためのオブジェクト管理方法であって、
アプリケーションプログラムの起動前に該アプリケーションプログラムの解析を行うことにより、該アプリケーションプログラムによって生成される各オブジェクトが、メソッド内部でのみ利用されるオブジェクトであるか否かをそれぞれ判定するステップと、
メソッド内部でのみ利用されると判定されたオブジェクトを生成する命令を、メソッドが呼び出されるごとに生成されそのメソッドの終了時に解放されるスタック領域のフレーム上にオブジェクトを生成する命令に置き換えるステップと、
置き換えられたそれらの命令により生成されるオブジェクトの合計サイズを前記アプリケーションプログラムのメソッド管理テーブルに設定するステップと、を備えたオブジェクト管理方法。
【請求項５】
中間コードの実行を行う情報処理装置において、アプリケーションプログラムからの生成要求に応じてオブジェクトを生成し、生成したオブジェクトが不要となった場合には消去するというオブジェクトの生成／消去の管理を行うためのオブジェクト管理方法をコンピュータに実行させるためのプログラムであって、
アプリケーションプログラムの起動時に呼び出されると、該アプリケーションプログラムの解析を行うことによりその生成される各オブジェクトが、メソッド内部でのみ利用されるオブジェクトであるか否かをそれぞれ判定する処理と、
メソッド内部でのみ利用されるオブジェクトは、メソッドが呼び出されるごとに生成されそのメソッドの終了時に解放されるスタック領域のフレーム上に生成し、それ以外のオブジェクトは、メソッドが使用されなくなっても格納されているオブジェクトが自動的に消去されることがないヒープ領域上に生成する処理と、をコンピュータに実行させるためのプログラム。
【請求項６】
中間コードの実行を行う情報処理装置において、アプリケーションプログラムからの生成要求に応じてオブジェクトを生成し、生成したオブジェクトが不要となった場合には消去するというオブジェクトの生成／消去の管理を行うためのオブジェクト管理方法をコンピュータに実行させるためのプログラムであって、
アプリケーションプログラムの起動前に該アプリケーションプログラムの解析を行うことにより、該アプリケーションプログラムによって生成される各オブジェクトが、メソッド内部でのみ利用されるオブジェクトであるか否かをそれぞれ判定する処理と、
メソッド内部でのみ利用されると判定されたオブジェクトを生成する命令を、メソッドが呼び出されるごとに生成されそのメソッドの終了時に解放されるスタック領域のフレーム上にオブジェクトを生成する命令に置き換える処理と、
置き換えられたそれらの命令により生成されるオブジェクトの合計サイズを前記アプリケーションプログラムのメソッド管理テーブルに設定する処理と、をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する分野】
本発明は、中間コードの実行を行う情報処理装置において、アプリケーションプログラムからの生成要求に応じてオブジェクトを生成し、生成したオブジェクトが不要となった場合には消去するというオブジェクトの生成／消去の管理を行うためのオブジェクト管理装置および方法およびプログラムに関する。
【０００２】
【従来の技術】
中間コードの実行を行うＪａｖａ（登録商標）の仮想マシン（Ｊａｖａ　ＶＭ）等の情報処理装置では、オブジェクト管理装置は、アプリケーションプログラムからの生成要求に応じてオブジェクトを生成し、生成したオブジェクトが不要となった場合には消去するというオブジェクトの生成／消去の管理を行っている。
【０００３】
生成したオブジェクトを格納しておく方法としては、生成したオブジェクトをヒープ領域（ヒープメモリ）と呼ばれるメモリ領域に格納しておく方法と、スタック領域（スタックメモリ）と呼ばれるメモリ領域に格納しておく方法とがある。ヒープ領域上に生成されたオブジェクトは、メソッドが使用されなくなっても自動的に消去されることはない。これに対して、スタック領域のフレームは、メソッドが呼び出されるごとに生成され、そのメソッドの終了時に解放されるようになっている。
【０００４】
上記で説明したような中間コード実行環境では、オブジェクトを生成したプログラムがそのオブジェクトを必要としなくなっても、他のプログラムがそのオブジェクトを必要としている可能性がある。そのため、従来のオブジェクト管理装置では、全てのオブジェクトはヒープ領域上に生成されていた。ヒープ領域上に生成されたオブジェクトは、メソッドが使用されなくなっても自動的に消去されることはない。そのため、他のプログラムはヒープ領域上のオブジェクトを利用することができる。
【０００５】
しかし、ヒープ領域上のオブジェクトをアプリケーションプログラムが解放すると、その時点ではリソースは解放されないため、ガベージコレクションと呼ばれる技術により、そのリソースを解放する必要がある。ここで、ガベージコレクションとは、プログラムが使用しなくなったヒープ領域を回収して再度使用可能にする処理のことである。このガベージコレクションは一般的にオーバーヘッドが大きく、アプリケーションプログラムの実行速度低下の大きな要因となっている。
【０００６】
【発明が解決しようとする課題】
上記で説明したように従来のオブジェクト管理装置では、すべてのオブジェクトをヒープ領域上に作成していたため、使用されなくなったヒープ領域をガベージコレクションにより回収する処理が必要となり、アプリケーションプログラムの実行速度を低下させてしまっているという問題点があった。
【０００７】
本発明の目的は、アプリケーションプログラムの生成要求に応じてオブジェクトを生成した場合、ガベージコレクションを不要にしてアプリケーションプログラムの実行速度を向上することができるオブジェクト管理装置および方法を提供することである。
【０００８】
【課題を解決するための手段】
上記目的を達成するために、本発明のオブジェクト管理装置は、中間コードの実行を行う情報処理装置において、アプリケーションプログラムからの生成要求に応じてオブジェクトを生成し、生成したオブジェクトが不要となった場合には消去するというオブジェクトの生成／消去の管理を行うオブジェクト管理装置であって、
メソッドが呼び出されるごとにオブジェクトを格納するためのフレームが生成され、そのメソッドの終了時に解放されるスタック領域と、
メソッドが使用されなくなっても格納されているオブジェクトが自動的に消去されることがないヒープ領域と、
アプリケーションプログラムの起動時に呼び出されると、該アプリケーションプログラムの解析を行うことによりその生成される各オブジェクトが、メソッド内部でのみ利用されるオブジェクトであるか否かをそれぞれ判定し、メソッド内部でのみ利用されるオブジェクトはスタック領域のフレーム上に生成し、それ以外のオブジェクトはヒープ領域上に生成する実行時ライブラリとを備えている。
【０００９】
また、本発明の他のオブジェクト管理装置は、中間コードの実行を行う情報処理装置において、アプリケーションプログラムからの生成要求に応じてオブジェクトを生成し、生成したオブジェクトが不要となった場合には消去するというオブジェクトの生成／消去の管理を行うオブジェクト管理装置であって、
メソッドが呼び出されるごとにオブジェクトを格納するためのフレームが生成され、そのメソッドの終了時に解放されるスタック領域と、
メソッドが使用されなくなっても格納されているオブジェクトが自動的に消去されることがないヒープ領域と、
アプリケーションプログラムの起動前に該アプリケーションプログラムの解析を行うことにより、該アプリケーションプログラムによって生成される各オブジェクトが、メソッド内部でのみ利用されるオブジェクトであるか否かをそれぞれ判定し、メソッド内部でのみ利用されると判定されたオブジェクトを生成する命令を、スタック領域のフレーム上にオブジェクトを生成する命令に置き換え、置き換えられたそれらの命令により生成されるオブジェクトの合計サイズを前記アプリケーションプログラムのメソッド管理テーブルに設定する実行時ライブラリとを備えている。
【００１０】
本発明は、実行時ライブラリは、アプリケーションプログラムの起動時または起動前に、アプリケーションプログラムを解析することにより、メソッド内部でのみ使用されるオブジェクトであるか否かによりスタック領域のフレーム上に生成可能なオブジェクトかどうかの判定を行い、スタック領域のフレーム上に生成可能なオブジェクトをスタック領域のフレーム上に生成し、それ以外のオブジェクトはヒープ領域上に生成する。このようにすることにより、メソッド内部でのみ使用されるオブジェクトについてはスタック領域のフレーム上に生成され、そのメソッドの終了時に自動的に解放されるため、ガベージコレクションを必要とすることなくオブジェクトのリソースを解放することが可能となり、アプリケーションプログラムの実行速度を向上することができる。
【００１１】
【発明の実施の形態】
次に、本発明の実施の形態について図面を参照して詳細に説明する。
【００１２】
以下では、アプリケーションが、Ｊａｖａ言語により記述されている場合を例としている。
【００１３】
図１は、本発明の一実施形態のオブジェクト管理装置の構成を示すブロック図である。本実施形態のオブジェクト管理装置は、実行時ライブラリ３０と、スタック領域４０と、ヒープ領域２０とから構成され、アプリケーションプログラム１０からのオブジェクト生成要求を受けてオブジェクトを生成し、生成したオブジェクトが不要となった場合には消去するというオブジェクトの生成／消去の管理を行っている。
【００１４】
スタック領域４０は、メソッドが呼び出されるごとにオブジェクトを格納するためのフレームが生成され、そのメソッドの終了時に解放されるメモリ領域である。ヒープ領域２０は、メソッドが使用されなくなっても格納されているオブジェクトが自動的に消去されることがないメモリ領域である。
【００１５】
実行時ライブラリ３０は、アプリケーションプログラム１０の起動時に呼び出されると、このアプリケーションプログラム１０の解析を行うことによりその生成される各オブジェクトが、メソッド内部でのみ利用されるオブジェクトであるか否かをそれぞれ判定し、メソッド内部でのみ利用されるオブジェクトはスタック領域４０のフレーム上に生成し、それ以外のオブジェクトはヒープ領域２０上に生成する。
【００１６】
次に、本実施形態のオブジェクト管理装置において、実行時ライブラリ３０がアプリケーションプログラム１０の解析を行う手順を図２を参照して以下に説明する。
【００１７】
（ステップ１０１）　アプリケーションプログラム１０の起動時に実行時ライブラリ３０が呼び出されると、この実行時ライブラリ３０は、アプリケーションプログラム１０の解析を行う。この解析は以下の流れにより行われる。
【００１８】
（１）　先ず、オブジェクトを生成する命令（ｎｅｗ，　ｎｅｗａｒｒａｙ，　ａｎｅｗａｒｒａｙ）を検索する。
【００１９】
（２）　その命令によって、生成されるオブジェクトが固定サイズかどうか（ｎｅｗによるオブジェクト生成、もしくは、定数値をスタック領域につんだ直後のｎｅｗａｒｒａｙまたはａｎｅｗａｒｒａｙによるオブジェクト生成かどうか）を判定する。
【００２０】
（３）　生成したオブジェクトのリファレンスが、そのメソッドのローカル変数に保存されているかどうかを判定する。
【００２１】
（４）　上記（２）および（３）での判定が両者ともに正の場合（つまり生成されるオブジェクトが固定サイズで、かつ、生成したオブジェクトのリファレンスがそのメソッドのローカル変数に保存されている場合）、そのオブジェクトをメソッドローカルオブジェクトの候補と認識して、そのローカル変数を追跡する。
【００２２】
（５）　そのローカル変数が、そのメソッド以外に渡すような命令（ｐｕｓｈｆｉｅｌｄ命令（インスタンス変数への設定）、ｐｕｓｈｓｔａｔｉｃ命令（スタティック変数への設定）、ａｓｔｏｒｅ命令（配列への設定）、ａｒｅｔｕｒｎ命令（リファレンスのリターン返却）で使用された場合や、ｉｎｖｏｋｅｉｎｔｅｒｆａｃｅ，　ｉｎｖｏｋｅｓｐｅｃｉａｌ，　ｉｎｖｏｋｅｓｔａｔｉｃ，　ｉｎｖｏｋｅｖｉｒｔｕａｌ命令前に引数としてスタック領域にｐｕｓｈされた場合は、それぞれ以下のように対応する。
【００２３】
・ｐｕｓｈｆｉｅｌｄ命令　　そのインスタンス変数が、同じフレームに存在する場合以外は、当該オブジェクトをメソッドローカルの候補から削除する。
【００２４】
・ｐｕｓｈｓｔａｔｉｃ命令　　当該オブジェクトをメソッドローカルの候補から削除する。
【００２５】
・ａｓｔｏｒｅ命令　　　　その配列が、同じフレームに存在する場合以外は、当該オブジェクトをメソッドローカルの候補から削除する。
【００２６】
・ａｒｅｔｕｒｎ命令　　　　当該オブジェクトをメソッドローカルの候補から削除する。
【００２７】
・ｉｎｖｏｋｅｉｎｔｅｒｆａｃｅ命令　　そのオブジェクトをメソッドローカルの候補から削除する。
【００２８】
・ｉｎｖｏｋｅｓｐｅｃｉａｌ命令　　　そのオブジェクトをメソッドローカルの候補から削除する。
【００２９】
・ｉｎｖｏｋｅｓｔａｔｉｃ命令　　呼び出し先メソッドにおいて、引数がメソッドローカルオブジェクトとなりうるか、メソッドの内容を４の手順で追跡する。
【００３０】
・ｉｎｖｏｋｅｖｉｒｔｕａｌ命令　　そのオブジェクトをメソッドローカルの候補から削除する。
【００３１】
（６）　そのメソッドでの追跡が終了しても残っているメソッドローカルオブジェクトとして、オブジェクトを生成する命令（ｎｅｗ，　ｎｅｗａｒｒａｙ，　ａｎｅｗａｒｒａｙ）をスタック領域４０のフレーム４１１、４１２上にオブジェクトを生成する命令（ｎｅｗ＿ｓ，　ｎｅｗａｒｒａｙ＿ｓ，　ａｎｅｗａｒｒａｙ＿ｓ）に置き換え、それらの命令により生成されるオブジェクトの合計サイズをアプリケーションプログラム１０のメソッド管理テーブル１２１、１２２のメソッドローカルオブジェクトサイズに設定する。
【００３２】
次に、本実施形態のオブジェクト管理装置において、オブジェクト生成が行われる際の処理の流れを図３を参照して以下に説明する。
【００３３】
（ステップ２０１〜２０３）　アプリケーションプログラム１０が、あるメソッドを実行した場合（ステップ２０１）、実行時ライブラリ３０はメソッド管理テーブル１２１の当該メソッドのレコードから、そのメソッドに必要なフレームサイズを求め（ステップ２０２）、スタック領域４０上にそのサイズのフレーム４１１を確保する（ステップ２０３）。
【００３４】
（ステップ３０１、３０２）　アプリケーションプログラム１０が、スタック領域のフレーム上にオブジェクトを生成する命令（ｎｅｗ＿ｓ，　ｎｅｗａｒｒａｙ＿ｓ，　ａｎｅｗａｒｒａｙ＿ｓ）を実行した場合（ステップ３０１）、実行時ライブラリ３０は、スタック領域４０のフレーム４１１上に確保された領域にオブジェクト４２を生成し、そのリファレンスを返却する（ステップ３０２）。
【００３５】
アプリケーションオブジェクトがメソッドの実行を終了するときに、スタック領域４０上のフレーム４１１は破棄されるため、メソッドローカルオブジェクトのために確保されたリソースは、この時点で同時に解放される。
【００３６】
本実施形態のオブジェクト管理装置によれば、実行時ライブラリ３０は、アプリケーションプログラム１０の起動時に、アプリケーションプログラム１０を解析することにより、メソッド内部でのみ使用されるオブジェクトであるか否かによりスタック領域４０のフレーム上に生成可能なオブジェクトかどうかの判定を行い、スタック領域４０のフレーム上に生成可能なオブジェクトをスタック領域４０のフレーム上に生成し、それ以外のオブジェクトはヒープ領域２０上に生成する。このようにすることにより、メソッド内部でのみ使用されるオブジェクトについてはスタック領域４０のフレーム上に生成され、そのメソッドの終了時に自動的に解放されるため、ガベージコレクションを必要とすることなくオブジェクトのリソースを解放することが可能となり、アプリケーションプログラム１０の実行速度を向上することができる。
【００３７】
本実施形態のオブジェクト管理装置では、実行時ライブラリ３０は、アプリケーションプログラム１０の起動時にアプリケーションプログラム１０の解析を行うものとして説明したが、実行時ライブラリ３０は、アプリケーションプログラム１０の起動前にアプリケーションプログラム１０の解析を行うようにしてもよい。この場合には、実行時ライブラリ３０は、アプリケーションプログラム１０の解析を行うことにより、このアプリケーションプログラム１０によって生成される各オブジェクトが、メソッド内部でのみ利用されるオブジェクトであるか否かをそれぞれ判定し、メソッド内部でのみ利用されると判定されたオブジェクトを生成する命令を、スタック領域のフレーム上にオブジェクトを生成する命令に置き換え、置き換えられたそれらの命令により生成されるオブジェクトの合計サイズをアプリケーションプログラム１０のメソッド管理テーブルに設定するようにすればよい。
【００３８】
また、図には示されていないが、本実施形態のオブジェクト管理装置は、上記で説明したオブジェクト管理方法を実行するためのプログラムを記録した記録媒体を備えている。この記録媒体は磁気ディスク、半導体メモリまたはその他の記録媒体であってもよい。このプログラムは、記録媒体からオブジェクト管理装置に読み込まれ、オブジェクト管理装置の動作を制御する。具体的には、オブジェクトプーリング装置内のＣＰＵがこのプログラムの制御によりオブジェク管理装置のハードウェア資源に特定の処理を行うように指示することにより上記の処理が実現される。
【００３９】
【発明の効果】
以上説明したように、本発明によれば、中間コードを実行する情報処理装置上でアプリケーションプログラムが、メソッド内部でのみ利用されるオブジェクトを生成する場合、そのオブジェクトをスタック領域のフレーム上に確保することにより、ガベージコレクションによらずオブジェクトを解放することが可能となり、ガベージコレクションのオーバーヘッドを削減することが可能となる。
【図面の簡単な説明】
【図１】本発明の一実施形態のオブジェクト管理装置の構成を示すブロック図である。
【図２】本発明の一実施形態のオブジェクト管理装置において、実行時ライブラリ３０がアプリケーションプログラム１０の解析を行う手順を示す図である。
【図３】本発明の一実施形態のオブジェクト管理装置において、オブジェクト生成が行われる際の処理の流れを示す図である。
【符号の説明】
１０　　アプリケーションプログラム
１１１、１１２　　クラス
１２１、１２２　　メソッド管理テーブル
２０　　ヒープ領域
２１１、３１２　　オブジェクト
３０　　実行時ライブラリ
４０　　スタック領域
４１１、４１２　　フレーム
４２　　オブジェクト
【図１】
2004078750.tif 000003
【図２】
2004078750.tif 000004
【図３】
2004078750.tif 000005