JP2002297396A - コンパイラ、変換プログラム、例外処理プログラム及びこれらを用いたコンピュータ装置 - Google Patents

コンパイラ、変換プログラム、例外処理プログラム及びこれらを用いたコンピュータ装置

Info

Publication number
JP2002297396A
JP2002297396A JP2001097182A JP2001097182A JP2002297396A JP 2002297396 A JP2002297396 A JP 2002297396A JP 2001097182 A JP2001097182 A JP 2001097182A JP 2001097182 A JP2001097182 A JP 2001097182A JP 2002297396 A JP2002297396 A JP 2002297396A
Authority
JP
Japan
Prior art keywords
program
information
exception
execution
lock
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.)
Granted
Application number
JP2001097182A
Other languages
English (en)
Other versions
JP3664478B2 (ja
Inventor
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 JP2001097182A priority Critical patent/JP3664478B2/ja
Priority to US10/147,195 priority patent/US7089540B2/en
Publication of JP2002297396A publication Critical patent/JP2002297396A/ja
Application granted granted Critical
Publication of JP3664478B2 publication Critical patent/JP3664478B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/48Indexing scheme relating to G06F9/48
    • G06F2209/481Exception handling

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 例外処理に必要なロックに関する情報を取得
するための作業コストを抑え、例外処理における作業コ
ストへの影響を縮減する。 【解決手段】 実行プログラムをコンパイルする際に、
この実行プログラムにおける関数のインライン展開に関
する情報に基づいて、インライン展開された関数による
資源のロックに関する情報を生成する機能と、この情報
に基づいて、処理対象である実行プログラム中の各コー
ドの実行時におけるロック回数に関する情報をこの実行
プログラムに付加する。そして、この実行プログラムの
実行中に例外が発生した場合に、このロック回数に関す
る情報に基づいて、例外を発生したコードの実行時にお
けるロック回数とこの例外に対する例外ハンドラの実行
時におけるロック回数とを求め、二つのロック回数の差
分だけ資源のロックを解除した後に、この例外に対する
処理を実行する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、コンピュータプロ
グラムの最適化方法に関し、特に例外処理の手法に特徴
を有する最適化方法に関する。
【0002】
【従来の技術】いくつかのプログラミング言語では、最
適化の手法としてインライン展開という手法が用いられ
る。インライン展開とは、関数の定義内容をそのまま呼
び出し元に埋め込むことにより、実際に関数呼び出しを
行わずに処理を行うようにプログラムの記述を変更する
ことである。これによれば、関数呼び出しのためのオー
バーヘッドがかからないため、実行速度の向上を図るこ
とができる。
【0003】また、いくつかのプログラミング言語で
は、特定の領域を宣言することにより、プログラムの実
行に際して当該領域中で発生した例外を当該領域に関連
した例外ハンドラで処理するといった仕組みが設けられ
ている。この仕組みを持つプログラミング言語の一つで
あるJavaでは、この宣言をtryと呼び、宣言され
た領域をtry領域、tryブロックなどと呼ぶ。以下
の説明では、Javaに倣い、これらの宣言及び領域に
try、try領域といった呼称を用いる。
【0004】ところで、ネットワークシステムにおける
サーバやクライアントなど、複雑かつ信頼性が必要なシ
ステムを構築するプログラムを作成するには、同期する
複数スレッドを記述できるプログラミング言語を使用す
ることが望まれる。そのような条件を満たすプログラミ
ング言語の例としてJavaがある。Javaは同期メ
ソッドと同期ブロックという2種類のクリティカルセク
ションを記述することができる。そして、例外発生時に
は実行システムがそれらのクリティカルセクションを必
ず解除する。
【0005】また、Javaは、上述したインライン展
開及びtryの仕組みをいずれも持つプログラミング言
語の一つである。Javaで記述されたプログラムに対
するコンパイルを行うコンパイラ(以下、Javaコン
パイラと称す)において最適化を行う際に、同期メソッ
ドに対してインライン展開を行うと、メソッド呼出コス
ト削減、定数伝搬、クラス情報伝搬といった通常のイン
ライン展開によるの効果に加え、冗長な同期を削除でき
るという効果が得られる。しかしながら、インライン展
開を行う際には、所定の手続きが処理の過程で資源(J
avaにおいてこの場合はオブジェクト)を排他的に使
用するために行う使用制限である資源のロックが、言語
仕様上設定される数以上に増加する。このため、同期メ
ソッドをインライン展開したプログラムにおいて、tr
yを用いた例外処理が複雑になる。
【0006】図8を参照して、Javaにおいて同期メ
ソッド(以下、適宜、単にメソッドと称す)をインライ
ン展開したプログラムにおける従来の例外処理について
説明する。図8に示す例では、メソッドAがメソッドB
を呼び、次にメソッドBがメソッドCを呼ぶ呼び出しが
インライン展開されている。メソッドCはメソッドBの
try領域にインライン展開され、メソッドBとメソッ
ドCとは同期メソッドを用いてそれぞれの入口でオブジ
ェクトをロックする。
【0007】この例において、インライン展開されたメ
ソッドC内で例外Eが発生し、メソッドBのtry領域
Tの例外ハンドラで例外Eをキャッチすることを考え
る。この場合、try領域Tを越えて例外が処理される
ため、例外ハンドラは、メソッドCのロックを解除し、
メソッドBのロックはそのままにして処理を行う必要が
ある。そのため、例外ハンドラは、例外Eを投げた命令
が実行されるときにメソッドBとメソッドCとのロック
が取得され、try領域Tの例外ハンドラが実行される
ときにメソッドBのロックが取得されていることを知ら
なければならない。言い換えれば、例外発生時における
ロックと例外ハンドラの実行時におけるロックとに関す
る情報が必要となる。
【0008】ここで、コード領域とインライン展開した
メソッドとの対応情報(以下、インライン情報)は、J
avaコンパイラが持つことができる。このインライン
情報は、言い換えれば、コードが元々どのように呼び出
されたメソッドに属していたかを表す情報である。した
がって図示の例では、例外ハンドラは、例外Eの発生ア
ドレスからインライン情報として「メソッドA→メソッ
ドB→メソッドC(元々この順で呼び出されたことを示
す。以下、インライン情報において「メソッド」を省略
する)」を得、また例外Eをキャッチするアドレスから
インライン情報として「A→B」を得る。そして、これ
らのインライン情報を比べることによって、メソッドC
で行ったロックを特定し、解除する。
【0009】従来のJavaコンパイラは、かかるイン
ライン情報として、アドレス区間とインライン情報との
表、あるいは例外関連命令(例外発生可能命令、例外ハ
ンドラ先頭命令、メソッド呼出命令)のアドレスとイン
ライン情報との表を作成する。そして、例外ハンドラ
は、例外が発生した場合に、当該例外の発生アドレス及
び当該例外をキャッチするアドレスを用いて当該アドレ
スに対応する表を見つけだし、さらに当該表において所
望のインライン情報を検索していた。
【0010】
【発明が解決しようとする課題】しかし、上述した、従
来のJavaコンパイラの方法は、インライン情報を取
得するために、アドレスに基づいて表を検索する作業
と、得られた表に基づいてインライン情報を検索する作
業という二つの作業を要する。そのため、この作業に要
する時間(作業コスト)は、例外処理全体の作業コスト
に無視できない影響を与えていた。
【0011】また、上述した表を用いてインライン情報
を取得する手法では、取得したインライン情報から得ら
れるロックの状態と実際のロックの状況とが一致しない
場合があった。例えば、最適化によって冗長なロックが
削除された場合、インライン情報でインライン展開され
た同期メソッドを示したとしても、その同期メソッドに
よるロックが存在しているとは限らなかった。
【0012】そこで、本発明は、例外処理に必要なロッ
クに関する情報を取得するための作業コストを抑え、例
外処理における作業コストへの影響を縮減するためのコ
ンパイル方法及び例外処理の実行方法を提供することを
目的とする。また、本発明は、例外発生に対して確実に
必要なロックの解除を行い、例外処理を行う例外処理の
手法を提供することを他の目的とする。
【0013】
【課題を解決するための手段】上記の目的を達成するた
め、本発明は、プログラミング言語で記述されたプログ
ラムのソースコードを機械語コードに変換するコンパイ
ラにおいて、プログラムにおける関数をインライン展開
し、このインライン展開に関する情報を生成するインラ
イン展開処理部と、このインライン展開に関する情報に
基づいて、この関数による資源のロックに関するロック
情報を生成するロック情報生成部と、このロック情報に
基づいて、処理対象であるプログラム中の例外ハンドラ
にこの例外ハンドラの実行時におけるロック回数を付加
する情報付加部とを備えることを特徴とする。
【0014】ここで、このプログラムを実行する処理系
における例外処理方式がスタック巻き戻し方式である場
合、この情報付加部は、例外が発生したコードのアドレ
スからこのコードの実行時におけるロック回数を表引き
するための対応表を作成し、処理対象であるプログラム
の付属情報として付加する。これにより、例外処理の
際、例外フィルタは、この対応表を用いて例外の発生時
(例外を発生したコードの実行時)におけるロック回数
を直接取得することができる。
【0015】また、このプログラムを実行する処理系に
おける例外処理方式が構造化例外処理方式である場合、
この情報付加部は、処理対象であるプログラムに設定さ
れたtry領域内のコードの実行時におけるロック回数
を、このtry領域の識別情報(ID)にエンコードす
る。これにより、例外処理の際、例外フィルタは、例外
が発生したtry領域のIDから直ちに例外の発生時に
おけるロック回数を取得することができる。
【0016】さらに、上記のコンパイラは、プログラム
中に存在する不要なロックを削除し、ロックの削除の結
果に応じて、ロック情報生成部にて生成されたロック情
報を更新する同期最適化部をさらに備える構成とするこ
とができる。この場合、情報付加部は、この同期最適化
部により更新されたロック情報に基づいて、例外ハンド
ラにロック回数を付加する。
【0017】また、本発明は、コンピュータを制御して
実行プログラムを変換する変換プログラムとして提供す
ることができる。この変換プログラムは、この実行プロ
グラムにおける関数のインライン展開に関する情報に基
づいて、インライン展開された関数による資源の使用制
限に関する情報を生成する機能と、この情報に基づい
て、処理対象である実行プログラム中の各コードの実行
時における使用制限の状態に関する情報をこの実行プロ
グラムに付加する機能とをコンピュータに実現させるこ
とを特徴とする。
【0018】この変換プログラムは、このコンピュータ
に、処理対象である実行プログラム中に存在する不要な
使用制限を削除し、この削除の結果に応じて、上述した
各コードの実行時における使用制限の状態に関する情報
を更新する機能をさらに実現させるようにすることがで
きる。この場合、更新された情報に基づいて、この実行
プログラムに使用制限の状態に関する情報を付加するこ
ととなる。
【0019】さらに、この変換プログラムは、オブジェ
クト指向プログラミング言語で記述された実行プログラ
ムを変換する変換プログラムとして構成することができ
る。すなわち、この変換プログラムは、実行プログラム
におけるメソッドのインライン展開に関する情報に基づ
いて、インライン展開されたメソッドによるオブジェク
トのロックに関するロック情報を生成する機能と、この
ロック情報に基づいて、実行プログラム中の各コードの
実行時におけるロック回数に関する情報をこの実行プロ
グラムに付加する機能とをコンピュータに実現させる。
【0020】また、本発明は、コンピュータを制御して
実行プログラムの実行中に発生した例外を処理する例外
処理プログラム(実行時ライブラリ)として提供するこ
とができる。この例外処理プログラムは、スタック巻き
戻し方式で例外処理を行う場合、例外処理の実行に先立
って次の処理をコンピュータに実行させる。すなわち、
実行プログラムに付加された、各コードのアドレスとコ
ードの実行時における資源のロック回数とを対応付けた
対応情報に基づいて、例外を発生したコードのアドレス
からこの例外の発生時におけるロック回数を求める処理
と、この例外に対する例外ハンドラに付加された、この
例外ハンドラの実行時におけるロック回数を取得する処
理と、この例外発生時におけるロック回数とこの例外ハ
ンドラの実行時におけるロック回数との差分だけ資源の
ロックを解除する処理とをコンピュータに実行させる。
【0021】さらに、この例外処理プログラムは、構造
化例外処理方式で例外処理を行う場合、例外処理の実行
に先立って次の処理をコンピュータに実行させる。すな
わち、実行プログラムに記述された、try領域内にお
ける各コードの実行時における資源のロック回数がエン
コードされたtry領域の識別情報を用い、例外を発生
したコードが含まれるtry領域の識別情報をデコード
してこの例外の発生時における資源のロック回数を求め
る処理と、この例外に対する例外ハンドラに付加され
た、この例外ハンドラの実行時におけるロック回数を取
得する処理と、この例外発生時におけるロック回数とこ
の例外ハンドラの実行時におけるロック回数との差分だ
け資源のロックを解除する処理とをコンピュータに実行
させる。
【0022】上述した変換プログラムや、例外処理プロ
グラムは、磁気ディスクや光ディスク、半導体メモリな
どの記録媒体に記録して配布したり、プログラム伝送装
置の記録装置に格納しネットワークを介して配信したり
することにより、提供することができる。
【0023】また、本発明は、このような例外処理プロ
グラムを実行するコンピュータ装置として提供すること
ができる。すなわち、プログラムを実行する実行手段
と、この実行手段によるプログラムの実行中に例外が発
生した場合に、この例外を処理する例外処理手段とを備
え、この例外処理手段は、実行対象であるプログラムに
付加された各コードの実行時における資源のロック回数
に関する情報に基づいて、例外の発生時におけるロック
回数とこの例外に対する例外ハンドラの実行時における
ロック回数とを求め、二つの当該ロック回数の差分だけ
資源のロックを解除した後に、この例外に対する処理を
実行する。
【0024】さらに本発明は、次のように構成されたコ
ンピュータ装置として提供することができる。すなわ
ち、プログラムのソースコードをコンパイルして機械語
コードに変換するコンパイラと、機械語コードに変換さ
れたプログラムを実行する処理装置とを備えたコンピュ
ータ装置において、このコンパイラは、このプログラム
における関数のインライン展開に関する情報に基づい
て、インライン展開された関数による資源のロックに関
するロック情報を生成するロック情報生成部と、このロ
ック情報に基づいて、このプログラム中の各コードの実
行時におけるロック回数に関する情報をこのプログラム
に付加する情報付加部とを備え、この処理装置は、この
プログラムの実行中に例外が発生した場合に、このロッ
ク回数に関する情報に基づいて、例外を発生したコード
の実行時におけるロック回数とこの例外に対する例外ハ
ンドラの実行時におけるロック回数とを求め、二つのロ
ック回数の差分だけ資源のロックを解除した後に、この
例外に対する処理を実行することを特徴とする。
【0025】
【発明の実施の形態】以下、添付図面に示す実施の形態
に基づいて、この発明を詳細に説明する。本発明は、イ
ンライン展開及びtryに基づく例外処理の仕組みを持
つプログラミング言語で記述されたプログラムに対して
汎用的に利用できるが、以下では、代表的な例として、
Javaで記述されたプログラムに対するコンパイラを
対象として説明する。また、本発明は、プログラムのコ
ンパイル時に、プログラム中に例外処理の際に必要とな
る情報を埋め込むことと、プログラムの実行時に、コン
パイル時に埋め込まれた情報に基づいて例外処理を行う
こととによって実現される。そこで、以下の実施の形態
の説明では、コンパイラによるコンパイル処理と、プロ
セッサによる実行処理とに分けて説明する。
【0026】図1は、本実施の形態におけるコンパイラ
が用いられるコンピュータ装置のシステム構成を示す図
である。図1において、コンパイラ100は、バイトコ
ード(byte code)で記述された入力コードを入力して
処理し、機械語で記述された出力コードを生成して出力
する。この入力コードの入力は、コード生成装置400
にて生成された入力コードを直接入力したり、コード生
成装置400にて生成された入力コードを記憶した記憶
装置500から入力したり、ネットワーク600上に存
在するコード生成装置400や記憶装置500からネッ
トワーク600を介して入力したりすることにより行わ
れる。なお、本実施の形態において、コンパイラ100
は、JavaにおけるJIT(Just In Time)コンパイ
ラのような、実行プログラムを実行する際に動的に実行
プログラムのコンパイル処理を行うコンパイラであって
も良いし、ソースプログラムを予めコンパイルして生成
されたオブジェクトプログラムを実行プログラムとする
使用形態におけるコンパイラであっても良い。コンパイ
ラ100により生成された出力コードは、プロセッサ2
00により実行され、必要に応じて実行時ライブラリ3
00を呼び出す。実行時ライブラリ300には、例外フ
ィルタなど、実行時における例外処理を行うためのプロ
グラムが格納されている。
【0027】図2は、本実施の形態におけるコンパイラ
の構成を説明する図である。図2を参照すると、本実施
の形態のコンパイラ100は、メソッドのインライン展
開を行うインライン展開処理部としての前処理部110
と、ロック情報を生成するロック情報生成部120と、
ロック情報と基本ブロックとの対応付けを行う基本ブロ
ック対応付け部130と、不要なロックに関するロック
情報を削除する同期最適化部140と、例外処理を行う
場合に必要な情報を保存する情報付加部としての後処理
部150とを備える。図2に示したコンパイラ100の
各構成要素は、コンピュータプログラムにより制御され
たCPUにて実現される仮想的なソフトウェアブロック
である。CPUを制御する当該コンピュータプログラム
は、CD−ROMやフロッピー(登録商標)ディスクな
どの記憶媒体に格納して配布したり、ネットワークを介
して伝送したりすることにより提供される。なお、図2
に示したコンパイラ100の構成要素は、本実施の形態
における特徴的な機能に関して記述したものである。図
示しないが、実際にはコンパイラ100は、入力コード
の字句解析や構文解析、機械語のコード生成といったコ
ンパイル処理における一般的な機能を有することは言う
までもない。
【0028】前処理部110は、入力コードとして入力
された処理対象プログラムを解析し、メソッドのインラ
イン展開による最適化を行う。インライン展開されるメ
ソッドには、同期メソッドが含まれる。そして、前処理
部110は、インライン展開される同期メソッドの入口
及び出口で基本ブロックを分け、ロックを確保するコー
ド(以下、ロック確保コード)及びロックを解除するコ
ード(以下、ロック解除コード)を挿入する。なお、基
本ブロックとは、ストレートコード、すなわちコントロ
ールフローが途中に入ることもなく、途中から出ること
もないようなコード列の範囲をブロックとして把握した
ものである。
【0029】ロック情報生成部120は、前処理部11
0のインライン展開によるインライン情報に基づいて、
インライン展開された同期メソッドによるロック確保コ
ードに関する情報とロックの回数(以下、ロック回数)
とを集める。そして、集めた情報をロック情報として作
業用メモリに保存する。
【0030】基本ブロック対応付け部130は、処理対
象プログラムの各基本ブロックに、対応するロック情報
へのポインタを付加することにより、基本ブロックとロ
ック情報との対応付けを行う。
【0031】同期最適化部140は、前処理部110に
より処理対象プログラムに挿入されたロック確保コード
及びロック解除コードのうち、不必要なものを削除する
最適化を行う。また、同期最適化部140は、ロック情
報生成部120により生成されたロック情報のうち、削
除されるロックに関する情報を含むものがあれば、当該
ロックに関する情報をロック情報から削除し、ロック回
数を1減らす。
【0032】後処理部150は、同期最適化部140に
より最適化処理されたロック情報を用いて、処理対象プ
ログラム中の各例外ハンドラに、当該例外ハンドラの実
行時におけるロック回数を保存する。また、例外処理の
方式が、後述する二つの方式のうち、スタック巻き戻し
方式の場合、後処理部150は、例外が発生したコード
のアドレスからロック回数を表引きするための対応表を
作成してメモリに保存する。この対応表は、コンパイル
終了後もコードの付属情報として保存される。また、例
外処理の方式が、構造化例外処理方式の場合、try領
域におけるロック回数(以下、try時のロック回数と
称す)を当該try領域のIDにエンコードする。した
がって、try領域内においてロックが確保されたり解
除されたりした場合、当該try領域の元のIDは同じ
であっても、ロック回数がエンコードされたIDは変化
することとなる。
【0033】上記のように構成されたコンパイラ100
により、プログラムのコンパイルの過程で、同期メソッ
ドをインライン展開した当該プログラムに、同期メソッ
ドによるロックに関する情報が埋め込まれることとな
る。図8に示したインライン展開されたプログラムを例
として、コンパイラ100が同期メソッドによるロック
に関する情報をプログラムに埋め込む動作を説明する。
コンパイラ100において、入力コードに対する字句解
析や構文解析が行われ、最適化処理として前処理部11
0により同期メソッドを含むメソッドのインライン展開
が行われた状態が図8に示す状態である。
【0034】この状態のプログラムは、次に、ロック情
報生成部120により、処理されて、ロック情報が生成
される。すなわち、インライン情報「A→B→C」から
は、ロック確保コードに関する情報(コードを挿入した
同期メソッド)としてB→Cと、ロック回数の2が得ら
れる。また、インライン情報「B→C」からは、ロック
確保コードに関する情報としてBと、ロック回数の1が
得られる。次に、基本ブロック対応付け部130によ
り、プログラムの基本ブロックに対して、対応するロッ
ク情報へのポインタが付加される。次に、同期最適化部
140により、不要なロックが削除され、これに伴って
ロック情報が処理される。図8のプログラムでは、例え
ば、メソッドCのロックが冗長であるとして削除される
場合、メソッドCに対応するロック情報は、ロック確保
コードに関する情報B→Cとロック回数2から、ロック
確保コードに関する情報Bとロック回数1に変わる。最
後に、後処理部150により、同期最適化部140によ
り不要なロックが削除されたプログラムに、ロック回数
が保存される。
【0035】次に、上記のようにしてロックに関する情
報が埋め込まれたプログラムを実行し、例外が発生した
際のプロセッサ200による例外処理の動作について説
明する。例外処理の方法としては、スタック巻き戻し方
式と構造化例外処理方式とがある。図3は、スタック巻
き戻し方式により例外処理を行う場合の動作を説明する
フローチャートである。図3に示すように、例外が発生
すると、まず、例外を起こした命令のアドレスを着目ア
ドレスとする(ステップ301)。そして、例外を起こ
したときのスタックフレームを着目するフレームとす
る。
【0036】次に、着目中のフレームで当該例外を処理
できるか、すなわち、着目中のフレームが当該例外に対
するキャッチフレームであるかどうかを調べる(ステッ
プ302)。着目中のフレームがキャッチフレームであ
れば、当該着目中のフレームが、発生した当該例外を処
理できるハンドラを持つかどうか、すなわち、キャッチ
できるかどうかを調べる(ステップ303)。
【0037】着目中のフレームが例外をキャッチできる
ならば、コンパイル時に作成した対応表から、着目アド
レスに対応するロック回数を、表引きして取得する(ス
テップ304)。また、当該例外をキャッチする例外ハ
ンドラから、コンパイル時に当該例外ハンドラに付加さ
れた当該例外ハンドラの実行時のロック回数を取得す
る。そして、ステップ304で取得したロック回数(例
外発生時のロック回数)から例外ハンドラの実行時のロ
ック回数を減算する(ステップ305)。
【0038】ところで、プログラムを実行する際、各フ
レームには、ロック確保コードを実行することによって
同期スタックが生成される。同期スタックとは、ロック
対象をLIFO(Last In First Out)に保持したもの
である。そこで、この同期スタックから、ステップ30
5で算出された個数分をポップ(ロックを解除)する
(ステップ306)。
【0039】一方、ステップ302において着目中のフ
レームがキャッチフレームで無かった場合、またはステ
ップ303において着目中のフレームが発生した例外を
キャッチできなかった場合は、次に、コンパイル時に作
成した対応表から、着目アドレスに対応するロック回数
を、表引きして取得する(ステップ307)。そして、
得られたロック回数分、同期スタックからポップする
(ステップ308)。次に、着目中のフレームから呼び
出し側へ一つ戻ったフレームを新たな着目するフレーム
とし(ステップ309)、この新たな着目中のフレーム
における再開アドレスを新たな着目アドレスとして、ス
テップ302以降の処理をやり直す(ステップ31
0)。
【0040】以上のようにして、本実施の形態は、プロ
グラムを実行して例外が発生した場合に、プログラムに
埋め込まれたロックに関する情報、及び例外が発生する
可能性のあるコードのアドレスとロック回数との対応表
に基づいて、必要なロックの解除を行うことが可能であ
る。本実施の形態においてプログラムに埋め込まれるロ
ックに関する情報は、不要なロックを削除する同期最適
化の結果を反映させた情報であるため、この情報から得
られるロックの状態と実際のロックの状況とは必ず一致
する。また、例外が発生した時点でのロック回数は上記
の対応表から直接取得することができ、例外ハンドラの
実行時のロック回数は当該例外ハンドラに付加された情
報として得ることができる。また、いずれのロックを解
除するかは、プログラムの実行時に作成される同期スタ
ックにおいて機械的に確定する。したがって、従来、イ
ンライン情報を取得するために2回の検索作業を必要と
していたのに比べて作業コストを短縮することができ
る。
【0041】次に、例外処理の方法として構造化例外処
理方式を用いる場合について説明する。図4は、構造化
例外処理方式により例外処理を行う場合の動作を説明す
るフローチャートである。図4に示すように、例外が発
生すると、まず、着目中のtry領域におけるIDを取
得する(ステップ401)。そして、当該着目中のtr
y領域に関連した例外ハンドラが発生した例外をキャッ
チするかどうかを調べる(ステップ402)。
【0042】当該例外ハンドラが当該例外をキャッチす
る場合、ステップ401で取得したIDをデコードし、
コンパイル時にIDにエンコードされたtry時のロッ
ク回数を取得する(ステップ403)。ここで、上述し
たように、try領域内でロックが確保されたり解除さ
れたりしている場合、元のIDにエンコードされるロッ
ク回数が変化するため、同じtry領域であってもエン
コード後のIDの値は変化し、ロック回数の変化が反映
されることとなる。これにより、例外が発生した際に当
該try領域のIDをデコードすることにより、直ち
に、当該try領域を識別すると共に、例外が発生した
時点におけるロック回数を取得することができる。次
に、当該例外をキャッチする例外ハンドラから、コンパ
イル時に当該例外ハンドラに付加された当該例外ハンド
ラの実行時のロック回数を取得する。そして、ステップ
403で取得したロック回数(try時のロック回数)
から例外ハンドラの実行時のロック回数を減算する(ス
テップ404)。この後、同期スタックから、ステップ
404で算出された個数分をポップ(ロックを解除)す
る(ステップ405)。
【0043】一方、着目中のtry領域に関連する例外
ハンドラが発生した例外をキャッチできない場合、当該
try領域を含むtry領域に着目し(ステップ40
6)、この新たに着目したtry領域に関連する例外ハ
ンドラが発生した当該例外をキャッチするかどうかを調
べる(ステップ407)。この動作(ステップ406、
407)を、当該例外をキャッチできる例外ハンドラが
見つかるまで繰り返す。
【0044】当該例外をキャッチできる例外ハンドラが
見つかったならば、次に、同期スタックのエントリ数を
数える(ステップ408)。そして、当該例外をキャッ
チできる例外ハンドラに付加されている当該例外ハンド
ラの実行時のロック回数を、得られたエントリ数から減
算する(ステップ409)。この後、同期スタックか
ら、ステップ409で算出された個数分をポップ(ロッ
クを解除)する(ステップ405)。
【0045】以上のようにして、本実施の形態は、プロ
グラムを実行して例外が発生した場合に、プログラムに
埋め込まれたロックに関する情報、すなわち、各例外ハ
ンドラに付加された当該例外ハンドラの実行時における
ロック回数と、try領域のIDにエンコードされたt
ry時のロック回数とに基づいて、必要なロックの解除
を行うことが可能である。本実施の形態においてプログ
ラムに埋め込まれるロックに関する情報は、不要なロッ
クを削除する同期最適化の結果を反映させた情報である
ため、この情報から得られるロックの状態と実際のロッ
クの状況とは必ず一致する。また、例外が発生した時点
でのロック回数は、try領域のIDをデコードするこ
とにより直接取得することができ、例外ハンドラの実行
時のロック回数は当該例外ハンドラに付加された情報と
して得ることができる。また、いずれのロックを解除す
るかは、プログラムの実行時に作成される同期スタック
において機械的に確定する。したがって、従来、インラ
イン情報を取得するために2回の検索作業を必要として
いたのに比べて作業コストを短縮することができる。
【0046】次に、例外処理の方法がスタック巻き戻し
方式の場合と構造化例外処理方式の場合とのそれぞれに
ついて、具体的な例を挙げて、プログラムに埋め込まれ
る情報と例外発生時の処理とを説明する。図5(A)
は、図8に対応するコンパイルコードの構成例である。
図中の区画はメソッドを表し、文字はメソッド名を表
す。「SofA」はメソッドAのtry領域を表し、
「TofB」はメソッドBのtry領域を表す。また、
メソッドCのコード領域は、基本ブロックの並べ替えに
よって2カ所(アドレスa2〜a3−1とアドレスa5
〜a6−1)に配置されているが、いずれもtry領域
Tのスコープに入っている。try領域のID(図では
tryIDと表記、以下の説明においても、tryID
と記述する)は、メソッドBとメソッドCとのコード領
域に対して0を振る。ロック情報(図ではと表記)は、
[ロックの回数]同期メソッド1、同期メソッド2、・
・・のように表記した。また、図5(B)は、コードア
ドレスからロック回数を表引きするための対応図表であ
る。図5(B)を参照すると、例えば図5(A)におけ
るコードアドレスがa1からa2−1までの範囲(図で
はaddr rangeと表記)はロック回数(図では#lockと表
記)が1であることがわかる。
【0047】上記のコンパイルコードを実行して、アド
レス区間a5からa6の間のaxで例外が発生したもの
とする。すると、この例外をキャッチした例外フィルタ
は、図5(B)の対応図表を用いて、アドレスaxを表
引きし、ロック回数2を得る。また、例外フィルタは、
try領域Tに関連する例外ハンドラを見つけ、当該例
外ハンドラの実行時におけるロック回数1を得る。そし
て、ロック回数の差分1だけ同期スタックからロックを
解除する。
【0048】次に、例外処理の方法が構造化例外処理方
式の場合について説明する。図6は、図8に対応するコ
ンパイルコードの構成例であり、図5(A)の例と同様
である。try領域のID(tryID)及びロック情
報(sync Info)も図5(A)の例と同様である。ただ
し、図6では、メソッドCのコード領域が2カ所に分割
配置されていないので、図5(A)の最下に位置するメ
ソッドC(CXexception)は、try領域T
(TofB)の間に位置するメソッドCに含まれてい
る。また、図6において、try時のロック回数をエン
コードされたID(図ではenc try IDと表記)を、 tryID+ロックの回数*tryの総数 とした。例えば、メソッドBにおいて、tryIDが1
であり、ロック回数が1であり、またtryの総数は2
であるので、エンコード後のIDは3(=1+1*2)
である。
【0049】また、コントロールフロー上、try領域
のIDが切り替わる場所でエンコードされたIDを更新
するのは、エンコードされていない通常のtryIDと
同様である。本実施の形態では、try領域に同期メソ
ッドがインラインされることによりロック回数が増える
ため、エンコードされたIDの更新回数は、エンコード
しない場合のID(tryID)の更新回数よりも多く
なる。しかし、ID更新の作業コストは同期コストに比
べて相対的に小さく、冗長なロックは削除されてエンコ
ードされないので、実際上は問題とならない。
【0050】上記のコンパイルコードを実行して、tr
y領域T(TofB)で例外が発生したものとする。例
外フィルタは、例外が起きたときのtry領域のIDを
デコードする。上述したようにtryIDへのロック回
数のエンコードは tryID(=0)+ロックの回数(=2)*tryの
総数(=2) ただし、括弧内の値はtry領域Tにおける該当値であ
るので、エンコードされたIDの値を2(tryの総
数)で割った値がロック回数、余りがtryIDの値で
ある。ここでは、ロック回数が2(=4/2)となり、
tryIDが0となる。また例外フィルタは、try領
域Tに関連する例外ハンドラを見つけ、当該例外ハンド
ラのロック回数1を得る。そして、ロック回数の差分1
だけ同期スタックからロックを解除する。
【0051】図7は、図6のコンパイルコードに対し
て、メソッドCのロックが冗長であるとして削除された
場合の構成例を示す図である。図6と図7とを比較する
と、メソッドCに対応するロック情報(sync Info)が
[2]B,Cから[1]Bに変化し、エンコードされた
IDの値が4(=0+2*2)から2(=0+1*2)
に変化している。このように、本実施の形態によれば、
コンパイル時に不要なロックが削除された場合であって
も、同期最適化部140により、ロックの削除を反映さ
せた情報が生成され、コンパイルコードに埋め込まれる
こととなる。
【0052】
【発明の効果】以上説明したように、本発明によれば、
例外処理に必要なロックに関する情報を、プログラムコ
ードから直接取得することができる。これにより、かか
る情報を取得するための作業コストを抑え、例外処理に
おける作業コストへの影響を縮減することが可能とな
る。また、本発明によれば、不要なロックを削除する最
適化処理の結果を反映させた情報をプログラムコードに
埋め込むことにより、例外発生に対して確実に必要なロ
ックの解除を行い、例外処理を行うことができる。
【図面の簡単な説明】
【図1】 本実施の形態におけるコンパイラが用いられ
るコンピュータ装置のシステム構成を示す図である。
【図2】 本実施の形態におけるコンパイラの構成を説
明する図である。
【図3】 スタック巻き戻し方式により例外処理を行う
場合における本実施の形態の動作を説明するフローチャ
ートである。
【図4】 構造化例外処理方式により例外処理を行う場
合における本実施の形態の動作を説明するフローチャー
トである。
【図5】 スタック巻き戻し方式による例外処理を行う
場合に用いられる情報を説明する図であり、(A)はコ
ンパイルコードの構成例、(B)はコードアドレスから
ロック回数を表引きするための対応図表である。
【図6】 構造化例外処理方式により例外処理を行う場
合に用いられるコンパイルコードの構成例を示す図であ
る。
【図7】 図6のコンパイルコードに対して、メソッド
Cのロックが冗長であるとして削除された場合の構成例
を示す図である。
【図8】 同期メソッドをインライン展開したJava
のプログラムコードの構成概念を説明する図である。
【符号の説明】
100…コンパイラ、110…前処理部、120…ロッ
ク情報生成部、130…基本ブロック対応付け部、14
0…同期最適化部、150…後処理部、200…プロセ
ッサ、300…実行時ライブラリ、400…コード生成
装置、500…記憶装置、600…ネットワーク
フロントページの続き (72)発明者 小笠原 武史 神奈川県大和市下鶴間1623番地14 日本ア イ・ビー・エム株式会社 東京基礎研究所 内 Fターム(参考) 5B081 CC21

Claims (16)

    【特許請求の範囲】
  1. 【請求項1】 プログラミング言語で記述されたプログ
    ラムのソースコードを機械語コードに変換するコンパイ
    ラにおいて、 前記プログラムにおける関数をインライン展開し当該イ
    ンライン展開に関する情報を生成するインライン展開処
    理部と、 前記インライン展開に関する情報に基づいて、当該関数
    による資源のロックに関するロック情報を生成するロッ
    ク情報生成部と、 前記ロック情報に基づいて、前記プログラム中の例外ハ
    ンドラに当該例外ハンドラの実行時におけるロック回数
    を付加する情報付加部とを備えることを特徴とするコン
    パイラ。
  2. 【請求項2】 前記情報付加部は、例外が発生したコー
    ドのアドレスから当該コードの実行時におけるロック回
    数を表引きするための対応表を作成し、前記プログラム
    の付属情報として付加することを特徴とする請求項1に
    記載のコンパイラ。
  3. 【請求項3】 前記情報付加部は、前記プログラムに設
    定されたtry領域内のコードの実行時における前記ロ
    ック回数を当該try領域の識別情報にエンコードする
    ことを特徴とする請求項1に記載のコンパイラ。
  4. 【請求項4】 前記プログラム中に存在する不要なロッ
    クを削除し、ロックの削除の結果に応じて前記ロック情
    報生成部にて生成された前記ロック情報を更新する同期
    最適化部をさらに備え、 前記情報付加部は、前記同期最適化部により更新された
    ロック情報に基づいて、前記例外ハンドラにロック回数
    を付加することを特徴とする請求項1に記載のコンパイ
    ラ。
  5. 【請求項5】 コンピュータを制御して実行プログラム
    を変換する変換プログラムであって、 前記実行プログラムにおける関数のインライン展開に関
    する情報に基づいて、当該関数による資源の使用制限に
    関する情報を生成する機能と、 前記情報に基づいて、前記実行プログラム中の各コード
    の実行時における使用制限の状態に関する情報を前記実
    行プログラムに付加する機能とを前記コンピュータに実
    現させることを特徴とする変換プログラム。
  6. 【請求項6】 前記コンピュータに、 前記実行プログラム中に存在する不要な使用制限を削除
    し、当該削除の結果に応じて、前記情報を更新する機能
    をさらに実現させ、 前記実行プログラムに使用制限の状態に関する情報を付
    加する機能は、更新された前記情報に基づいて、前記実
    行プログラムに使用制限の状態に関する情報を付加する
    ことを特徴とする請求項5に記載の変換プログラム。
  7. 【請求項7】 コンピュータを制御してオブジェクト指
    向プログラミング言語で記述された実行プログラムを変
    換する変換プログラムであって、 前記実行プログラムにおけるメソッドのインライン展開
    に関する情報に基づいて、当該メソッドによるオブジェ
    クトのロックに関するロック情報を生成する機能と、 前記ロック情報に基づいて、前記実行プログラム中の各
    コードの実行時におけるロック回数に関する情報を前記
    実行プログラムに付加する機能とを前記コンピュータに
    実現させることを特徴とする変換プログラム。
  8. 【請求項8】 コンピュータを制御して実行プログラム
    の実行中に発生した例外を処理する例外処理プログラム
    であって、 前記実行プログラムに付加された、前記実行プログラム
    における各コードのアドレスとコードの実行時における
    資源のロック回数とを対応付けた対応情報に基づいて、
    前記例外を発生したコードのアドレスから前記例外の発
    生時におけるロック回数を求める処理と、 前記実行プログラム中の前記例外に対する例外ハンドラ
    に付加された、当該例外ハンドラの実行時におけるロッ
    ク回数を取得する処理と、 前記例外の発生時におけるロック回数と前記例外ハンド
    ラの実行時におけるロック回数との差分だけ資源のロッ
    クを解除する処理とを前記コンピュータに実行させるこ
    とを特徴とする例外処理プログラム。
  9. 【請求項9】 コンピュータを制御して実行プログラム
    の実行中に発生した例外を処理する例外処理プログラム
    であって、 前記実行プログラムに記述された、try領域内におけ
    る各コードの実行時における資源のロック回数がエンコ
    ードされたtry領域の識別情報を用い、前記例外を発
    生したコードが含まれるtry領域の識別情報をデコー
    ドして前記例外の発生時における資源のロック回数を求
    める処理と、 前記実行プログラム中の前記例外に対する例外ハンドラ
    に付加された、当該例外ハンドラの実行時におけるロッ
    ク回数を取得する処理と、 前記例外の発生時におけるロック回数と前記例外ハンド
    ラの実行時におけるロック回数との差分だけ資源のロッ
    クを解除する処理とを前記コンピュータに実行させるこ
    とを特徴とする例外処理プログラム。
  10. 【請求項10】 プログラム制御により情報処理を行う
    コンピュータ装置において、 プログラムを実行する実行手段と、 前記実行手段によるプログラムの実行中に例外が発生し
    た場合に、当該例外を処理する例外処理手段とを備え、 前記例外処理手段は、 当該プログラムに付加された各コードの実行時における
    資源のロック回数に関する情報に基づいて、前記例外の
    発生時におけるロック回数と前記例外に対する例外ハン
    ドラの実行時におけるロック回数とを求め、二つの当該
    ロック回数の差分だけ資源のロックを解除した後に、当
    該例外に対する処理を実行することを特徴とするコンピ
    ュータ装置。
  11. 【請求項11】 前記例外処理手段は、前記プログラム
    に付加された、前記プログラムにおける各コードのアド
    レスとコードの実行時における資源のロック回数とを対
    応付けた対応情報に基づいて、前記例外を発生したコー
    ドのアドレスから前記例外の発生時における資源のロッ
    ク回数を求めることを特徴とする請求項10に記載のコ
    ンピュータ装置。
  12. 【請求項12】 前記例外処理手段は、前記プログラム
    に記述された、try領域内における各コードの実行時
    における資源のロック回数がエンコードされたtry領
    域の識別情報を用い、前記例外を発生したコードが含ま
    れるtry領域の識別情報をデコードして前記例外の発
    生時における資源のロック回数を求めることを特徴とす
    る請求項10に記載のコンピュータ装置。
  13. 【請求項13】 プログラムのソースコードをコンパイ
    ルして機械語コードに変換するコンパイラと、 機械語コードに変換された前記プログラムを実行する処
    理装置とを備えたコンピュータ装置において、 前記コンパイラは、 前記プログラムにおける関数のインライン展開に関する
    情報に基づいて、当該関数による資源のロックに関する
    ロック情報を生成するロック情報生成部と、 前記ロック情報に基づいて、前記プログラム中の各コー
    ドの実行時におけるロック回数に関する情報を前記プロ
    グラムに付加する情報付加部とを備え、 前記処理装置は、 前記プログラムの実行中に例外が発生した場合に、前記
    ロック回数に関する情報に基づいて、当該例外を発生し
    たコードの実行時におけるロック回数と前記例外に対す
    る例外ハンドラの実行時におけるロック回数とを求め、
    二つの当該ロック回数の差分だけ資源のロックを解除し
    た後に、当該例外に対する処理を実行することを特徴と
    するコンピュータ装置。
  14. 【請求項14】 前記コンパイラは、 前記プログラム中に存在する不要なロックを削除し、ロ
    ックの削除の結果に応じて前記ロック情報生成部にて生
    成された前記ロック情報を更新する同期最適化部をさら
    に備え、 前記情報付加部は、前記同期最適化部により更新された
    ロック情報に基づいて、前記ロック回数に関する情報を
    前記プログラムに付加することを特徴とする請求項13
    に記載のコンピュータ装置。
  15. 【請求項15】 コンピュータを制御して実行プログラ
    ムを変換するプログラム変換方法において、 前記実行プログラムにおける関数のインライン展開に関
    する情報に基づいて、当該関数による資源の使用制限に
    関する情報を生成するステップと、 前記情報に基づいて、前記実行プログラム中の各コード
    の実行時における使用制限の状態に関する情報を前記実
    行プログラムに付加するステップとを前記コンピュータ
    に実現させることを特徴とするプログラム変換方法。
  16. 【請求項16】 コンピュータを制御して実行プログラ
    ムを変換する変換プログラムを当該コンピュータの入力
    手段が読取可能に記憶した記憶媒体において、 前記変換プログラムは、 前記実行プログラムにおける関数のインライン展開に関
    する情報に基づいて、当該関数による資源のロックに関
    するロック情報を生成する機能と、 前記ロック情報に基づいて、前記実行プログラム中の各
    コードの実行時におけるロック回数に関する情報を前記
    実行プログラムに付加する機能とを前記コンピュータに
    実現させることを特徴とする記憶媒体。
JP2001097182A 2001-03-29 2001-03-29 コンパイラ、変換プログラム、例外処理プログラム及びこれらを用いたコンピュータ装置 Expired - Fee Related JP3664478B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2001097182A JP3664478B2 (ja) 2001-03-29 2001-03-29 コンパイラ、変換プログラム、例外処理プログラム及びこれらを用いたコンピュータ装置
US10/147,195 US7089540B2 (en) 2001-03-29 2002-05-15 Compiling method with exception handling

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2001097182A JP3664478B2 (ja) 2001-03-29 2001-03-29 コンパイラ、変換プログラム、例外処理プログラム及びこれらを用いたコンピュータ装置
US10/147,195 US7089540B2 (en) 2001-03-29 2002-05-15 Compiling method with exception handling

Publications (2)

Publication Number Publication Date
JP2002297396A true JP2002297396A (ja) 2002-10-11
JP3664478B2 JP3664478B2 (ja) 2005-06-29

Family

ID=31996028

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001097182A Expired - Fee Related JP3664478B2 (ja) 2001-03-29 2001-03-29 コンパイラ、変換プログラム、例外処理プログラム及びこれらを用いたコンピュータ装置

Country Status (2)

Country Link
US (1) US7089540B2 (ja)
JP (1) JP3664478B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5204300B2 (ja) * 2009-04-28 2013-06-05 インターナショナル・ビジネス・マシーンズ・コーポレーション マルチスレッド上で動作するプログラムのプログラム・コードをロック衝突が少ないプログラム・コードに変換するための方法、並びにそのコンピュータ・プログラム及びコンピュータ・システム

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7194744B2 (en) * 2002-12-17 2007-03-20 International Business Machines Corporation System and method for dynamic exception handling using an external exception handler
CA2430383A1 (en) * 2003-05-30 2004-11-30 Ibm Canada Limited - Ibm Canada Limitee Efficiently releasing locks when an exception occurs
US7313790B2 (en) * 2003-06-23 2007-12-25 Intel Corporation Methods and apparatus for preserving precise exceptions in code reordering by using control speculation
US7392513B2 (en) * 2004-03-19 2008-06-24 Intel Corporation Methods and apparatus for merging critical sections
US7526502B2 (en) * 2004-09-10 2009-04-28 Microsoft Corporation Dynamic call site binding
US7823150B2 (en) * 2005-01-25 2010-10-26 International Business Machines Corporation Computer-implemented method, system and program product for establishing multiple read-only locks on a shared data object
US7788650B2 (en) * 2005-05-10 2010-08-31 Intel Corporation Compiler-based critical section amendment for a multiprocessor environment
US7987452B2 (en) * 2005-12-15 2011-07-26 International Business Machines Corporation Profile-driven lock handling
US8176491B1 (en) * 2006-08-04 2012-05-08 Oracle America, Inc. Fast synchronization of simple synchronized methods
US7992139B2 (en) * 2006-11-29 2011-08-02 International Business Machines Corporation Method, system and program product for transforming a single language program into multiple language programs
US8423980B1 (en) * 2008-09-18 2013-04-16 Google Inc. Methods for handling inlined functions using sample profiles
US9250937B1 (en) * 2013-11-06 2016-02-02 The Regents Of The University Of California Code randomization for just-in-time compilers
US10726196B2 (en) * 2017-03-03 2020-07-28 Evolv Technology Solutions, Inc. Autonomous configuration of conversion code to control display and functionality of webpage portions
US11188355B2 (en) 2017-10-11 2021-11-30 Barefoot Networks, Inc. Data plane program verification
US11442739B2 (en) * 2019-09-16 2022-09-13 International Business Machines Carporation Exception handling

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5901308A (en) * 1996-03-18 1999-05-04 Digital Equipment Corporation Software mechanism for reducing exceptions generated by speculatively scheduled instructions
US6247169B1 (en) * 1996-11-04 2001-06-12 Sun Microsystems, Inc. Structured exception-handling methods, apparatus, and computer program products
US5968157A (en) * 1997-01-23 1999-10-19 Sun Microsystems, Inc. Locking of computer resources
US5881280A (en) * 1997-07-25 1999-03-09 Hewlett-Packard Company Method and system for selecting instructions for re-execution for in-line exception recovery in a speculative execution processor
US6317796B1 (en) * 1997-10-06 2001-11-13 Sun Microsystems, Inc. Inline database for receiver types in object-oriented systems
JP3320358B2 (ja) * 1998-06-18 2002-09-03 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイル方法、例外処理方法、及びコンピュータ
US6247172B1 (en) * 1998-07-02 2001-06-12 Hewlett-Packard Company Method for a translation system that aggressively optimizes and preserves full synchronous exception state
JP2000122875A (ja) * 1998-10-19 2000-04-28 Internatl Business Mach Corp <Ibm> 例外処理方法およびシステム
US6412109B1 (en) * 1999-01-29 2002-06-25 Sun Microsystems, Inc. Method for optimizing java bytecodes in the presence of try-catch blocks
US6530079B1 (en) * 1999-06-02 2003-03-04 International Business Machines Corporation Method for optimizing locks in computer programs
US6757891B1 (en) * 2000-07-12 2004-06-29 International Business Machines Corporation Method and system for reducing the computing overhead associated with thread local objects
US6886094B1 (en) * 2000-09-28 2005-04-26 International Business Machines Corporation Apparatus and method for detecting and handling exceptions
US6857060B2 (en) * 2001-03-30 2005-02-15 Intel Corporation System, apparatus and method for prioritizing instructions and eliminating useless instructions

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5204300B2 (ja) * 2009-04-28 2013-06-05 インターナショナル・ビジネス・マシーンズ・コーポレーション マルチスレッド上で動作するプログラムのプログラム・コードをロック衝突が少ないプログラム・コードに変換するための方法、並びにそのコンピュータ・プログラム及びコンピュータ・システム
US8972959B2 (en) 2009-04-28 2015-03-03 International Business Machines Corporation Method of converting program code of program running in multi-thread to program code causing less lock collisions, computer program and computer system for the same

Also Published As

Publication number Publication date
US20030217327A1 (en) 2003-11-20
JP3664478B2 (ja) 2005-06-29
US7089540B2 (en) 2006-08-08

Similar Documents

Publication Publication Date Title
JP6116721B2 (ja) グラフに基づく計算の動的ロード
JP2002297396A (ja) コンパイラ、変換プログラム、例外処理プログラム及びこれらを用いたコンピュータ装置
US20110119660A1 (en) Program conversion apparatus and program conversion method
US10339031B2 (en) Efficient method data recording
US8112745B2 (en) Apparatus and method for capabilities verification and restriction of managed applications in an execution environment
JP2001282549A (ja) プログラム変換装置及び方法並びに記録媒体
US8972959B2 (en) Method of converting program code of program running in multi-thread to program code causing less lock collisions, computer program and computer system for the same
US20080022260A1 (en) Method for accessing internal states of objects in object oriented programming
US5960197A (en) Compiler dispatch function for object-oriented C
US7086044B2 (en) Method, article of manufacture and apparatus for performing automatic intermodule call linkage optimization
US8572584B2 (en) Converting program code of a multi-threaded program into program code causing less lock contentions
JP2007018254A (ja) 言語処理装置
JP4768984B2 (ja) コンパイル方法、コンパイルプログラムおよびコンパイル装置
US7770152B1 (en) Method and apparatus for coordinating state and execution context of interpreted languages
US7698534B2 (en) Reordering application code to improve processing performance
US11435989B2 (en) Thread-local return structure for asynchronous state machine
JP2019179383A (ja) Api処理方法、端末、api処理プログラム
KR20060092728A (ko) 프리-프로세스에서 파일 검색 시간 단축을 통한 컴파일러의컴파일 속도 향상 방법
JP3714201B2 (ja) コール命令並び替え方法と装置並びにプログラム
JP2005346406A (ja) 言語翻訳プログラムにおける他プログラム参照解決方法
JP2001265604A (ja) プログラム書換装置及びプログラムが記録されたコンピュータ読み取り可能な記録媒体

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20041130

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050222

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20050322

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20050323

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20050328

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080408

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090408

Year of fee payment: 4

LAPS Cancellation because of no payment of annual fees