JP2011013985A - プログラム、装置、および方法 - Google Patents

プログラム、装置、および方法 Download PDF

Info

Publication number
JP2011013985A
JP2011013985A JP2009158204A JP2009158204A JP2011013985A JP 2011013985 A JP2011013985 A JP 2011013985A JP 2009158204 A JP2009158204 A JP 2009158204A JP 2009158204 A JP2009158204 A JP 2009158204A JP 2011013985 A JP2011013985 A JP 2011013985A
Authority
JP
Japan
Prior art keywords
writing
write
code
target program
optimized
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2009158204A
Other languages
English (en)
Inventor
Motohiro Kawahito
基弘 川人
Takeshi Ogasawara
武史 小笠原
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2009158204A priority Critical patent/JP2011013985A/ja
Priority to US12/826,820 priority patent/US8336039B2/en
Publication of JP2011013985A publication Critical patent/JP2011013985A/ja
Priority to US13/671,958 priority patent/US8479182B2/en
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages

Abstract

【課題】不変オブジェクトに対する書き込みの発生を検出しない非検出書込処理により管理情報をアクセスしてオブジェクトを管理する。
【解決手段】対象プログラムを実行させるための装置であって、オブジェクトの値およびオブジェクトの管理情報を対応付けて記憶する記憶部と、対象プログラムから、オブジェクトの値が不変であることを条件として最適化した最適化コードと、オブジェクトの値が変更された場合に実行される非最適化コードとを生成するコード生成部と、対象プログラムを最適化コードにより実行させている場合において、オブジェクトに対する値の書き込みが発生したことに応じて、対象プログラムの実行を、最適化コードによる実行から非最適化コードによる実行に切り替える切替部と、オブジェクトに対する書き込みの発生を検出しない非検出書込処理により管理情報をアクセスしてオブジェクトを管理する管理部と、を備える装置を提供する。
【選択図】図1

Description

本発明は、プログラム、装置、および方法に関する。
オブジェクト指向言語の1つであるJava(登録商標)においては、JVM(Java(登録商標) Virtual Machine)は、中間言語で記述されたJava(登録商標)プログラムであるバイト・コードを、インタープリタによって実行することに代えて、プロセッサが直接実行できるネイティブ・コードにコンパイルして、より高速に実行させる。
米国特許出願公開第2006/0155791号公報
Ajeet Shankar et al., Runtime Specialization With Optimistic Heap Analysis, OOPSLA'05, October 16−20, 2005, San Diego, California, USA.
JVMがバイト・コードをコンパイルする場合、当該バイト・コードがアクセスするオブジェクトの値が一定期間不変であると仮定することにより最適化が可能な場合がある。そこで、JVMは当該最適化を行うとともに、当該オブジェクトへの書き込みを検出したら当該最適化を無効とする。その場合、ソフトウェアによる書き込みの検出は、検出の処理コストが高い。また、ページ保護機構を使った書き込みの検出は、領域の属性を書込可能にして再び元に戻す属性変更コストと、そのためのスレッド停止のコストが問題となる。
上記課題を解決するために、本発明の第1の態様においては、コンピュータにより対象プログラムを実行させるためのプログラムであって、当該プログラムは、コンピュータを、オブジェクトの値およびオブジェクトの管理情報を対応付けて記憶する記憶部と、対象プログラムから、オブジェクトの値が不変であることを条件として最適化した最適化コードと、オブジェクトの値が変更された場合に実行される非最適化コードとを生成するコード生成部と、対象プログラムを最適化コードにより実行させている場合において、オブジェクトに対する値の書き込みが発生したことに応じて、対象プログラムの実行を、最適化コードによる実行から非最適化コードによる実行に切り替える切替部と、オブジェクトに対する書き込みの発生を検出しない非検出書込処理により管理情報をアクセスしてオブジェクトを管理する管理部として機能させるプログラムを提供する。
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではない。また、これらの特徴群のサブコンビネーションもまた、発明となりうる。
図1は、本実施形態に係る装置100の構成の一例を示す。 図2は、本実施形態に係る記憶部120の構成の一例を示す。 図3Aは、本実施形態において、コード生成部130が最適化コードを生成する対象であるJava(登録商標)プログラムの一例を示す。 図3Bは、本実施形態において、コード生成部130が生成する最適化コードで使用される命令の擬似コードの一例を示す。 図3Cは、本実施形態において、図3AのJava(登録商標)プログラムに対してコード生成部130が生成する最適化コードの擬似コードの一例である。 図4Aは、本実施形態において、コード生成部130が最適化コードを生成する対象であるJava(登録商標)プログラムの他の一例を示す。 図4Bは、本実施形態において、図4AのJava(登録商標)プログラムに対してコード生成部130が生成する最適化コードの擬似コードの一例である。 図5Aは、本発明の第1の実施形態に係る、コード生成部130の処理フローの一例を示す。 図5Bは、本発明の第1の実施形態に係る、切替部150の処理フローの一例を示す。 図5Cは、本発明の第1の実施形態に係る、切替部150および書込検出部160の処理フローの一例を示す。 図6は、本発明の第2の実施形態に係る記憶部120の一例を示す。 図7Aは、本発明の第2の実施形態に係る、コード生成部130の処理フローの一例を示す。 図7Bは、本発明の第1の実施形態に係る、切替部150の処理フローの一例を示す。 図7Cは、本発明の第2の実施形態に係る、切替部150および書込検出部160の処理フローの一例を示す。 図8Aは、本実施形態に係る、ステップS720の後の記憶部120の一例を示す。 図8Bは、本実施形態に係る、ステップS722の後の記憶部120の一例を示す。 図9は、本実施形態に係るコンピュータ1900のハードウェア構成の一例を示す。
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではない。また、実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
図1は、本実施形態に係る装置100の構成の一例を示す。装置100は、コード格納部110、記憶部120、コード生成部130、コード実行部140、切替部150、書込検出部160、管理部170、および書込処理部180を備える。コード格納部110は、装置100が実行するプログラム・コードを格納する。コード格納部110は、コンピュータが備えるハードディスク・ドライブ等の不揮発性格納装置であってもよい。コード格納部110は、プログラム・コードとして、Java(登録商標)言語のバイト・コードのような中間コードを格納してもよい。
記憶部120は、オブジェクトの値およびオブジェクトの管理情報を対応付けて記憶する。ここで、記憶部120は、コンピュータが備えるメモリであってもよい。また、記憶部120は、オブジェクトとして、Java(登録商標)言語のクラス・インスタンスのメモリ・イメージを記憶してもよい。記憶部120は、オブジェクトの管理情報を、オブジェクト・データの近傍(例えば直前、同一ページ)に配置されるオブジェクト・ヘッダに格納してもよい。
コード生成部130は、対象プログラムから、オブジェクトの値が不変であることを条件として最適化した最適化コードと、オブジェクトの値が変更された場合に実行される非最適化コードとを生成する。コード生成部130は、JVMによって実現されてもよい。コード生成部130は、対象プログラムの実行時に、当該対象プログラムの実行プロファイルに基づいて、当該オブジェクトに対応するクラスの中間コードである対象プログラムから最適化コードおよび/または非最適化コードを生成してもよい。
コード実行部140は、対象プログラムを実行する。コード実行部140は、JVMによって実現されてもよい。コード実行部140は、コード生成部130によって生成された最適化コードまたは非最適化コードを実行してもよい。
切替部150は、対象プログラムを非最適化コードによる実行から最適化コードによる実行に切り替える場合に、オブジェクトの値に対する書き込みの発生を検出可能に設定してもよい。切替部150は、例えばシステム・コールAPIを利用して、仮想メモリ機構で利用されるページ・テーブル・エントリ(PTE)内に格納される特権レベル・フィールドおよび/または書き込み禁止を指示するアクセス権フィールド等のページ属性を設定することによって、オブジェクトの値に対する書き込みの発生を、書込命令の特権違反例外およびアクセス権違反例外等の例外として検出可能に設定してもよい。
書込検出部160は、記憶部120に対してアクセスした書込命令を検出する。切替部150は、システム・コールAPIを利用して、書込命令が発生する特権違反例外またはアクセス権違反例外に応じて実行されるSEGV(Segmentation Violation)ハンドラ等、書込命令が発生する例外に応じて実行されるハンドラとして、書込検出部160を予め登録してもよい。書込検出部160は、最適化コードまたは非最適化コードの実行に係る特権レベルよりも高い特権レベルを伴う書込のみを許可してもよい。
切替部150は、対象プログラムを最適化コードにより実行させている場合において、オブジェクトに対する値の書き込みが発生したことに応じて、対象プログラムの実行を、最適化コードによる実行から非最適化コードによる実行に切り替える。切替部150は、SEGVハンドラにおいて、当該対象プログラムの最適化コードによる実行を非最適化コードによる実行に切り替えてもよい。こうすると、書き込みが発生しない限り、コード実行部140は最適化コードを実行可能となる。
管理部170は、オブジェクトに対する書き込みの発生を検出しない非検出書込処理により管理情報をアクセスしてオブジェクトを管理する。管理部170は、オブジェクトに対応するページの特権レベルよりも高い特権レベルの書込命令等の、特権違反例外を発生しない書込命令を使用して、オブジェクトの管理情報にアクセスしてもよい。管理部170は、アクセス権違反例外を発生しない論理メモリ空間内のアドレスを使用して、オブジェクトの管理情報にアクセスしてもよい。こうすると、管理部170によるオブジェクトに対する書き込みを書込検出部160が検出しないので、管理部170は当該オブジェクトの管理情報をより高速にアクセスできる。
書込処理部180は、書込禁止仮想領域を介したオブジェクトに対する書き込みが検出されたことに応じて、書込許可仮想領域を介して当該書き込みを実行する。書込処理部180は、アクセス権違反例外を発生しない論理メモリ空間内のアドレスを使用して、オブジェクトの管理情報にアクセスしてもよい。こうすると、書込検出部160は書込処理部180によるオブジェクトに対する書き込みを検出しないので、管理部170は管理情報をより高速にアクセスできる。
図2は、本実施形態に係る記憶部120の構成の一例を示す。記憶部120は、ヒープ210を有する。記憶部120は、1または複数のオブジェクト・ポインタ(oop)220a〜cを有してもよい。ヒープ210は、対象プログラムによって使用されるオブジェクト等を記憶する領域である。
ヒープ210は、1または複数のオブジェクト212a〜bを有する。1または複数のオブジェクト212a〜bは、それぞれオブジェクト・ヘッダ214a〜bを含む。オブジェクト・ポインタ220a〜cは、それぞれオブジェクト212a〜bの1つのアドレスを保持する。オブジェクト・ポインタ220a〜cは、一例としてそれぞれがオブジェクト212a〜bの1つへの参照(reference)であってもよい。
記憶部120は、オブジェクト212a〜bの各々に対して、当該オブジェクトのロックを保持するスレッドのスレッドIDを、オブジェクト・ヘッダ214a〜bに記憶してもよい。アプリケーション・スレッドの停止期間を最小化するように設計されたコンカレントGC(ガベッジ・コレクタ)によって切替部150が実現される場合、記憶部120は、オブジェクト212a〜bの各々に対して、コンカレントGCが利用する状態変数を、オブジェクト・ヘッダ214a〜bに記憶してもよい。
記憶部120は、オブジェクトの管理情報の一部として、オブジェクトを最適化対象とするか否かを示す最適化情報を記憶する。記憶部120は、最適化情報として、オブジェクト212a〜bがライト・バリア(write barrier)の設定対象であることを指示するbecome_barrierフラグを、当該オブジェクトのオブジェクト・ヘッダ214a〜bに記憶してもよい。
図3Aは、本実施形態において、コード生成部130が最適化コードを生成する対象であるJava(登録商標)プログラムの一例を示す。図3AのJava(登録商標)プログラムは、入力された配列aに対して、aの値を変換表mapで変換した値が1に等しくなるまで、プロセッサに配列a内を探索させる。
図3Bは、本実施形態において、コード生成部130が生成する最適化コードで使用される命令の擬似コードの一例を示す。より詳細には、図3Bは、IBM System z(登録商標)が有するTRT(Translation and Test)命令の擬似コードを示す。TRT命令は、第1オペランドで与えられる配列aに対して、第2オペランドで与えられる変換表tableによる変換値が値0と異なるまで、プロセッサに配列a内を探索させる。このように、プロセッサがマイクロ・プログラムを使用して処理するCISC命令を、コード生成部130は、生成する最適化コードにおいて利用してもよい。
図3Cは、本実施形態において、図3AのJava(登録商標)プログラムに対してコード生成部130が生成する最適化コードの擬似コードの一例である。記憶部120は、オブジェクトの管理情報の少なくとも一部として、対象プログラムからオブジェクトの値への書き込みが制限されているか否かを示す書込制限情報を記憶してもよい。記憶部120は、当該書込制限情報として、対応するオブジェクトが書込禁止であることを指示するread_onlyフラグを、当該オブジェクトのオブジェクト・ヘッダに記憶してもよい。図3Cの擬似コードにおいては、変換表mapが、read_onlyフラグを有している。
切替部150は、対象プログラムを非最適化コードにより実行させる場合に対象プログラムからオブジェクトの値への書き込みが制限されていない旨の書込制限情報をオブジェクトの管理情報内に書き込み、対象プログラムを最適化コードにより実行させる場合に対象プログラムからオブジェクトの値への書き込みが制限されている旨の書込制限情報をオブジェクトの管理情報内に書き込む。切替部150は、当該書込制限情報として当該オブジェクトのread_onlyフラグの値に書き込んでもよい。
管理部170は、対象プログラムからオブジェクトの値への書き込みが制限されている旨の書込制限情報が記憶されている場合に対象プログラムを最適化コードにより実行させ、対象プログラムからオブジェクトの値への書き込みが制限されていない旨の書込制限情報が記憶されている場合に対象プログラムを非最適化コードにより実行させる。管理部170は、対象オブジェクトのread_onlyフラグに依存する最適化コードおよび非最適化コードの間の分岐コードとして実現されてもよい。また、管理部170は、これに代えて、当該オブジェクトのクラスが有するメソッド毎に、当該メソッドをパラメータとするinvokevirtual命令によって呼び出される最適化コードまたは非最適化コードのアドレスを保持する複数の仮想メソッド・テーブルを切り替えることによって実現されてもよい。
コード生成部130は、TRT命令を利用して図3AのJava(登録商標)プログラムを最適化することを目的として、変換表mapに対応する配列compiler_mapを作成する最適化コードを生成してもよい。コード生成部130は、TRT命令および配列compiler_mapを利用しない非最適化コードと、当該最適化コードおよび当該非最適化コードの間の分岐コードとをさらに生成してもよい。
コード実行部140は、変換表mapが新たに書き換えられない限り、一度作成された配列compiler_mapを何度でも利用できる。変換表mapに対応するread_onlyフラグがセットされている(値がtrueである)場合、変換表mapは新たに書き換えられていないものとみなし、コード実行部140は、TRT命令および配列compiler_mapを利用して配列a内を探索する。一方、変換表mapに対応するread_onlyフラグがセットされていない(値がfalseである)場合、コード実行部140は、変換表mapが新たに書き換えられたものとみなし、TRT命令および配列compiler_mapを利用しない非最適化コードを実行する。
図4Aは、本実施形態において、コード生成部130が最適化コードを生成する対象であるJava(登録商標)プログラムの他の一例を示す。当該Java(登録商標)プログラムは、Java(登録商標) Grande Forumが配布するベンチマーク・スイートの一部である。
図4Bは、本実施形態において、図4AのJava(登録商標)プログラムに対してコード生成部130が生成する最適化コードの擬似コードの一例である。当該Java(登録商標)プログラム内で、変数size、配列datasizes_M、配列datasizes_N、および配列datasizes_nzに対応するread_onlyフラグがセットされている場合、コード生成部130は、最適化コードにおいて、配列rowおよび配列colの値を求める剰余演算に代えて、定数による剰余演算を実行してもよい。こうすると、配列境界チェックおよびロード命令を省略または減少することにより、コード実行部140は当該Java(登録商標)プログラムをより高速に実行できる。さらに、コード生成部130は、定数による剰余演算に代えて、定数による乗算および加減算を利用する最適化コードを生成してもよい。こうすると、コード実行部140は、剰余演算を使用しない分だけ、当該Java(登録商標)プログラムをさらに高速に実行できる。
図5Aは、本発明の第1の実施形態に係る、コード生成部130の処理フローの一例を示す。まず、コード生成部130は、オブジェクトの値が不変であることを条件として最適化する場合に、オブジェクトを最適化対象とする旨を示す最適化情報をオブジェクトに対して設定する(S510)。コード生成部130は、当該オブジェクトに対応するオブジェクト・ヘッダ内のbecome_barrierフラグをセットしてもよい。オブジェクトの対象プログラムがメソッドである場合、コード生成部130は、メソッドの呼出しプロファイルに基づいて、オブジェクトの値が不変であると仮定してもよい。
また、コード生成部130は、メソッドの呼出しプロファイルを参照してbecome_barrierフラグをセットしたオブジェクトへの書込命令を確認した場合に、become_barrierフラグをリセットしてもよい。これにより、オブジェクトの値に対する書込命令が実行される蓋然性が高い場合、コード生成部130は当該オブジェクトを最適化対象から外すことができる。
次に、コード生成部130は、become_barrierフラグがセットされたオブジェクトの対象プログラムの最適化コードを生成する(S515)。ステップS620において、コード生成部130は、対象プログラムによるオブジェクトの値への書き込みを非特権書込命令に変換する。ここで、非特権書込命令とは、非特権書込禁止領域に対する書込みが特権違反例外を発生する命令である。非特権書込命令による非特権書込禁止領域に対する書込みが発生した場合に、書込検出部160は、当該書込みの対象アドレスおよび対象データを特権違反例外とともに検出可能であってもよい。
ここで、管理部170は、オブジェクトの管理情報に対する書き込みを特権書込命令により処理してもよい。特権書込命令とは、非特権書込禁止領域に対する書き込みが許可されている命令である。
図5Bは、本発明の第1の実施形態に係る、切替部150の処理フローの一例を示す。まず、切替部150は、記憶部120に記憶された複数のオブジェクトのそれぞれを検査して対象プログラムにより使用されていないオブジェクトを記憶部120内から解放するガベージ・コレクション中において、オブジェクトの対象プログラムを最適化コードにより実行させることを指示するbecome_barrierフラグがセットされているかどうかを判定する(S520)。
オブジェクトの対象プログラムを最適化コードにより実行させる場合に、切替部150は、当該オブジェクトにライト・バリアを設定することを目的として、当該オブジェクトを、記憶部120内において、特権書込命令による書き込みの発生を検出せず、非特権書込命令による書き込みの発生を検出する非特権書込禁止領域に配置する(S522)。一例では、become_barrierフラグがセットされている場合(S520:Yes)、切替部150は、当該ガベージ・コレクション中において、検査対象である書込許可領域のオブジェクトに対応付けてオブジェクトを最適化する旨を示す最適化情報が記憶されている場合に、オブジェクトを非特権書込禁止領域に移動させる(S522)。
続いて、切替部150は、オブジェクトに対応付けてオブジェクトを最適化対象とする旨を示す最適化情報が記憶されている場合に、対象プログラムを最適化コードによる実行に切り替える(S524)。切替部150は、当該オブジェクトのread_onlyフラグをセットすることによって、対象プログラムを最適化コードによる実行に切り替えてもよい。
一方、オブジェクトのbecome_barrierフラグがセットされておらず、対象プログラムを非最適化コードにより実行させる場合(S520:No)、切替部150は、当該オブジェクトを、記憶部120内において、特権書込命令および非特権書込命令による書込の発生を検出しない書込許可領域に配置する(S526)。
図5Cは、本発明の第1の実施形態に係る、切替部150および書込検出部160の処理フローの一例を示す。書込検出部160は、非特権書込禁止領域に配置されたオブジェクトへの書き込みを検出したときに、切替部150に当該書き込みの発生を通知する(S530)。
切替部150は、非特権書込禁止領域に配置したオブジェクトに対する書き込みが発生したことに応じて、当該オブジェクトに対して、オブジェクトの値への書き込みが制限されていない旨を示す書込制限情報および当該オブジェクトを最適化対象としない旨を示す最適化情報を設定する。一例では、書込検出部160から通知された書き込みの発生に対して、切替部150は対応するオブジェクトのread_onlyフラグおよびbecome_barrierフラグをリセットする(S532)。こうすると、コード実行部140は、当該オブジェクトに対して非最適化コードを実行する。
切替部150は、ガベージ・コレクション中において、検査対象である非特権書込禁止領域のオブジェクトに対応付けて、オブジェクトを最適化しない旨を示す最適化情報が記憶されている場合に、オブジェクトを書込許可領域に移動させてもよい。一例では、切替部150は、ガベージ・コレクション中において、become_barrierがリセットされた非特権書込禁止領域内のオブジェクトを書込許可領域に移動して、対応するread_onlyフラグをリセットし、対応するオブジェクト・ポインタを更新してもよい(S534)。切替部150は、ガベージ・コレクション中において、ヒープ内の1つまたは複数のオブジェクトをマーク・アンド・スイープするときに、当該移動を実施しても良い。こうすると、切替部150は、本実施形態に伴うオブジェクトの移動回数の増加を抑制できる。
図6は、本発明の第2の実施形態に係る記憶部120の一例を示す。切替部150は、対象プログラムを最適化コードにより実行させる場合に、オブジェクトを、仮想メモリ空間上における書き込みを禁止する書込禁止仮想領域および書き込みを許可する書込許可仮想領域の両方にマッピングされた物理メモリ領域に配置する。記憶部120は、ヒープ210内に1または複数のオブジェクト212a〜bを有する。さらに、記憶部120は、仮想メモリ空間上における書き込みを禁止する書込禁止仮想領域の一例であるConstant objects reference area(CORA)610、仮想メモリ空間上における書き込みを許可する書込許可仮想領域の一例であるConstant objects copy area(COCA)620、およびCORA610およびCOCA620の両方にマッピングされる物理メモリ領域630、および値が不変であると仮定されたオブジェクトが登録されるConstant objects remenber set(CORS)640を有する。
例えば、商用Unix(登録商標)の1つであるAIX(登録商標)において、共有メモリ空間を確保するshmatシステム・コールAPIを利用することによって、切替部150は、物理メモリ領域630にマッピングされたCOCA620を予め確保してもよい。さらに、書込禁止領域の確保を指示するSHM_RDONLYフラグと共にshmatシステム・コールAPIを利用することによって、切替部150は、同一の物理メモリ領域630にマッピングされたCORA610を予め確保してもよい。
ここで、切替部150は、最適化対象となる複数のオブジェクトのそれぞれが記憶される書込禁止仮想領域内のアドレス位置および書込許可仮想領域内のアドレス位置を、仮想メモリ空間上において予め設定されたオフセット分ずらして配置してもよい。こうすると、切替部150は、当該オフセットの加減算によって、書込禁止仮想領域内のアドレス位置および書込許可仮想領域内のアドレス位置を容易に変換できる。
図7Aは、本発明の第2の実施形態に係るコード生成部130の処理フローの一例を示す。まず、コード生成部130は、値が不変であると仮定するオブジェクトを切替部150に通知する(S710)。ステップS510と同様、コード生成部130は、当該オブジェクトに対応するオブジェクト・ヘッダ内のbecome_barrierフラグをセットすることによって、切替部150に通知してもよい。
オブジェクトの値が不変であると仮定するか否かを判定することを目的として、コード生成部130は、当該オブジェクトに対応するクラスが有するメソッドの呼出しプロファイルを利用してもよい。例えば、Java(登録商標)言語の標準ライブラリに含まれるクラスの1つであるHashtableクラスのオブジェクトに対して、コード生成部130は、当該オブジェクトが保持するキー値に対して対応するオブジェクトを返すgetメソッドが所定の期間に多数呼ばれていると判定したときに、getメソッドの最適化コードを生成してもよい。コード生成部130は、メソッドの呼出しプロファイルとして、当該メソッドの呼出し地点(call site)に複数のメソッド・ルック・アップ結果を保持するpolymorphic inline cache(PIC)を利用してもよい。
次に、コード生成部130は、値が不変であると仮定するオブジェクトの対象プログラムの最適化コードを生成する(S715)。コード生成部130は、対象プログラムによる当該オブジェクトの値への書き込みを、書込禁止仮想領域を介して処理させるコードを生成してもよい。
図7Bは、本発明の第1の実施形態に係る、切替部150の処理フローの一例を示す。まず、切替部150は、ガベッジ・コレクション中において、become_barrierフラグがセットされたオブジェクトを、CORS640に登録する(S720)。切替部150は、当該オブジェクトを指示するオブジェクト・ポインタをCORS640に登録してもよい。
次に、切替部150は、ガベッジ・コレクション中において、当該オブジェクトをCOCA620に移動し、当該オブジェクトのread_onlyフラグをセットし、対応するオブジェクト・ポインタを更新する(S722)。切替部150は、第1の実施形態と同様、ガベージ・コレクション中において、ヒープ内のオブジェクトをマーク・アンド・スイープするときに、当該移動を実施しても良い。こうすると、切替部150は、本実施形態の実施に伴うオブジェクトの移動回数の増加を抑制できる。
管理部170は、書込許可仮想領域を介してオブジェクトの管理情報への書き込みを処理してもよい。これにより、管理部170は、書込検出部160による書き込み検出を回避できる。
また、管理部170は、オブジェクトの書込禁止仮想領域内のアドレス位置およびオフセットから書込許可仮想領域内のアドレス位置を算出して、算出したアドレス位置を用いてオブジェクトの管理情報を書き込んでもよい。これにより、管理部170は、オフセット・アドレス値指定付き書込命令と、オブジェクトの書込禁止仮想領域内のアドレスとを使用して、書込許可仮想領域からオブジェクト管理情報を書き込むことができる。また、管理部170は、オブジェクトの管理情報への書込頻度が予め設定された基準頻度未満の場合に書込禁止仮想領域を介してオブジェクトの管理情報へ書き込み、書込頻度が基準頻度以上の場合においてはオブジェクトが書込禁止仮想領域および書込許可仮想領域にマッピングされた物理メモリ領域に配置されていることを条件として書込許可仮想領域を介してオブジェクトの管理情報へ書き込んでもよい。
図7Cは、本発明の第2の実施形態に係る、切替部150および書込検出部160の処理フローの一例を示す。まず、書込検出部160は、オブジェクトへの書き込みの発生を切替部150に通知する(S730)。
次に、切替部150は、当該通知に応じて、コード実行部140に全スレッドを停止させる(S732)。切替部150がオブジェクト・ポインタを安全に更新すること等を目的として、コード実行部140は、全てのGCルートがGCに観測可能であり、ヒープ内の全てのオブジェクトが整合していることが保証される最適化または非最適化コード内の点であるセーフ・ポイント(safepoint)において、各スレッドを停止してもよい。
次に、切替部150は、対象プログラムを非最適化コードにより実行させる場合に、オブジェクトを、記憶部120内において、書込許可仮想領域にマッピングされた物理メモリ領域に移動させる。一例では、切替部150は、書き込みの発生が通知されたオブジェクトをCOCA620外のヒープ210に移動し、当該オブジェクトに対応するオブジェクト・ポインタを更新する(S734)。次に、切替部150は、CORS640への当該オブジェクトの登録を削除する(S736)。
次に、コード実行部140に当該オブジェクトの対象プログラムを非最適化コードにより実行させることを目的として、切替部150は当該オブジェクトのread_onlyフラグおよびbecome_barrierフラグをリセットし、全スレッドの停止を解除する(S738)。
なお、ステップS715において、コード生成部130は、生成する最適化コードにおいて、切替部150によって書込禁止仮想領域に配置されたオブジェクトのロックを取得するための待機用コードを外し、それに代えて、例えばJava(登録商標)プログラムにおける当該オブジェクトをパラメータとするsynchronizedブロックである、当該ロックに対応するコード・ブロックの前後に、セーフ・ポイントを配置してもよい。また、コード生成部130は、生成する最適化コードにおいて、オブジェクトのロックを取得するための待機用コードを外すことに代えて、当該オブジェクトのread_onlyフラグの値がfalseである場合に、コード実行部140に当該待機用コードを実行させる分岐コードを生成してもよい。さらに、synchronizedブロック内において、実行スレッドが待機(wait)する可能性がある場合、コード生成部130は、当該synchronizedブロックの直前で当該オブジェクトのread_onlyフラグの値をfalseにするコードを挿入してもよい。
さらに、ステップS732において、書込検出部160が検出した書込みを行ったスレッドが対象オブジェクトのロックを保持していないならば、切替部150は、コード実行部140に、当該オブジェクトのロックを保持する実行中のスレッドを、当該ロックに対応するコード・ブロック外のセーフ・ポイントで停止させるとともに、それら以外の実行中のスレッドを、次のセーフ・ポイントで停止させてもよい。また、当該書込みを行ったスレッドが対象オブジェクトのロックを保持しているならば、切替部150は、コード実行部140に、他の実行中のスレッドを、次のセーフ・ポイントで停止させてもよい。
コード実行部140は、各スレッドが対象オブジェクトのロックを保持するか否かを判定することを目的として、各スレッドが到達するセーフ・ポイントにおいて、当該オブジェクトが、当該スレッドによってロックが保持される全てのオブジェクトを登録したハッシュ・テーブルに含まれるか否かを判定してもよい。具体的には、コード実行部140は、ロックが保持される全てのオブジェクトのポインタを管理するハッシュ・テーブル等の中に、対象オブジェクトのポインタが含まれるか否かを判定する。また、当該スレッドによってロックが保持される全てのオブジェクトの数が十分少ない場合、コード実行部140は、ハッシュ・テーブル等を使用することに代えて、ポインタ値の直接比較によって、各スレッドが対象オブジェクトのロックを保持するか否かを判定してもよい。こうすると、コード実行部140は、処理コストの高いロックが外された最適化コードを実行できる。このことは、例えば、Java(登録商標)標準ライブラリにおいて多用され、かつ実行時にロックを取得する、Hashtableクラスが有するgetメソッドの、特に多スレッド環境におけるボトルネックの解消に対して効果的である。
図8Aは、本発明の第2の実施形態に係る、ステップS720の後の記憶部120の一例を示す。より詳細には、図8Aは、ステップS720において、become_barrierフラグがセットされたオブジェクト212aを、切替部150がCORS640に登録した後の記憶部120の一例を示す。CORS640は、値が不変であると仮定されたオブジェクト212aの論理アドレスを保持するオブジェクト・ポインタ220aを有する。
図8Bは、本発明の第2の実施形態に係る、ステップS722の後の記憶部120の一例を示す。より詳細には、図8Aは、ステップS722において、become_barrierフラグがセットされたオブジェクト212aを、オブジェクト212aのコピーであるオブジェクト812aを生成することによって切替部150が移動し、オブジェクト812aを指示するオブジェクト・ポインタ820aを、切替部150がCORS640に登録した後の記憶部120の一例を示す。物理メモリ領域630は、オブジェクト812aの実体であるオブジェクト812bを格納する。オブジェクト812bは、COCA620の領域に、オブジェクト812cとして自動的にマッピングされる。管理部170は、オブジェクト812cにアクセスすることによって、オブジェクト812bの管理情報に書き込み処理してもよい。
なお、第1の実施形態および第2の実施形態において、コード実行部140が非特権書込禁止領域または書込禁止仮想領域に書き込みを行ったときにコンディション・フラグをセットする書込命令を、装置100が有する場合、アクセス例外の発生確率とアクセス例外の処理コストと、当該コンディション・フラグのチェックに要する処理コストとに基づいて、コード生成部130は、非特権書込禁止領域への非特権書込命令または書込禁止仮想領域へ書込命令に代えて、当該コンディション・フラグをセットする書込命令を利用する最適化コードを生成してもよい。
コード生成部130は、コンディション・フラグをセットする書込命令として、例えばST(Addr),data,cont_regのような形式の書込命令を利用する最適化コードを生成してもよい。ここで、cond_regはコンディション・フラグを格納するレジスタを指定するオペランドである。書込命令が成功した場合、プロセッサはcond_regに値0を設定してもよい。また、書込命令が失敗した場合、プロセッサはcond_regに対応する例外を指示する値を設定してもよい。例外は、例えばSEGV例外およびページ・フォールト(PF)例外等の、書込命令の結果に依存して発生しうる任意の例外であってもよい。
書込検出部160は、例外の発生を検出することに代えて、コンディション・フラグをセットする書込命令を実行した後に、cond_regがセットされていることを検出してもよい。書込検出部160は、コンディション・フラグをセットする書込命令の後に、当該コンディション・フラグをチェックすることを目的として実行されるチェック・ポイントとして実現されてもよい。
cond_regがセットされていることを書込検出部160が検出した場合に、切替部150は、コード実行部140に対象プログラムの最適化コードに代えて非最適化コードを実行させてもよい。こうすると、アクセスするオブジェクトの値が不変であると仮定した最適化コードの実行速度が十分高速であり、かつ非特権書込命令による非特権書込禁止領域への書込みまたは書込禁止仮想領域への書込みの発生確率が比較的高いときに、コード実行部140は、対象プログラムをより高速に実行できる。
図9は、本実施形態に係るコンピュータ1900のハードウェア構成の一例を示す。本実施形態に係るコンピュータ1900は、ホスト・コントローラ2082により相互に接続されるCPU2000、RAM2020、グラフィック・コントローラ2075、及び表示装置2080を有するCPU周辺部と、入出力コントローラ2084によりホスト・コントローラ2082に接続される通信インターフェイス2030、ハードディスク・ドライブ2040、及びDVDドライブ2060を有する入出力部と、入出力コントローラ2084に接続されるROM2010、フレキシブルディスク・ドライブ2050、及び入出力チップ2070を有するレガシー入出力部とを備える。
ホスト・コントローラ2082は、RAM2020と、高い転送レートでRAM2020をアクセスするCPU2000及びグラフィック・コントローラ2075とを接続する。CPU2000は、ROM2010及びRAM2020に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィック・コントローラ2075は、CPU2000等がRAM2020内に設けたフレーム・バッファ上に生成する画像データを取得し、表示装置2080上に表示させる。これに代えて、グラフィック・コントローラ2075は、CPU2000等が生成する画像データを格納するフレーム・バッファを、内部に含んでもよい。
入出力コントローラ2084は、ホスト・コントローラ2082と、比較的高速な入出力装置である通信インターフェイス2030、ハードディスク・ドライブ2040、DVDドライブ2060を接続する。通信インターフェイス2030は、ネットワークを介して他の装置と通信する。ハードディスク・ドライブ2040は、コンピュータ1900内のCPU2000が使用するプログラム及びデータを格納する。DVDドライブ2060は、DVD2095からプログラム又はデータを読み取り、RAM2020を介してハードディスク・ドライブ2040に提供する。
また、入出力コントローラ2084には、ROM2010と、フレキシブルディスク・ドライブ2050、及び入出力チップ2070の比較的低速な入出力装置とが接続される。ROM2010は、コンピュータ1900が起動時に実行するブート・プログラム、及び/又は、コンピュータ1900のハードウェアに依存するプログラム等を格納する。フレキシブルディスク・ドライブ2050は、フレキシブルディスク2090からプログラム又はデータを読み取り、RAM2020を介してハードディスク・ドライブ2040に提供する。入出力チップ2070は、フレキシブルディスク・ドライブ2050を入出力コントローラ2084へと接続すると共に、例えばパラレル・ポート、シリアル・ポート、キーボード・ポート、マウス・ポート等を介して各種の入出力装置を入出力コントローラ2084へと接続する。
RAM2020を介してハードディスク・ドライブ2040に提供されるプログラムは、フレキシブルディスク2090、DVD2095、又はICカード等の記録媒体に格納されて利用者によって提供される。プログラムは、記録媒体から読み出され、RAM2020を介してコンピュータ1900内のハードディスク・ドライブ2040にインストールされ、CPU2000において実行される。
コンピュータ1900にインストールされ、コンピュータ1900を装置100として機能させるプログラムは、コード格納部110と、記憶部120と、コード生成部130と、コード実行部140と、切替部150と、書込検出部160と、管理部170と、書込処理部180とを備える。これらのプログラム又はモジュールは、CPU2000等に働きかけて、コンピュータ1900を、コード格納部110と、記憶部120と、コード生成部130と、コード実行部140と、切替部150と、書込検出部160と、管理部170と、書込処理部180としてそれぞれ機能させる。
これらのプログラムに記述された情報処理は、コンピュータ1900に読込まれることにより、ソフトウェアと上述した各種のハードウェア資源とが協働した具体的手段であるコード格納部110と、記憶部120と、コード生成部130と、コード実行部140と、切替部150と、書込検出部160と、管理部170と、書込処理部180として機能する。そして、これらの具体的手段によって、本実施形態におけるコンピュータ1900の使用目的に応じた情報の演算又は加工を実現することにより、使用目的に応じた特有の装置100が構築される。
一例として、コンピュータ1900と外部の装置等との間で通信を行う場合には、CPU2000は、RAM2020上にロードされた通信プログラムを実行し、通信プログラムに記述された処理内容に基づいて、通信インターフェイス2030に対して通信処理を指示する。通信インターフェイス2030は、CPU2000の制御を受けて、RAM2020、ハードディスク・ドライブ2040、フレキシブルディスク2090、又はDVD2095等の記憶装置上に設けた送信バッファ領域等に記憶された送信データを読み出してネットワークへと送信し、もしくは、ネットワークから受信した受信データを記憶装置上に設けた受信バッファ領域等へと書き込む。このように、通信インターフェイス2030は、DMA(ダイレクト・メモリ・アクセス)方式により記憶装置との間で送受信データを転送してもよく、これに代えて、CPU2000が転送元の記憶装置又は通信インターフェイス2030からデータを読み出し、転送先の通信インターフェイス2030又は記憶装置へとデータを書き込むことにより送受信データを転送してもよい。
また、CPU2000は、ハードディスク・ドライブ2040、DVDドライブ2060(DVD2095)、フレキシブルディスク・ドライブ2050(フレキシブルディスク2090)等の外部記憶装置に格納されたファイルまたはデータベース等の中から、全部または必要な部分をDMA転送等によりRAM2020へと読み込ませ、RAM2020上のデータに対して各種の処理を行う。そして、CPU2000は、処理を終えたデータを、DMA転送等により外部記憶装置へと書き戻す。このような処理において、RAM2020は、外部記憶装置の内容を一時的に保持するものとみなせるから、本実施形態においてはRAM2020および外部記憶装置等をメモリ、記憶部120、または記憶装置等と総称する。本実施形態における各種のプログラム、データ、テーブル、データベース等の各種の情報は、このような記憶装置上に格納されて、情報処理の対象となる。なお、CPU2000は、RAM2020の一部をキャッシュメモリに保持し、キャッシュメモリ上で読み書きを行うこともできる。このような形態においても、キャッシュメモリはRAM2020の機能の一部を担うから、本実施形態においては、区別して示す場合を除き、キャッシュメモリもRAM2020、メモリ、及び/又は記憶装置に含まれるものとする。
また、CPU2000は、RAM2020から読み出したデータに対して、プログラムの命令列により指定された、本実施形態中に記載した各種の演算、情報の加工、条件判断、情報の検索・置換等を含む各種の処理を行い、RAM2020へと書き戻す。例えば、CPU2000は、条件判断を行う場合においては、本実施形態において示した各種の変数が、他の変数または定数と比較して、大きい、小さい、以上、以下、等しい等の条件を満たすかどうかを判断し、条件が成立した場合(又は不成立であった場合)に、異なる命令列へと分岐し、またはサブルーチンを呼び出す。
また、CPU2000は、記憶装置内のファイルまたはデータベース等に格納された情報を検索することができる。例えば、第1属性の属性値に対し第2属性の属性値がそれぞれ対応付けられた複数のエントリが記憶装置に格納されている場合において、CPU2000は、記憶装置に格納されている複数のエントリの中から第1属性の属性値が指定された条件と一致するエントリを検索し、そのエントリに格納されている第2属性の属性値を読み出すことにより、所定の条件を満たす第1属性に対応付けられた第2属性の属性値を得ることができる。
以上に示したプログラム又はモジュールは、外部の記録媒体に格納されてもよい。記録媒体としては、フレキシブルディスク2090、DVD2095の他に、DVD又はCD等の光学記録媒体、MO等の光磁気記録媒体、テープ媒体、ICカード等の半導体メモリ等を用いることができる。また、専用通信ネットワーク又はインターネットに接続されたサーバシステムに設けたハードディスク又はRAM等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムをコンピュータ1900に提供してもよい。
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
特許請求の範囲、明細書、および図面中において示した装置、システム、プログラム、および方法における動作、手順、ステップ、および段階等の各処理の実行順序は、特段「より前に」、「先立って」等と明示しておらず、また、前の処理の出力を後の処理で用いるのでない限り、任意の順序で実現しうることに留意すべきである。特許請求の範囲、明細書、および図面中の動作フローに関して、便宜上「まず、」、「次に、」等を用いて説明したとしても、この順で実施することが必須であることを意味するものではない。
100 装置、110 コード格納部、120 記憶部、130 コード生成部、140 コード実行部、150 切替部、160 書込検出部、170 管理部、180 書込処理部、210 ヒープ、212a〜b オブジェクト、214a〜b オブジェクト・ヘッダ、220a〜c オブジェクト・ポインタ、610 CORA、620 COCA、630 物理メモリ領域、640 CORS、812a オブジェクト、820a オブジェクト・ポインタ、1900 コンピュータ、2000 CPU、2010 ROM、2020 RAM、2030 通信インターフェイス、2040 ハードディスク・ドライブ、2050 フレキシブルディスク・ドライブ、2060 DVDドライブ、2070 入出力チップ、2075 グラフィック・コントローラ、2080 表示装置、2082 ホスト・コントローラ、2084 入出力コントローラ、2090 フレキシブルディスク、2095 DVD

Claims (15)

  1. コンピュータにより対象プログラムを実行させるためのプログラムであって、
    当該プログラムは、前記コンピュータを、
    オブジェクトの値およびオブジェクトの管理情報を対応付けて記憶する記憶部と、
    前記対象プログラムから、前記オブジェクトの値が不変であることを条件として最適化した最適化コードと、前記オブジェクトの値が変更された場合に実行される非最適化コードとを生成するコード生成部と、
    前記対象プログラムを前記最適化コードにより実行させている場合において、前記オブジェクトに対する値の書き込みが発生したことに応じて、前記対象プログラムの実行を、前記最適化コードによる実行から前記非最適化コードによる実行に切り替える切替部と、
    前記オブジェクトに対する書き込みの発生を検出しない非検出書込処理により前記管理情報をアクセスして前記オブジェクトを管理する管理部と、
    して機能させるプログラム。
  2. 前記切替部は、前記対象プログラムを前記非最適化コードによる実行から前記最適化コードによる実行に切り替える場合に、前記オブジェクトの値に対する書き込みの発生を検出可能に設定する請求項1に記載のプログラム。
  3. 前記切替部は、前記対象プログラムを前記最適化コードにより実行させる場合に、前記オブジェクトを、前記記憶部内において、特権書込命令による書き込みの発生を検出せず、非特権書込命令による書き込みの発生を検出する非特権書込禁止領域に配置し、
    前記コード生成部は、前記対象プログラムによる前記オブジェクトの値への書き込みを前記非特権書込命令に変換し、
    前記管理部は、前記オブジェクトの管理情報に対する書き込みを前記特権書込命令により処理する
    請求項1または2に記載のプログラム。
  4. 前記切替部は、前記対象プログラムを前記非最適化コードにより実行させる場合に、前記オブジェクトを、前記記憶部内において、前記特権書込命令および前記非特権書込命令による書込の発生を検出しない書込許可領域に配置する請求項3に記載のプログラム。
  5. 前記記憶部は、前記オブジェクトの管理情報の少なくとも一部として、前記対象プログラムから前記オブジェクトの値への書き込みが制限されているか否かを示す書込制限情報を記憶し、
    前記管理部は、前記対象プログラムから前記オブジェクトの値への書き込みが制限されている旨の前記書込制限情報が記憶されている場合に前記対象プログラムを前記最適化コードにより実行させ、前記対象プログラムから前記オブジェクトの値への書き込みが制限されていない旨の前記書込制限情報が記憶されている場合に前記対象プログラムを前記非最適化コードにより実行させ、
    前記切替部は、前記対象プログラムを前記非最適化コードにより実行させる場合に前記対象プログラムから前記オブジェクトの値への書き込みが制限されていない旨の前記書込制限情報を前記オブジェクトの管理情報内に書き込み、前記対象プログラムを前記最適化コードにより実行させる場合に前記対象プログラムから前記オブジェクトの値への書き込みが制限されている旨の前記書込制限情報を前記オブジェクトの管理情報内に書き込む、
    請求項4に記載のプログラム。
  6. 前記記憶部は、前記オブジェクトの管理情報の一部として、前記オブジェクトを最適化対象とするか否かを示す最適化情報を記憶し、
    前記コード生成部は、前記オブジェクトの値が不変であることを条件として最適化する場合に、前記オブジェクトを最適化対象とする旨を示す最適化情報を前記オブジェクトに対して設定し、
    前記切替部は、前記オブジェクトに対応付けて前記オブジェクトを最適化対象とする旨を示す前記最適化情報が記憶されている場合に、前記対象プログラムを前記最適化コードによる実行に切り替える
    請求項5に記載のプログラム。
  7. 前記切替部は、前記記憶部に記憶された複数の前記オブジェクトのそれぞれを検査して前記対象プログラムにより使用されていない前記オブジェクトを前記記憶部内から解放するガベージ・コレクション中において、検査対象である前記書込許可領域の前記オブジェクトに対応付けて前記オブジェクトを最適化する旨を示す前記最適化情報が記憶されている場合に、前記オブジェクトを前記非特権書込禁止領域に移動させる請求項6に記載のプログラム。
  8. 前記切替部は、前記非特権書込禁止領域に配置した前記オブジェクトに対する書き込みが発生したことに応じて、当該オブジェクトに対して、前記オブジェクトの値への書き込みが制限されていない旨を示す前記書込制限情報および当該オブジェクトを最適化対象としない旨を示す前記最適化情報を設定する請求項7に記載のプログラム。
  9. 前記切替部は、前記ガベージ・コレクション中において、検査対象である前記非特権書込禁止領域の前記オブジェクトに対応付けて、前記オブジェクトを最適化しない旨を示す前記最適化情報が記憶されている場合に、前記オブジェクトを前記書込許可領域に移動させる請求項8に記載のプログラム。
  10. 前記切替部は、前記対象プログラムを前記最適化コードにより実行させる場合に、前記オブジェクトを、仮想メモリ空間上における書き込みを禁止する書込禁止仮想領域および書き込みを許可する書込許可仮想領域の両方にマッピングされた物理メモリ領域に配置し、
    前記コード生成部は、前記対象プログラムによる前記オブジェクトの値への書き込みを前記書込禁止仮想領域を介して処理させるコードを生成し、
    前記管理部は、前記オブジェクトの管理情報への書き込みを前記書込許可仮想領域を介して処理する
    請求項1または2に記載のプログラム。
  11. 前記切替部は、前記対象プログラムを前記非最適化コードにより実行させる場合に、前記オブジェクトを、前記記憶部内において、前記書込許可仮想領域にマッピングされた物理メモリ領域に移動させる請求項10に記載のプログラム。
  12. 前記切替部は、最適化対象となる複数の前記オブジェクトのそれぞれが記憶される前記書込禁止仮想領域内のアドレス位置および前記書込許可仮想領域内のアドレス位置を、前記仮想メモリ空間上において予め設定されたオフセット分ずらして配置し、
    前記管理部は、前記オブジェクトの前記書込禁止仮想領域内のアドレス位置および前記オフセットから前記書込許可仮想領域内のアドレス位置を算出して、算出したアドレス位置を用いて前記オブジェクトの管理情報を書き込む
    請求項10または11に記載のプログラム。
  13. 前記書込禁止仮想領域を介した前記オブジェクトに対する書き込みが検出されたことに応じて、当該書き込みを前記書込許可仮想領域を介して実行する書込処理部を更に備え、
    前記管理部は、前記オブジェクトの管理情報への書込頻度が予め設定された基準頻度未満の場合に前記書込禁止仮想領域を介して前記オブジェクトの管理情報へ書き込み、前記書込頻度が前記基準頻度以上の場合においては前記オブジェクトが前記書込禁止仮想領域および前記書込許可仮想領域にマッピングされた物理メモリ領域に配置されていることを条件として前記書込許可仮想領域を介して前記オブジェクトの管理情報へ書き込む
    請求項12に記載のプログラム。
  14. 対象プログラムを実行させるための装置であって、
    オブジェクトの値およびオブジェクトの管理情報を対応付けて記憶する記憶部と、
    前記対象プログラムから、前記オブジェクトの値が不変であることを条件として最適化した最適化コードと、前記オブジェクトの値が変更された場合に実行される非最適化コードとを生成するコード生成部と、
    前記対象プログラムを前記最適化コードにより実行させている場合において、前記オブジェクトに対する値の書き込みが発生したことに応じて、前記対象プログラムの実行を、前記最適化コードによる実行から前記非最適化コードによる実行に切り替える切替部と、
    前記オブジェクトに対する書き込みの発生を検出しない非検出書込処理により前記管理情報をアクセスして前記オブジェクトを管理する管理部と、
    を備える装置。
  15. 対象プログラムを実行させるための方法であって、
    オブジェクトの値およびオブジェクトの管理情報を対応付けて記憶部によって記憶する段階と、
    前記対象プログラムから、前記オブジェクトの値が不変であることを条件として最適化した最適化コードと、前記オブジェクトの値が変更された場合に実行される非最適化コードとを、コード生成部によって生成する段階と、
    前記対象プログラムを前記最適化コードにより実行させている場合において、前記オブジェクトに対する値の書き込みが発生したことに応じて、前記対象プログラムの実行を、前記最適化コードによる実行から前記非最適化コードによる実行に切替部によって切り替える段階と、
    前記オブジェクトに対する書き込みの発生を検出しない非検出書込処理により前記管理情報をアクセスして前記オブジェクトを管理部によって管理する段階と、
    を備える方法。
JP2009158204A 2009-07-02 2009-07-02 プログラム、装置、および方法 Pending JP2011013985A (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2009158204A JP2011013985A (ja) 2009-07-02 2009-07-02 プログラム、装置、および方法
US12/826,820 US8336039B2 (en) 2009-07-02 2010-06-30 Program, apparatus, and method of optimizing a Java object
US13/671,958 US8479182B2 (en) 2009-07-02 2012-11-08 Program, apparatus, and method of optimizing a java object

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009158204A JP2011013985A (ja) 2009-07-02 2009-07-02 プログラム、装置、および方法

Publications (1)

Publication Number Publication Date
JP2011013985A true JP2011013985A (ja) 2011-01-20

Family

ID=43413306

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009158204A Pending JP2011013985A (ja) 2009-07-02 2009-07-02 プログラム、装置、および方法

Country Status (2)

Country Link
US (2) US8336039B2 (ja)
JP (1) JP2011013985A (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5204300B2 (ja) * 2009-04-28 2013-06-05 インターナショナル・ビジネス・マシーンズ・コーポレーション マルチスレッド上で動作するプログラムのプログラム・コードをロック衝突が少ないプログラム・コードに変換するための方法、並びにそのコンピュータ・プログラム及びコンピュータ・システム
US9021421B1 (en) * 2012-05-07 2015-04-28 Google Inc. Read and write barriers for flexible and efficient garbage collection
US9384019B2 (en) * 2014-03-25 2016-07-05 International Business Machines Corporation Dynamic code injection
US9858058B2 (en) * 2014-03-31 2018-01-02 International Business Machines Corporation Partition mobility for partitions with extended code
CN108198124B (zh) * 2017-12-27 2023-04-25 上海联影医疗科技股份有限公司 医学图像处理方法、装置、计算机设备和存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0736709A (ja) * 1993-07-20 1995-02-07 Nec Corp 手続き呼び出し方式
JP2000222219A (ja) * 1999-01-27 2000-08-11 Internatl Business Mach Corp <Ibm> 多次元配列オブジェクトの処理方法及び装置
JP2003216442A (ja) * 2002-01-17 2003-07-31 Internatl Business Mach Corp <Ibm> プログラム変換方法、これを用いたコンピュータ装置及びプログラム

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5987256A (en) * 1997-09-03 1999-11-16 Enreach Technology, Inc. System and process for object rendering on thin client platforms
CA2262316A1 (en) * 1999-02-22 2000-08-22 Ibm Canada Limited-Ibm Canada Limitee System and method for detecting release-to-release binary compatibility in compiled object code
AU2001234758A1 (en) * 2000-02-04 2001-08-14 America Online Incorporated High performance "freeze-dried" dynamic web page generation
US7516446B2 (en) * 2002-06-25 2009-04-07 International Business Machines Corporation Method and apparatus for efficient and precise datarace detection for multithreaded object-oriented programs
US7140008B2 (en) * 2002-11-25 2006-11-21 Microsoft Corporation Dynamic temporal optimization framework
US20040205165A1 (en) * 2003-01-21 2004-10-14 Eplication Networks Ltd. Method for improving quality of service from an Internet server employing heuristic optimization of downloading
US7469324B2 (en) * 2005-01-07 2008-12-23 Azul Systems, Inc. System and method for concurrent compacting self pacing garbage collection using loaded value and access barriers
JP2005332146A (ja) * 2004-05-19 2005-12-02 Internatl Business Mach Corp <Ibm> 動的コンテンツ作成プログラムの生成装置、動的コンテンツ作成プログラムを生成するためのプログラム、及び動的コンテンツ作成プログラムの生成方法
US7979685B1 (en) * 2007-11-27 2011-07-12 Oracle America, Inc. Multiple instruction execution mode resource-constrained device

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0736709A (ja) * 1993-07-20 1995-02-07 Nec Corp 手続き呼び出し方式
JP2000222219A (ja) * 1999-01-27 2000-08-11 Internatl Business Mach Corp <Ibm> 多次元配列オブジェクトの処理方法及び装置
JP2003216442A (ja) * 2002-01-17 2003-07-31 Internatl Business Mach Corp <Ibm> プログラム変換方法、これを用いたコンピュータ装置及びプログラム

Also Published As

Publication number Publication date
US8336039B2 (en) 2012-12-18
US20110004869A1 (en) 2011-01-06
US8479182B2 (en) 2013-07-02
US20130067431A1 (en) 2013-03-14

Similar Documents

Publication Publication Date Title
US7886293B2 (en) Optimizing system behavior in a virtual machine environment
US10534727B2 (en) Apparatus and method for handling page protection faults in a computing system
JP4417346B2 (ja) 微細粒度変換判別方法及び装置
US8799879B2 (en) Method and apparatus for protecting translated code in a virtual machine
US7743280B2 (en) Method and system for analyzing memory leaks occurring in java virtual machine data storage heaps
US8875114B2 (en) Employing identifiers provided by an operating system of a processing environment to optimize the processing environment
EP0853278A2 (en) Fast traps for computer software instrumentation
US7506096B1 (en) Memory segment emulation model for virtual machine
TW201042455A (en) Method of providing extended memory protection
US20120102284A1 (en) Method for detecting access to object, and computer and computer program product for the same
TWI651955B (zh) 用於基於偵測受防護儲存器事件以識別處理器屬性之電腦程式產品、電腦系統及電腦實施方法
US9448931B2 (en) Endian conversion method and system
TWI663547B (zh) 用於於虛擬化環境中保存/復原受防護之儲存器控制之電腦程式產品、電腦實施方法及電腦系統
TW201830237A (zh) 在異動執行期間之受保護儲存器事件處置
JP2011013985A (ja) プログラム、装置、および方法
CN110663082B (zh) 数据处理系统和方法
JP2009282774A (ja) エミュレーションプログラム、エミュレーション装置およびエミュレーション方法
KR101533224B1 (ko) 호스트 데이터 처리장치내의 디바이스 에뮬레이션 지원
US20180173728A1 (en) Information processing apparatus and method
JPH0192856A (ja) アクセス及び欠陥論理信号を用いて主メモリユニットを保護する装置及び方法
US11216280B2 (en) Exception interception
US20120323552A1 (en) Apparatus and Method for Hardware Initiation of Emulated Instructions
US20080244335A1 (en) Protecting memory operations involving zero byte allocations
CN108958879B (zh) 一种虚拟机的监控方法和装置
EP0570646A1 (en) Method for processor simulation

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20101207

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110222

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110330

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20110614

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20110630