JP2003029977A - コンピュータ装置、その例外処理プログラム及び変換プログラム、並びにコンパイル方法 - Google Patents

コンピュータ装置、その例外処理プログラム及び変換プログラム、並びにコンパイル方法

Info

Publication number
JP2003029977A
JP2003029977A JP2001205167A JP2001205167A JP2003029977A JP 2003029977 A JP2003029977 A JP 2003029977A JP 2001205167 A JP2001205167 A JP 2001205167A JP 2001205167 A JP2001205167 A JP 2001205167A JP 2003029977 A JP2003029977 A JP 2003029977A
Authority
JP
Japan
Prior art keywords
exception
execution
program
handler
code
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
JP2001205167A
Other languages
English (en)
Other versions
JP3790683B2 (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 JP2001205167A priority Critical patent/JP3790683B2/ja
Priority to US10/189,040 priority patent/US7240343B2/en
Publication of JP2003029977A publication Critical patent/JP2003029977A/ja
Application granted granted Critical
Publication of JP3790683B2 publication Critical patent/JP3790683B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

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
    • G06F8/4441Reducing the execution time required by the program code

Landscapes

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

Abstract

(57)【要約】 【課題】 例外処理における例外ハンドラの検索コスト
を効果的に削減することにより、コンピュータシステム
における実行性能の向上を図る。 【解決手段】 コンパイラ100と、プログラム実行部
200とを備え、このプログラム実行部200は、この
プログラムの実行時に、例外処理における例外ハンドラ
を探した実行コンテキストの動的頻度を求める手段と、
この動的頻度に基づいて、この実行コンテキストのうち
で最適化の対象となる実行コンテキストを決定する手段
とを備え、このコンパイラ100は、このプログラム実
行部200において決定された最適化の対象である実行
コンテキストに対応する例外処理において発生した例外
を処理する例外ハンドラを決定する手段と、この例外が
投げられてから例外ハンドラに受け取られるまでの処理
のパスをコード生成する手段とを備える。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、コンピュータプロ
グラムの最適化方法に関し、特に例外処理における処理
コストを削減する方法に関する。
【0002】
【従来の技術】プログラミング言語には、プログラムの
実行中に有効範囲外のデータ入力やデータ処理の結果が
発生した場合を例外として扱い、この例外に対する処理
(例外処理)を行うことができるものがある。今日、広
く使用されているJavaは、この例外処理を支援する
代表的な言語である。ここで、例外には大きく分けて2
通りある。1つは、実行を継続できない状況の発生であ
り、他の1つは、アルゴリズムの主コントロールフロー
から外れた状況の発生である。今日、複雑な処理を行う
と共に信頼性が要求されるプログラムを作成するための
便利な手法として、コントロールフローを変更する後者
のタイプの例外を活用することが行われている。
【0003】Java(登録商標)における例外の処理
について簡単に説明する。Javaでは、1つのtry
ブロックと1つまたは複数のcatchブロックとを対
応させる。ここで、catchブロックとは、いわゆる
ハンドラ(例外ハンドラ)であり、当該catchブロ
ックで処理が可能な例外のクラスを属性として持つ。プ
ログラムを実行する際、所定のtryブロック内で発生
した例外は、その例外のクラスに対応したcatchブ
ロックで処理される。典型的な例外処理は次のような手
続きを含む。Javaが実装されたコンピュータシステ
ム(以下、単にシステムと称す)において例外が発生す
ると、システムは、まず、例外クラスのオブジェクトを
生成し、オブジェクトの初期化を行う。Javaでは、
例外オブジェクトからその生成時のスタックトレースを
参照できると定められているので、初期化時にスタック
トレースを作成する。次に、例外オブジェクトをオペラ
ンドとし、その例外を投げるathrowバイトコードを実行
し、これによりシステムが例外状態になる。
【0004】システムは、例外状態になると、例外を発
生させているathrowバイトコードをカバーしているtr
yブロックを探す。そして、かかるtryブロックが見
つかったならば、次にシステムは、そのtryブロック
に対応するcatchブロックのリストを順に調べ、現
在の例外のクラスを処理できるcatchブロックがあ
るか検索する。そのようなcatchブロックがあれ
ば、制御をそのcatchブロックに移してプログラム
の実行を継続する。そのようなcatchブロックがな
いならば、システムは、さらに外側のtryブロックを
探し、同様の検索を続ける。
【0005】こうしたプログラムの実行時における例外
処理の処理コストには、大きく分けて、例外ハンドラの
検索コストと例外オブジェクトの生成、初期化における
処理コストとがある。このうち、例外ハンドラの検索コ
ストの削減を目的とした従来技術として、次の文献1に
開示された技術がある。 文献1:S. Lee, B.-S. Yang, S. Kim, S. Park, S.-M.
Moon, and K. Ebcio¢glu. Efficient Java exception
handling in Just-in-Time compilation. In Proceedi
ngs of the ACM 2000 Conference on Java Grande, pag
es 1-8, New York, NY, USA, June 2000. ACM, ACM Pre
ss. 同文献に記載された技術によれば、まず、例外を投げる
地点から例外を投げずに予測した例外ハンドラへ無条件
分岐する。そして、当該例外ハンドラの先頭で、例外オ
ブジェクトのクラスがその例外ハンドラで処理できるク
ラスかどうか調べる。その結果、当該例外ハンドラで処
理できるクラスであれば処理の実行を継続し、そうでな
ければ本当に例外を投げる、といった処理を行う。
【0006】また、例外オブジェクトの生成と初期化に
おける処理コストの削減を目的とした従来技術として、
次の文献2に開示された技術がある。 文献2:M. Cierniak, G.-Y. Lueh, and J. M. Stichno
th. Practicing JUDO: Java under dynamic optimizati
ons. In ACM SIGPLAN '00 Conference on Programming
language design and implementation [2], pages 18?
21 同文献に記載された技術によれば、発生した例外につい
て解析を行い、コンパイラが例外オブジェクトの生成と
初期化が副作用を持たないと判断した場合であって、か
つ見つかった例外ハンドラに対してコンパイラが例外オ
ブジェクトを使わないと判断した場合に、当該例外オブ
ジェクトの生成と初期化の処理を省略する。
【0007】ところで、プログラムにおける例外処理に
関する一般的な考え方として、例外はほとんど起こらな
いことを前提とし、また例外処理が必要であっても、当
該例外処理に要する時間はプログラム実行中の極めて短
い時間であり、例外が発生していない区間には例外処理
のためのオーバーヘッドをかけないことにより、プログ
ラムの実行速度の高速化を図ることができる、という考
え方がある。
【0008】例外ハンドラを検索する代表的な手法とし
て、スタック巻き戻し方式と構造化例外処理方式とがあ
る。スタック巻き戻し方式では、発生した例外をキャッ
チできる例外ハンドラを探して、最後のフレームから前
のフレームへ順にスタックをたどる。上記の考え方に基
づいて実行速度を高めるために最適化されたフレームに
は、例外が発生しない限り必要のない情報はなく、プロ
グラムカウンタしか記述されていない場合もある。この
場合、そのフレームに関する情報(例外ハンドラを持つ
か、解放するロックはあるか、復帰するcallee-savedレ
ジスタはあるか等)は、プログラムカウンタに対応する
コード情報構造体をコード情報構造体データベースから
検索することにより取得する。さらに、スタック巻き戻
しを進めるには、callee-savedレジスタを復帰したり、
例外ハンドラを持つフレームなら現在起きている例外を
捕る(catchする)ことができるかどうかを調べた
りすることが必要である。したがって、例外が発生した
場合に例外ハンドラを検索する処理コストが増大するこ
ととなる。
【0009】また、構造化例外処理方式は、例外が起き
ない場合でも例外ハンドラを持つフレームは常に実行コ
ンテキストに登録する。例外ハンドラの検索時に、例外
ハンドラを持たないフレームを飛ばして検索することに
よって例外ハンドラの検索コストを縮小することができ
る。
【0010】
【発明が解決しようとする課題】上記のように、Jav
aに代表される例外処理をサポートした言語は、耐久性
のあるプログラムを作成しやすい反面、例外処理に起因
するオーバーヘッドを軽減することが大きな課題とな
る。一般に、例外は実行時ライブラリで処理され、その
処理コストが大きいためである。例外処理に関しては、
上述したように、「例外はほとんど起こらない」ことを
前提とし、例外が発生していない区間には例外処理のた
めのオーバーヘッドをかけないようにする考え方がある
が、堅牢なプログラムを簡便に作成するためにプログラ
ムにおいてコントロールフローを変更するタイプの例外
の発生を多用する現状では、この例外はほとんど起こら
ないことを前提とした設計のシステムでは実行性能の低
下を招来する。
【0011】実際のアプリケーションにおいても、シス
テムの実行性能に影響するほどの大量の例外を発生させ
るものが数多く存在する。そして、発生する例外のかな
りのものは、コントロールフローを変更することを目的
とした例外であり、例外オブジェクト自身は使用されな
いことがほとんどである。ここで、例外処理における処
理コストのうち、例外オブジェクトの生成、初期化にお
ける処理コストに関しては、上述した文献2による技術
を適用したり、アプリケーションによっては予め例外オ
ブジェクトを生成しておいて再利用したりすることによ
り解決される。一方、例外ハンドラの検索コストに関し
ては、上記文献1による試みがあるものの、この従来技
術は、予測の正当性チェックが新たなオーバーヘッドと
なる。また、この従来技術を用いた場合、予測による高
速化の一方で予測が外れた場合の補償が必要となるため
に、例外オブジェクトの生成、初期化の処理コストを削
減できない。したがって、例外処理におけるコスト削減
の解決策としては適当とは言えない。
【0012】また、例外ハンドラの検索手法として構造
化例外処理方式を採用すれば、上述したように、例外ハ
ンドラの検索におけるオーバーヘッドを軽減することが
できる。しかし、例外ハンドラを持つフレームを実行コ
ンテキストに登録するための別のオーバーヘッドを必要
とし、さらに、頻繁に呼ばれるメソッドが例外ハンドラ
を持つ場合は、システムの実行性能が著しく低下してし
まう。
【0013】さらに、例外ハンドラの検索コストを低減
するために、コンパイル時に、例外が起こり得るメソッ
ド呼び出しをインライン展開するという最適化を行うこ
とが考えられる。しかし、無分別なインライン展開は、
コードを爆発的に増加させたり、より多くのコンパイル
資源を要求してコードの質を低下させたりすることにな
る。さらに、Javaで用いられる動的コンパイルで
は、コンパイルに要するメモリ、コンパイル時間が激増
し、プログラムのポーズ時間が大きくなるといった問題
が生じるため、現実的でない。すなわち、発生し得る例
外ハンドラの検索処理の全てを対象として静的な最適化
を行っても、この最適化コストに見合う実行時オーバー
ヘッド削減が得られない場合が多い。したがって、実行
時に実際に発生する例外ハンドラ検索のうち、システム
の実行性能に影響を与えるものだけを選択して削除する
(インライン展開する)ことが望ましい。
【0014】そこで、本発明は、例外処理における例外
ハンドラの検索コストを効果的に削減することにより、
コンピュータシステムにおける実行性能の向上を図るこ
とを目的とする。
【0015】また、本発明は、例外ハンドラの検索処理
の実行頻度に基づいてシステムの実行性能に実際に影響
を与える処理を対象として最適化を行うことにより、コ
ンピュータシステムにおける実行性能の向上を図ること
を他の目的とする。
【0016】
【課題を解決するための手段】上記の目的を達成するた
め、本発明は、例外処理の仕組みを持つプログラミング
言語で記述された実行プログラムを実行するコンピュー
タ装置において、この実行プログラムの実行に伴う例外
処理における例外ハンドラの検索に関する実行コンテキ
ストである例外パスを取得する例外パス取得部と、この
例外パスに例外の発生に関する情報(例外発生情報)を
付加する例外発生情報付加部と、この例外パスに付加さ
れた例外発生情報に基づいて例外が発生する頻度を計算
する例外発生頻度計算部と、この例外の発生頻度に基づ
いて、最適化を行うべき例外パスを決定する最適化対象
決定部とを備えることを特徴とする。
【0017】ここで、この例外発生情報付加部は、この
例外パスに、少なくともこの実行プログラムの実行に伴
いこの例外パス上で発生した例外の発生回数を例外発生
情報として付加する。例外発生情報としては、この他、
例外プロファイル作成時間等を付加することもできる。
また、この例外発生頻度計算部は、例外パス取得部によ
る例外パスの取得に要した時間あたりの例外の発生回数
をこの例外が発生する頻度として計算する。例外の発生
頻度としては、この他、単純に例外の発生回数をそのま
ま用いることもできる。
【0018】また、本発明は、例外処理の仕組みを持つ
プログラミング言語で記述された実行プログラムのソー
スコードを読み込み、機械語コードに変換するコンピュ
ータ装置において、この実行プログラムを試行して発生
する例外のタイプを解析する例外タイプ解析部と、この
例外のこの実行プログラムにおける発生位置をカバーす
る例外ハンドラを検索する例外ハンドラ解析部と、この
例外タイプ解析部にて求められた例外のタイプに含まれ
る各例外クラスとこの例外ハンドラ解析部にて検索され
た例外ハンドラとを対応づけた例外フローを作成する例
外フロー解析部と、この例外フローに示された例外クラ
スと例外ハンドラとの対応関係に基づいて、例外を投げ
るコードと対応する例外ハンドラとをつなぐコード変形
を行う分岐変換処理部とを備えたことを特徴とする。
【0019】より詳しくは、この分岐変換処理部は、こ
の例外を投げるコードを削除し、この実行プログラムに
おけるこの例外を投げるコードの位置から対応する例外
ハンドラへの分岐コードを生成する。
【0020】さらに、本発明は、例外処理の仕組みを持
つプログラミング言語で記述されたプログラムのソース
コードをコンパイルして機械語コードに変換するコンパ
イラと、機械語コードに変換されたこのプログラムを実
行するプログラム実行部とを備え、このプログラム実行
部は、このプログラムの実行時に、例外処理における例
外ハンドラを探した実行コンテキストの動的頻度を求め
る手段と、この動的頻度に基づいて、この実行コンテキ
ストのうちで最適化の対象となる実行コンテキストを決
定する手段とを備え、このコンパイラは、このプログラ
ム実行部において決定された最適化の対象である実行コ
ンテキストに対応する例外処理において発生した例外を
処理する例外ハンドラを決定する手段と、この例外が投
げられてから例外ハンドラに受け取られるまでの処理の
パスをコード生成する手段とを備えることを特徴とす
る。
【0021】また、本発明は、コンピュータを制御して
上述した各構成要件の機能を提供するプログラムとして
実現することができる。さらに本発明は、コンピュータ
を制御して、このコンピュータが例外処理の仕組みを持
つオブジェクト指向プログラミング言語で記述された実
行プログラムを実行する際に発生した例外に対する例外
処理を実行させる例外処理プログラムであって、このコ
ンピュータによる実行プログラムの実行に伴って発生し
た例外の発生頻度を計算し、記憶手段に格納する処理
と、この記憶手段に格納された例外の発生頻度に基づい
て、この例外に対する例外処理に関する実行コンテキス
トのうちで最適化の対象となる実行コンテキストを決定
し、最適化の対象とされた実行コンテキストを、この実
行コンテキストに対応する例外を捕るキャッチメソッド
に登録する処理とを、このコンピュータに実行させるこ
とを特徴とする。
【0022】さらにまた、本発明は、コンピュータを制
御して、このコンピュータが例外処理の仕組みを持つプ
ログラミング言語で記述された実行プログラムを実行す
る際に発生した例外に対する例外処理を実行させる例外
処理プログラムであって、このコンピュータによるこの
実行プログラムの実行に伴って、例外処理における例外
ハンドラを探した実行コンテキストの動的頻度を求めて
記憶手段に格納する処理と、この記憶手段に格納された
動的頻度に基づいて、予め定められた閾値を超える頻度
で発生するこの実行コンテキストを最適化の対象として
決定する処理とを、このコンピュータに実行させること
を特徴とする。この動的頻度は、例えば、実行プログラ
ムを実行した時間あたりの例外の発生回数を求め、かつ
求めた値をこの実行プログラムの実行状態に応じたコー
ドの実行速度に基づいて正規化することにより求めるこ
とができる。
【0023】また、本発明は、コンピュータを制御し
て、例外処理の仕組みを持つプログラミング言語で記述
された実行プログラムのソースコードを機械語コードに
変換する変換プログラムにおいて、この実行プログラム
を読み込んで解析し、この実行プログラム中の所定の例
外処理を行う例外パスに関して、例外を投げる各地点に
おける例外のタイプを決定し、この例外を投げる地点か
ら投げられる例外を受け取る例外ハンドラを決定する処
理と、この例外を投げる地点からこの例外を受け取る例
外ハンドラまでのパスをコード生成する処理とを、この
コンピュータに実行させることを特徴とする。
【0024】ここで、この例外のタイプ及び例外ハンド
ラを決定する処理は、この例外を投げる地点を含むメソ
ッドから例外を受け取る例外ハンドラを含むキャッチメ
ソッドまでを、このキャッチメソッドにインライン展開
した例外パスを対象として処理を行うことができる。
【0025】また、本発明は、コンピュータを制御し
て、例外処理の仕組みを持つプログラミング言語で記述
された実行プログラムのソースコードを機械語コードに
変換する変換プログラムにおいて、この実行プログラム
を読み込んで、この実行プログラムの実行時に行われる
例外処理の手続きをシミュレーションする処理と、この
シミュレーションの結果に基づいて発生した例外を処理
する例外ハンドラを決定する処理と、この例外が投げら
れてからこの例外ハンドラに受け取られるまでの処理の
パスをコード生成する処理とを、このコンピュータに実
行させることを特徴とする。
【0026】さらにまた、本発明は、コンピュータ装置
におけるプログラムの実行状況に応じて適当な最適化を
含むコンパイル処理を動的に行うコンパイル方法におい
て、このプログラムの実行に伴って発生した例外の発生
頻度を計算し、記憶手段に格納するステップと、この記
憶手段に格納された例外の発生頻度に基づいて、この例
外に対する例外処理に関する実行コンテキストのうちで
最適化の対象となる実行コンテキストを決定するステッ
プと、このプログラムをこのコンピュータ装置に読み込
んで最適化の対象として決定された実行コンテキストに
対応する例外処理を試行し、この試行において発生した
例外を処理する例外ハンドラを決定するステップと、こ
の例外が投げられてからこの例外ハンドラに受け取られ
るまでの処理のパスをコード生成するステップとを含む
ことを特徴とする。
【0027】
【発明の実施の形態】以下、添付図面に示す実施の形態
に基づいて、この発明を詳細に説明する。まず、本発明
の概要を説明する。本発明は、例外処理の仕組みを持つ
プログラミング言語で記述されたプログラムに対し、例
外処理における処理コスト、特に例外ハンドラの検索コ
ストの効果的な削減を実現する。本発明では、これを実
現するため、次の2種類の手法を提案する。 手法1:プログラムのコンパイル時におけるコード変形
により例外ハンドラの検索コストを削減する手法。 手法2:プログラムの実行状態をフィードバックして適
切な例外パスに対して最適化を行う手法。
【0028】これらの手法は、単独で用いることもでき
るし、組み合わせて用いることもできる。すなわち、手
法1を単独で用いる場合は、プログラムの実行状態を関
知することなくプログラム中に存在する例外ハンドラに
対して処理を実行することができる。また、手法2を単
独で用いる場合は、プログラムの実行状態のフィードバ
ックにより得られた適切な例外パスに対して任意の最適
化(例えば、インライン変換)を施すことができる。い
ずれの場合であっても、例外処理における処理コストの
削減には大きな効果を期待することができるが、これら
を組み合わせて用いれば、さらに大きな効果を奏し、当
該プログラムを実装したコンピュータシステムにおける
実行性能の向上に寄与する。なお、本発明は、例外処理
の仕組みを持つプログラミング言語で記述されたプログ
ラムに対して汎用的に利用できるが、以下では、代表的
な例として、Javaで記述されたプログラムを対象と
し、これを実装したコンピュータシステムについて説明
する。
【0029】図1は、本実施の形態における例外処理の
コスト削減方法を実現するコンピュータシステムのシス
テム構成を示す図である。図1を参照すると、本実施の
形態におけるコンピュータシステムは、入力コードをコ
ンパイルするコンパイラ100と、コンパイラ100に
てコンパイルされたオブジェクトプログラム(出力コー
ド)を実行して種々の処理を行うプログラム実行部20
0と、メモリ300とを備える。コンパイラ100及び
プログラム実行部200は、パーソナルコンピュータや
ワークステーションなどのコンピュータシステムにおけ
るプログラム制御されたCPUにて実現される。メモリ
300は、コンピュータ装置の主メモリであり、RAM
等で実現される。メモリ300には、プログラム実行部
200が使用する実行時ライブラリ310が格納されて
いる。また、図示しないが、CPUを制御してコンパイ
ラ100として動作させるためのプログラムも格納され
る。なお、メモリ300に格納される実行時ライブラリ
310、プログラム及び後述する例外リポジトリ320
は、必要に応じて、適宜磁気ディスクその他の記憶媒体
に保存されることは言うまでもない。図1において、コ
ンパイラ100は、バイトコード(byte code)で記述
された入力コードを入力して処理し、機械語で記述され
た出力コードを生成して出力する。この入力コードの入
力は、コード生成装置400にて生成された入力コード
を直接入力したり、コード生成装置400にて生成され
た入力コードを記憶した記憶装置500から入力した
り、ネットワーク600上に存在するコード生成装置4
00や記憶装置500からネットワーク600を介して
入力したりすることにより行われる。なお、本実施の形
態において、コンパイラ100は、JavaにおけるJ
IT(Just In Time)コンパイラのような、実行プログ
ラムを実行する際に動的に実行プログラムのコンパイル
処理を行うコンパイラであっても良いし、ソースプログ
ラムを予めコンパイルして生成されたオブジェクトプロ
グラムを実行プログラムとする使用形態におけるコンパ
イラであっても良い。
【0030】コンパイラ100により生成された出力コ
ードは、プログラム実行部200により実行される。こ
の際、必要に応じてメモリ300から実行時ライブラリ
310が呼び出される。実行時ライブラリ310には、
例外フィルタなど、実行時における例外処理を行うため
のプログラムが含まれている。上述した例外処理コスト
削減のための2種類の手法において、手法1は、コンパ
イラ100において実行される。また、手法2は、主と
して実行時ライブラリ310(またはその一部がコンパ
イルコードにインライン展開されたコード)による例外
処理に基づきプログラム実行部200において実行され
る。
【0031】図2は、本実施の形態におけるコンパイラ
100の構成を説明する図である。図2を参照すると、
本実施の形態のコンパイラ100は、メソッドのインラ
イン展開を行うインライン展開処理部110と、発生す
る例外のタイプを解析する例外タイプ解析部120と、
プログラムに存在する例外ハンドラを解析する例外ハン
ドラ解析部130と、例外クラスと例外ハンドラの対応
関係を示す例外フローを作成する例外フロー解析部14
0と、例外フロー解析部140にて作成された例外フロ
ーに基づいてコード生成を行う分岐変換処理部150と
を備える。図2に示したコンパイラ100の各構成要素
は、コンピュータプログラムにより制御されたCPUに
て実現される仮想的なソフトウェアブロックである。C
PUを制御する当該コンピュータプログラムは、CD−
ROMやフロッピー(登録商標)ディスクなどの記憶媒
体に格納して配布したり、ネットワークを介して伝送し
たりすることにより提供される。なお、図2に示したコ
ンパイラ100の構成要素は、本実施の形態における特
徴的な機能に関して記述したものである。図示しない
が、実際にはコンパイラ100は、入力コードの字句解
析や構文解析、機械語のコード生成といったコンパイル
処理における一般的な機能を有することは言うまでもな
い。
【0032】インライン展開処理部110は、コンパイ
ラ100においてメソッドをコンパイルする際に、処理
対象であるメソッドが例外を捕ることになるような例外
パス(ホットな例外パス)を探し、そのようなパスをイ
ンライン展開する。なお、本実施の形態における例外処
理のコスト削減方法を実現するためには、かかるインラ
イン展開による最適化は必須ではないが、この最適化を
経ることにより、本実施の形態の適用範囲が広がるた
め、処理コストの一層の削減を図ることができる。
【0033】次に、例外タイプ解析部120、例外ハン
ドラ解析部130、例外フロー解析部140及び分岐変
換処理部150による各処理は、プログラムのコンパイ
ル時に、当該プログラムにおける例外処理の手続きをシ
ミュレーション(試行)し、コンパイル単位中の例外を
明示的に投げる地点(例外の発生位置)を見つけ、見つ
かった例外を投げる各地点に関して実行される。ここ
で、コンパイル単位とは、プログラムのバイトコード列
であって、典型的には1つのメソッドのバイトコード列
である。バイトコードにおいて例外を明示的に投げるの
は、athrowバイトコードだけである。しかし、アプリケ
ーションによっては、システム例外を数多く投げるもの
があり、システム例外も最適化の対象にする必要があ
る。これに対応するため、システム例外を投げるバイト
コードを、条件テスト+システム例外を投げる特殊なat
hrowバイトコードのように読み替えて扱うこととする。
バイトコードに付与される例外表は、各tryブロック
がカバーするバイトコード範囲、そのtryブロックに
対応する例外ハンドラが受け持つ例外クラス及びその例
外ハンドラの入り口の位置を指定する。
【0034】例外タイプ解析部120は、コンパイル単
位中の例外を明示的に投げる各地点(例外の発生位置)
pにおいて、例外のタイプTpを解析する。ここで、例
外のタイプとは、投げられる可能性のある全ての例外の
クラスcの集合であり、以下の説明ではTp={c1, c
2, ...}と記す。
【0035】例外ハンドラ解析部130は、コンパイル
単位中の例外を明示的に投げる各地点pにおいて、その
地点pをカバーしている例外ハンドラを検索し、そのリ
ストを求める。この例外ハンドラリストを、以下の説明
ではHp={h1, h2, ...}と記す。
【0036】例外フロー解析部140は、コンパイル単
位中の例外を明示的に投げる各地点pにおいて、例外タ
イプ解析部120にて求めた例外の各クラスに対し、例
外ハンドラ解析部130にて求めた例外ハンドラリスト
から例外を受け取ることのできる例外ハンドラを探して
対応づける。例外クラスと例外ハンドラのこのような対
応を例外フローと呼ぶ。すなわち、例外フロー解析部1
40は、各クラスの例外がどの例外ハンドラによって捕
られるかを調べる対応関係解析手段であり、この対応関
係を示す例外フローを作成する手段である。以下の説明
では、この例外フローをf=(c,h)と記す。また、地
点pにおける例外フローの集合は、Fp={... ,(ci,
hj), ...}と記す。
【0037】分岐変換処理部150は、コンパイル単位
中の例外を明示的に投げる各地点pにおいて、例外を投
げるコードを削除し、例外フロー解析部140にて求め
た例外フロー(ci,hj)に基づき、例外クラス毎に対応
した例外ハンドラへの分岐コードを生成するコード変形
手段である。例外処理を分岐処理に変換するためのコー
ドの削除及び生成を行う際、必要に応じて補償コードも
生成する。図3は、分岐変換処理部150によるコード
生成の動作を説明するフローチャートである。図3を参
照すると、分岐変換処理部150は、まず例外フロー解
析部140にて作成された例外フローが1つか複数かを
調べる(ステップ301)。例外フローが複数ある場合
は、次のコードを生成する。すなわち、投げられる例外
クラスと例外フローに記述された例外クラスciとを比較
するコード、これらの例外クラスが一致した場合に例外
フローの例外ハンドラhjへ分岐するコードである。これ
らのコードは各例外フローに対して生成する(ステップ
302)。一方、例外フローが1つである場合は、投げ
られる例外クラスと例外フローの例外クラスciが一致す
るのは自明なので比較コードは不要である。したがっ
て、例外フローの例外ハンドラhjへの分岐コードのみを
生成する(ステップ303)。
【0038】次に、例外フローを持たない例外クラスが
存在するかどうかを調べる(ステップ304)。すなわ
ち、例外のタイプTpの要素である例外クラスのうち、
例外フローの集合Fpの要素である例外フローにおける
どの例外クラスにもならないものが存在するかどうかを
調べる。そして、そのような例外クラスが存在するなら
ば、例外を投げるコードを生成する(ステップ30
5)。
【0039】そして、例外を投げるコードの実行後で例
外ハンドラの実行前に実行することが必要な作業がある
場合、そのような必要な作業を行うための補償コード
を、当該例外ハンドラへの分岐コードと当該例外ハンド
ラとの間に挿入する(ステップ306、307)。例え
ば、インライン展開最適化されたメソッド呼び出しであ
って、地点pと例外ハンドラhjとが元々は異なるメソッ
ドに属し、それらのメソッド呼び出しの間にさらに同期
メソッド呼び出しが含まれるとする。この場合、補償コ
ードによって、そうした同期メソッドのロックの解放を
行う。
【0040】以上のように、本実施の形態のコンパイラ
100によるコード変形を行うことにより、プログラム
実行時の例外処理において、例外ハンドラの検索コスト
を完全に除去することができる。また、コンパイル処理
においては、本実施の形態による最適化の他にも、種々
の最適化やそのための解析が行われる。このような解析
及び最適化では、例外パスが存在することにより、それ
以上深く解析することができず、最適化も当該例外パス
の深さまでしか行えない場合が多い。しかし、本実施の
形態によって例外パスを除去することにより、さらに深
く解析を行うことができ、より一層の最適化を行うこと
が可能となる。
【0041】図4は、本実施の形態におけるプログラム
実行部200の構成を説明する図である。図1に示した
プログラム実行部200は、メモリ300の実行時ライ
ブラリ310に含まれる例外処理のためのプログラム
(またはその一部がコンパイルコードにインライン展開
されたコード)に基づいて例外処理システムとして動作
し、一連の動作による例外処理を実行する。図4を参照
すると、例外処理システムとして動作するプログラム実
行部200は、例外処理時に例外パスを作る例外パス取
得部210と、例外プロファイルの作成及び更新を行う
例外プロファイル編集部220と、例外の発生頻度を計
算する例外発生頻度計算部230と、例外発生頻度に基
づいて例外の重要度を判断し対応する処理を行う例外重
要度計算部240及び例外重要度判定部250とを備え
る。なお、図4に示したこれらの各構成要素は、上述の
ように、実行時ライブラリ310に含まれるプログラム
により制御されたCPU(プログラム実行部200)に
て実現される仮想的なソフトウェアブロックである。C
PUを制御する当該プログラムは、CD−ROMやフロ
ッピーディスクなどの記憶媒体に格納して配布したり、
ネットワークを介して伝送したりすることにより提供さ
れる。
【0042】例外処理システムとして動作するプログラ
ム実行部200は、例外が発生すると、通常の処理とし
て、スタックフレームを次々に遡って例外ハンドラを探
す。例外パス取得部210は、例外ハンドラの探索が行
われた際に、各フレームの実行コンテキストから、メソ
ッド指定子と、そのフレームで最後に実行した命令(コ
ード)のメソッド中における位置とのペア(メソッドコ
ンテキスト)を取得する。フレームで実行されているコ
ードがインライン展開されたコードである場合、そのフ
レームからは複数のメソッドコンテキスト列が得られ
る。この段階で、例外が投げられてから捕られるまでの
メソッドコンテキスト列が得られることとなる。このメ
ソッドコンテキスト列を例外パスと呼ぶ。なお、メソッ
ドコンテキスト及びメソッドコンテキストの列である例
外パスもまた、例外処理に関する情報を保存した実行コ
ンテキストである。
【0043】例外プロファイル編集部220は、例外パ
ス取得部210にて得られた例外パスに例外発生情報を
付した例外プロファイルを生成し、メモリ300に格納
された例外リポジトリ320に保存する。例外リポジト
リ320中に、同じ例外パスを持つ例外プロファイルが
存在する場合は、当該例外プロファイル中の例外発生情
報を更新する。ここで、例外発生情報としては、その例
外パス上で発生した例外の回数、例外プロファイルの作
成時間などを付加することができる。
【0044】例外発生頻度計算部230は、例外プロフ
ァイルに付された例外発生情報に基づいて、例外発生頻
度(動的頻度)を計算する。例外発生頻度の計算法とし
ては、例外処理コストを増やさないための単純な計算と
して、例えば、例外の発生回数をプロファイル収集時間
で割ることが考えられる。しかし、プロファイル収集時
間は、システム環境からの影響を受けやすいため、実用
性(serviceability)の視点から問題とする場合には、
例外発生頻度として単に例外の回数を使うこともでき
る。この場合、発生頻度の少ない例外が長い期間をかけ
て積算されることを避けるための操作が必要である。例
として、定期的に一律に発生回数を半分にしたり、値を
0にしたりすることが考えられる。
【0045】例外重要度計算部240は、例外パスと例
外プロファイルにおいて当該例外パスに付加されている
例外発生情報とに基づいて、当該例外の重要度を計算す
る。ここで、例外の重要度とは、例外処理における処理
コスト削減のための処理を行うべきかどうかを判断する
度合いであり、重要度が高い例外ほどシステムの実行性
能に影響を及ぼし、処理コスト削減のための処理を行う
べきとする。Javaと動的コンパイラ(JITコンパ
イラ)のような環境では、メソッドは、当初はインタプ
リタによって低速で実行されている。そして、プログラ
ムの実行が繰り返されると、当該プログラムがコンパイ
ルされ最適化されて高速に実行されるようになる。この
ため、メソッドの実行速度は、同じメソッドであって
も、インタプリタによる実行の場合、コンパイルされた
コードを実行する場合、より最適化されてコンパイルさ
れたコードを実行する場合などにより異なる。したがっ
て、同じ例外発生頻度であっても、低速で実行されたコ
ードで投げた例外における発生頻度と、高速で実行され
たコードで投げた例外における発生頻度とでは意味が異
なる。例えば、インタプリタによる実行のみで2000
サイクルに1回起きた例外は、コンパイルコードの実行
ではその数十倍から数百倍の頻度になり得る。そこで、
より正確な情報に基づいて例外の重要度を求めるため、
例外重要度計算部240は、例外発生頻度計算部230
にて計算された例外発生頻度を、それぞれの実行状態に
応じたコードの実行速度に基づいて正規化する。
【0046】例外重要度判定部250は、例外重要度計
算部240により求められた例外プロファイルの例外重
要度が一定の判断条件を満たすかどうかを調べる。ここ
で、判断条件は、例えば、例外重要度が予め設定された
閾値を超えるかどうかとすることができる。次に、例外
重要度判定部250は、上記条件を満たす(例えば閾値
を超える)例外プロファイルの例外パスに対して、次の
処理を行う。すなわち、上述したように、例外パスはメ
ソッドコンテキストの列であり、その端に位置するメソ
ッドコンテキストは、常に、例外を捕るメソッド(キャ
ッチメソッド)とその例外ハンドラである。そこで、当
該メソッドをキャッチメソッドとする例外パスを当該メ
ソッドに登録する。
【0047】これにより、例えば、コンパイルの際にお
ける例外処理コストの削減手法としてメソッドのインラ
イン展開を行う場合、コンパイラ100が所定のメソッ
ドをコンパイルする際に、そのメソッドに登録されてい
る例外パスを当該メソッドにインライン展開することが
でき、当該例外を投げる地点と捕る地点とが同じコード
セグメント内に置かれることとなる。このようにすれ
ば、コンパイラ100は、同じコードセグメント内で例
外を投げる場合にできる最適化を行うことにより、かか
る例外処理に対する最適化を行うことができる。なお、
JITコンパイラなどの動的コンパイラにおいて本実施
の形態を実現する場合、プログラムの再コンパイルによ
るオーバーヘッドを少なくするため、重要度の高い(例
えば、例外発生頻度が閾値を超えた)例外パスが得られ
た時点で直ちにキャッチメソッドをコンパイルするので
はなく、同じキャッチメソッドを持つ例外パスが続けて
得られる場合には当該キャッチメソッドのコンパイルを
抑制するといった制御が可能である。
【0048】以上のように、本実施の形態では、例外処
理における処理コストを削減する手法として、コンパイ
ラ100によるプログラムのコンパイル時に、一定の条
件の下で、例外処理を行うパスを条件分岐パスに変形
し、例外を投げるコードの位置から例外ハンドラの位置
へ直接移行させるようにコード生成を行う手法(手法
1)と、プログラム実行部200によるプログラムの実
行時に、例外の発生履歴を取り、この履歴に基づいて所
定の例外パスを最適化の対象に決定し、コンパイル時に
動的に最適化を行う手法(手法2)とを提供する。これ
らの手法は単独で用いることができる。すなわち、手法
1を単独で用いる場合、プログラムの実行状況(例外の
発生履歴)に関わらず、例外が起こり得る全てのメソッ
ドに対してコード変形の処理を行うことができる。ただ
し、この場合、例外ハンドラがメソッド内にない場合な
ど、必ずしも全ての例外パスを最適化できるとは限らな
い。しかしながら、プログラム全般的には、例外ハンド
ラの検索コストを削減し、システムの実行性能の向上に
寄与し得る。
【0049】一方、手法2を単独で用いる場合、最適化
の手法として手法1に限らず、インライン変換などの最
適化の対象となる例外パスを決定することができる。手
法2により決定された例外パスは、プログラムの実行に
際して頻繁に例外が発生し、実際に例外処理を行うパス
である。したがって、システムの実行性能に対して影響
を及ぼしており、これを最適化することによって当該シ
ステムの実行性能の向上に寄与し得る。すなわち、手法
2は、プログラムを実際に実行しながら、システムの実
行性能に影響するホットな例外パス(またはそのメソッ
ド呼び出し)を検出する機構を提供する意義がある。そ
して、手法1、2を組み合わせる場合、手法2によって
最適化の対象とされた例外パスをインライン展開するこ
とにより、手法1の適用範囲が広がるというさらなる利
点がある。
【0050】なお、JavaのJITコンパイラのよう
に、プログラムの実行状況に応じてプログラムがコンパ
イルされたり、新たな最適化を含んで再コンパイルされ
たりする環境では、コンパイル時にそれまでのプログラ
ムの実行状況に応じて適宜インライン展開や手法1によ
る最適化を適用することが容易である。したがって、こ
のような動的コンパイラを持つ環境は、手法2の導入に
適していると言える。しかしながら、静的なコンパイラ
にて予めコンパイルしたオブジェクトプログラムをシス
テムに提供するような環境であっても、システムにおけ
るプログラム実行時の例外の発生履歴を取っておき、こ
の履歴に基づいた最適化を含めて定期的にプログラムを
再コンパイルし、アップグレードされたオブジェクトプ
ログラムを再配布するなどの方法を採ることにより、手
法2を効果的に利用することが可能である。
【0051】次に、本実施の形態における具体的な動作
例について説明する。次に示す4つの動作例のうち、動
作例1、2は、プログラム実行部200による例外処理
時の動作であり、本実施の形態における例外処理コスト
削減のための2種類の手法における手法2の具体例(そ
のフィードバック部分)に相当する。また、動作例3、
4は、コンパイラ100によるコンパイル時のコード変
形の動作であり、手法1の具体例に相当する。
【0052】<動作例1>図5は、スタックフレームの
例を示す図である。図5に示すスタックフレームは、4
つのメソッドA、B、C、Dのフレームを示す。図示の
状態は、これらのメソッドにおいて、メソッドDがコー
ド位置d1でメソッドCを呼び、メソッドCがコード位
置c1でメソッドBを呼び、メソッドBがコード位置b
1でメソッドAを呼び、そして、メソッドAがコード位
置a1で例外を投げたときの状態である。
【0053】例外が投げられると、一般に、例外処理シ
ステムであるプログラム実行部200の例外パス取得部
210は、スタックを逆向きに検索し、投げられた例外
を処理できる例外ハンドラを持つフレームを探す。例外
パス取得部210は、例外ハンドラを検索しながら、検
索順序を認識しつつメソッドコンテキストを保存する。
メソッドAとそのコード位置a1というメソッドコンテ
キストを(A,a1)と表すとする。すると、例外ハン
ドラが見つかったときのメソッドコンテキスト列、すな
わち例外パスは、{(A,a1),(B,b1),
(C,c1),(D,d1)}である。この例外パスを
pとする。次に、例外プロファイル編集部220が、メ
モリ300の例外リポジトリ320を調べ、例外リポジ
トリ320に例外パスpが例外プロファイルとして登録
されていない場合、新たに例外プロファイルとして登録
し、例外発生情報として、開始時刻(start_time=)1
00と発生回数(count=)0とを与える。
【0054】プログラムの実行が進み、この例外が繰り
返し起こったものとする。すると、この例外が発生する
たびに、例外プロファイル編集部220は、例外リポジ
トリ320中に例外パスpの例外プロファイルを見つ
け、発生回数を更新する。今、時刻100100に発生
回数が500になったとする。このとき、例外頻度は1
/200である。今、例外頻度を例外重要度とし、閾値
を1/200とすると、この例外プロファイルの例外重
要度は閾値に達した。したがって、例外発生頻度計算部
230、例外重要度計算部240の処理を経て、例外重
要度判定部250が、この例外パスを、後にプログラム
をコンパイルする際における例外処理コストを削減する
処理の対象として、この例外のキャッチメソッドである
メソッドDに登録する。
【0055】したがって、コンパイル時における例外処
理コストの削減手法としてインライン展開を用いる場
合、コンパイラ100は、メソッドDをコンパイルする
際に、例外パスp={(A,a1),(B,b1),
(C,c1),(D,d1)}をメソッドDにインライ
ン展開し、例外を投げる点a1と例外を捕る点d2を、
同一コードセグメント内に配置する。そして、コンパイ
ルスコープ内に例外を投げる点と捕る点が存在する場合
の最適化を実行する。
【0056】<動作例2>動作例1では、例外頻度を求
める際に時間間隔を用いた。しかし、時間間隔は外部環
境、特に、同時に動く別のプログラムの動作に影響され
やすい。プログラムの実用性(serviceability)という
視点では、プログラムの動作の再現性が重要である。そ
のため、外部環境からの影響を受ける要因を持つ最適化
が困難である場合がある。そこで、動作例1に示した状
況(図5参照)を例として、例外プロファイルにおい
て、例外発生情報として例外の発生回数(count)
のみを例外パスに付加することを考える。このようにす
れば、単に例外の起きた回数だけが例外発生情報として
扱われるので、外部環境からの影響を受けることはな
い。ただし、時間の概念を取り去ったため、長い時間を
かけることで閾値に達するような例外が現れてしまう。
このような事態を避けるため、例外重要度の高い例外パ
スを例外処理コスト削減処理の対象として登録する際、
その他の例外パスの例外発生情報である例外の発生回数
を初期化する(値を0に戻す)。
【0057】<動作例3>次に、コンパイル時における
コード変形の動作により例外の検索コストを削減する手
法の動作例を説明する。図6は、例外表(exception ta
ble)、例外を投げるバイトコード列(プログラムカウ
ンタpc_start1からpc_end1まで)、例外ハンドラのバイ
トコード列(プログラムカウンタpc_handler1から始ま
る)、コンパイラ100の処理により変形された例外を
投げるバイトコード列を示す図である。例外を投げるバ
イトコード列において、new Excコードは、例外クラス
Excのオブジェクトを生成、dupでそのオブジェクト
へのポインタを複製、invokespecial Exc()Vで複製した
ポインタの1つを使ってオブジェクトを初期化、athrow
でポインタのもう1つを使って例外を投げる。このコー
ド列は非常によく見られる典型的なコード列である。
【0058】ここで、本実施の形態によるコード変形
を、プログラムカウンタpc_throw1のathrowに適用す
る。まず、new Excコードnewによって生成されたE
xcクラスのオブジェクトを投げることがデータフロー
解析により分かる。ここでは、例外タイプ解析部120
は、pc_throw1における例外タイプをT1={"Exc"}と
認識する。次に、例外ハンドラ解析部130が、例外表
を調べ、pc_throw1をカバーするハンドラリストH1=
{h1}を得る。そして、ハンドラh1は、例外クラスEx
cを受け取る。次に、例外フロー解析部140が例外フ
ローにおける利害クラスと例外ハンドラとの関係を解析
し、これにより、例外タイプT1の要素"Exc"を、ハン
ドラリストH1の要素h1が受け取ることが分かり、例外
フロー集合F1={("Exc",h1)}が求まる。次に、分岐
変換処理部150は、例外フロー解析部140の解析結
果に基づいてコード変形を行う。本動作例では例外フロ
ーが1つであるので、図3のステップ303に相当し、
したがって分岐変換処理部150は、athrowを除去して
gotopc_handler1を挿入する。以上により、コンパイル
においてハンドラ検索コストを除去できた。
【0059】<動作例4>次に、動作例3では例外フロ
ーが1つである場合の動作を説明したが、次に例外フロ
ーが複数存在する場合の動作を説明する。図7は、例外
表(exception table)、例外を投げるバイトコード列
(プログラムカウンタpc_start1からpc_end1まで)、ハ
ンドラのバイトコード列(プログラムカウンタpc_handl
er1から始まる)、コンパイラ100の処理により変形
された例外を投げるバイトコード列を示す図である。図
6に示したバイトコード列等と比較すると、例外オブジ
ェクトの生成、初期化が当該コンパイル単位内にないこ
と、及びpc_throw1に2種類のクラスの例外オブジェク
トが到達し得ることが異なっている。
【0060】動作例3と同様に、本実施の形態によるコ
ード変形を、プログラムカウンタpc_throw1のathrowに
適用する。まず、データフロー解析により、他のコンパ
イル単位において生成された2つのクラスExc1及びExc2
のオブジェクトが到達し得ることが分かる。ここでは、
例外タイプ解析部120は、pc_throw1における例外タ
イプをT1={"Exc1", "Exc2"}と認識する。次に、例
外ハンドラ解析部130が、例外表を調べ、pc_throw1
をカバーするハンドラリストH1={h1}を得る。ここ
で、ハンドラh1は、例外クラスExc1を受け取るが、Exc2
は受け取らない。次に、例外フロー解析部140が例外
フローにおける利害クラスと例外ハンドラとの関係を解
析し、これにより、例外タイプT1の要素"Exc1"を、ハ
ンドラリストH1の要素h1が受け取ることが分かり、例
外フロー集合F1={("Exc1",h1)}が求まる。次に、
分岐変換処理部150は、例外フロー解析部140の解
析結果に基づいてコード変形を行う。本動作例では例外
フローが複数有るので図3のステップ302に相当し、
かつ例外フローを持たない例外クラスExc2が存在するの
で同じく図3のステップ305に相当する。したがっ
て、分岐変換処理部150は、athrowを除去して、投げ
る例外のクラスがExc1であるかどうかを調べ(instance
of Exc1)、Exc1であるならば、例外ハンドラh1に分岐
するコード(ifneq pc_handler1)を挿入する。一方、
投げる例外のクラスがExc1でない(すなわちExc2)なら
ば、例外を投げるコードを挿入する。以上により、コン
パイルにおいて、投げられる例外のクラスがExc1である
場合のハンドラ検索コストを除去できた。
【0061】
【発明の効果】以上説明したように、本発明によれば、
例外処理における例外ハンドラの検索コストを効果的に
削減することができ、これにより、コンピュータシステ
ムにおける実行性能の向上を図ることができる。また、
本発明によれば、例外ハンドラの検索処理の実行頻度に
基づいてシステムの実行性能に実際に影響を与える処理
を対象として動的に最適化を行うことができ、これによ
り、コンピュータシステムにおける実行性能の向上を図
ることができる。
【図面の簡単な説明】
【図1】 本実施の形態における例外処理のコスト削減
方法を実現するコンピュータシステムのシステム構成を
示す図である。
【図2】 本実施の形態におけるコンパイラの構成を説
明する図である。
【図3】 図2のコンパイラの分岐変換処理部によるコ
ード生成の動作を説明するフローチャートである。
【図4】 本実施の形態におけるプログラム実行部の構
成を説明する図である。
【図5】 本実施の形態の動作を説明する図であり、処
理対象となるスタックフレームの例を示す図。
【図6】 本実施の形態の動作を説明する図であり、例
外表、例外を投げるバイトコード列、例外ハンドラのバ
イトコード列及びコンパイラの処理により変形された例
外を投げるバイトコード列の例を示す図である。
【図7】 本実施の形態の動作を説明する図であり、例
外表、例外を投げるバイトコード列、例外ハンドラのバ
イトコード列及びコンパイラの処理により変形された例
外を投げるバイトコード列の他の例を示す図である。
【符号の説明】
100…コンパイラ、110…インライン展開処理部、
120…例外タイプ解析部、130…例外ハンドラ解析
部、140…例外フロー解析部、150…分岐変換処理
部、200…プログラム実行部、210…例外パス取得
部、220…例外プロファイル編集部、230…例外発
生頻度計算部、240…例外重要度計算部、250…例
外重要度判定部、300…メモリ、310…実行時ライ
ブラリ、320…例外リポジトリ、400…コード生成
装置、500…記憶装置、600…ネットワーク
─────────────────────────────────────────────────────
【手続補正書】
【提出日】平成14年5月13日(2002.5.1
3)
【手続補正1】
【補正対象書類名】図面
【補正対象項目名】図5
【補正方法】変更
【補正内容】
【図5】
フロントページの続き (72)発明者 小笠原 武史 神奈川県大和市下鶴間1623番地14 日本ア イ・ビー・エム株式会社 東京基礎研究所 内 Fターム(参考) 5B081 AA09 CC16 CC21 CC30

Claims (16)

    【特許請求の範囲】
  1. 【請求項1】 例外処理の仕組みを持つプログラミング
    言語で記述された実行プログラムを実行するコンピュー
    タ装置において、 前記実行プログラムの実行に伴う例外処理における例外
    ハンドラの検索に関する実行コンテキストである例外パ
    スを取得する例外パス取得部と、 前記例外パス取得部にて取得された前記例外パスに例外
    の発生に関する情報を付加する例外発生情報付加部と、 前記例外発生情報付加部により前記例外パスに付加され
    た前記例外の発生に関する情報に基づいて例外が発生す
    る頻度を計算する例外発生頻度計算部と、 前記例外発生頻度計算部により計算された例外の発生頻
    度に基づいて、最適化を行うべき前記例外パスを決定す
    る最適化対象決定部とを備えることを特徴とするコンピ
    ュータ装置。
  2. 【請求項2】 前記例外発生情報付加部は、前記例外パ
    スに、少なくとも前記実行プログラムの実行に伴い当該
    例外パス上で発生した例外の発生回数を前記例外の発生
    に関する情報として付加することを特徴とする請求項1
    に記載のコンピュータ装置。
  3. 【請求項3】 前記例外発生頻度計算部は、前記例外パ
    ス取得部による例外パスの取得に要した時間あたりの前
    記例外の発生回数を前記例外が発生する頻度として計算
    することを特徴とする請求項1に記載のコンピュータ装
    置。
  4. 【請求項4】 例外処理の仕組みを持つプログラミング
    言語で記述された実行プログラムのソースコードを読み
    込み、機械語コードに変換するコンピュータ装置におい
    て、 前記実行プログラムを試行して発生する例外のタイプを
    解析する例外タイプ解析部と、 前記実行プログラムを試行して発生する例外の当該実行
    プログラムにおける発生位置をカバーする例外ハンドラ
    を検索する例外ハンドラ解析部と、 前記例外タイプ解析部にて求められた例外のタイプに含
    まれる各例外クラスと前記例外ハンドラ解析部にて検索
    された前記例外ハンドラとを対応づけた例外フローを作
    成する例外フロー解析部と、 前記例外フロー解析部にて得られた前記例外クラスと前
    記例外ハンドラとの対応関係に基づいて、例外を投げる
    コードと対応する例外ハンドラとをつなぐコード変形を
    行う分岐変換処理部とを備えたことを特徴とするコンピ
    ュータ装置。
  5. 【請求項5】 前記分岐変換処理部は、前記例外を投げ
    るコードを削除し、前記実行プログラムにおける当該コ
    ードの位置から対応する前記例外ハンドラへの分岐コー
    ドを生成することを特徴とする請求項4に記載のコンピ
    ュータ装置。
  6. 【請求項6】 例外処理の仕組みを持つプログラミング
    言語で記述されたプログラムのソースコードをコンパイ
    ルして機械語コードに変換するコンパイラと、 機械語コードに変換された当該プログラムを実行するプ
    ログラム実行部とを備え、 前記プログラム実行部は、 前記プログラムの実行時に、例外処理における例外ハン
    ドラを探した実行コンテキストの動的頻度を求める手段
    と、 前記動的頻度に基づいて、前記実行コンテキストのうち
    で最適化の対象となる実行コンテキストを決定する手段
    とを備え、 前記コンパイラは、 前記プログラム実行部において決定された最適化の対象
    である前記実行コンテキストに対応する例外処理におい
    て発生した例外を処理する例外ハンドラを決定する手段
    と、 前記例外が投げられてから前記例外ハンドラに受け取ら
    れるまでの処理のパスをコード生成する手段とを備える
    ことを特徴とするコンピュータ装置。
  7. 【請求項7】 コンピュータを制御して、当該コンピュ
    ータが例外処理の仕組みを持つプログラミング言語で記
    述された実行プログラムを実行する際に発生した例外に
    対する例外処理を実行させる例外処理プログラムであっ
    て、 前記例外処理における例外ハンドラの検索に関する実行
    コンテキストである例外パスを取得する例外パス取得手
    段と、 前記例外パス取得手段にて取得された前記例外パスに例
    外の発生に関する情報を付加する例外発生情報付加手段
    と、 前記例外発生情報付加手段により前記例外パスに付加さ
    れた前記例外の発生に関する情報に基づいて例外が発生
    する頻度を計算する例外発生頻度計算手段と、 前記例外発生頻度計算手段により計算された例外の発生
    頻度に基づいて、最適化を行うべき前記例外パスを決定
    する最適化対象決定手段として、前記コンピュータを機
    能させることを特徴とする例外処理プログラム。
  8. 【請求項8】 コンピュータを制御して、当該コンピュ
    ータが例外処理の仕組みを持つオブジェクト指向プログ
    ラミング言語で記述された実行プログラムを実行する際
    に発生した例外に対する例外処理を実行させる例外処理
    プログラムであって、 前記コンピュータによる前記実行プログラムの実行に伴
    って発生した例外の発生頻度を計算し、記憶手段に格納
    する処理と、 前記記憶手段に格納された前記例外の発生頻度に基づい
    て、前記例外に対する例外処理に関する実行コンテキス
    トのうちで最適化の対象となる実行コンテキストを決定
    し、最適化の対象とされた当該実行コンテキストを、当
    該実行コンテキストに対応する例外を捕るキャッチメソ
    ッドに登録する処理とを、 前記コンピュータに実行させることを特徴とする例外処
    理プログラム。
  9. 【請求項9】 コンピュータを制御して、当該コンピュ
    ータが例外処理の仕組みを持つプログラミング言語で記
    述された実行プログラムを実行する際に発生した例外に
    対する例外処理を実行させる例外処理プログラムであっ
    て、 前記コンピュータによる前記実行プログラムの実行に伴
    って、例外処理における例外ハンドラを探した実行コン
    テキストの動的頻度を求めて記憶手段に格納する処理
    と、 前記記憶手段に格納された前記動的頻度に基づいて、予
    め定められた閾値を超える頻度で発生する前記実行コン
    テキストを最適化の対象として決定する処理とを、 前記コンピュータに実行させることを特徴とする例外処
    理プログラム。
  10. 【請求項10】 前記実行コンテキストの動的頻度を求
    めて記憶手段に格納する処理は、前記実行プログラムを
    実行した時間あたりの例外の発生回数を求め、かつ求め
    た値を当該実行プログラムの実行状態に応じたコードの
    実行速度に基づいて正規化することにより当該動的頻度
    を求めることを特徴とする請求項9に記載の例外処理プ
    ログラム。
  11. 【請求項11】 コンピュータを制御して、例外処理の
    仕組みを持つプログラミング言語で記述された実行プロ
    グラムのソースコードを機械語コードに変換する変換プ
    ログラムにおいて、 前記実行プログラムを試行して発生する例外のタイプを
    解析する例外タイプ解析手段と、 前記実行プログラムを試行して発生する例外の当該実行
    プログラムにおける発生位置をカバーする例外ハンドラ
    を検索する例外ハンドラ解析手段と、 前記例外タイプ解析手段にて求められた例外のタイプに
    含まれる各例外クラスと前記例外ハンドラ解析手段にて
    検索された前記例外ハンドラとを対応づける対応関係解
    析手段と、 前記対応関係解析手段にて得られた前記例外クラスと前
    記例外ハンドラとの対応関係に基づいて、例外を投げる
    コードと対応する例外ハンドラとをつなぐコード変形を
    行うコード変形手段として、前記コンピュータを機能さ
    せることを特徴とする変換プログラム。
  12. 【請求項12】 前記コード変形手段は、前記例外を投
    げるコードを削除し、前記実行プログラムにおける当該
    コードの位置から対応する前記例外ハンドラへの分岐コ
    ードを生成することを特徴とする請求項11に記載の変
    換プログラム。
  13. 【請求項13】 コンピュータを制御して、例外処理の
    仕組みを持つプログラミング言語で記述された実行プロ
    グラムのソースコードを機械語コードに変換する変換プ
    ログラムにおいて、 前記実行プログラムを読み込んで解析し、当該実行プロ
    グラム中の所定の例外処理を行う例外パスに関して、例
    外を投げる各地点における例外のタイプを決定し、当該
    例外を投げる地点から投げられる例外を受け取る例外ハ
    ンドラを決定する処理と、 前記例外を投げる地点から当該例外を受け取る前記例外
    ハンドラまでのパスをコード生成する処理とを、 前記コンピュータに実行させることを特徴とする変換プ
    ログラム。
  14. 【請求項14】 前記例外のタイプ及び例外ハンドラを
    決定する処理は、前記例外を投げる地点を含むメソッド
    から例外を受け取る例外ハンドラを含むキャッチメソッ
    ドまでを当該キャッチメソッドにインライン展開した例
    外パスを対象として処理を行うことを特徴とする請求項
    13に記載の変換プログラム。
  15. 【請求項15】 コンピュータを制御して、例外処理の
    仕組みを持つプログラミング言語で記述された実行プロ
    グラムのソースコードを機械語コードに変換する変換プ
    ログラムにおいて、 前記実行プログラムを読み込んで、当該実行プログラム
    の実行時に行われる例外処理の手続きをシミュレーショ
    ンする処理と、 前記シミュレーションの結果に基づいて発生した例外を
    処理する例外ハンドラを決定する処理と、 前記例外が投げられてから前記例外ハンドラに受け取ら
    れるまでの処理のパスをコード生成する処理とを、 前記コンピュータに実行させることを特徴とする変換プ
    ログラム。
  16. 【請求項16】 コンピュータ装置におけるプログラム
    の実行状況に応じて適当な最適化を含むコンパイル処理
    を動的に行うコンパイル方法において、 前記プログラムの実行に伴って発生した例外の発生頻度
    を計算し、記憶手段に格納するステップと、 前記記憶手段に格納された前記例外の発生頻度に基づい
    て、前記例外に対する例外処理に関する実行コンテキス
    トのうちで最適化の対象となる実行コンテキストを決定
    するステップと、 前記プログラムを前記コンピュータ装置に読み込んで最
    適化の対象として決定された前記実行コンテキストに対
    応する例外処理を試行し、当該試行において発生した例
    外を処理する例外ハンドラを決定するステップと、 前記例外が投げられてから前記例外ハンドラに受け取ら
    れるまでの処理のパスをコード生成するステップとを含
    むことを特徴とするコンパイル方法。
JP2001205167A 2001-07-05 2001-07-05 コンピュータ装置、その例外処理プログラム及びコンパイル方法 Expired - Lifetime JP3790683B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2001205167A JP3790683B2 (ja) 2001-07-05 2001-07-05 コンピュータ装置、その例外処理プログラム及びコンパイル方法
US10/189,040 US7240343B2 (en) 2001-07-05 2002-07-03 System and method for handling an exception in a program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2001205167A JP3790683B2 (ja) 2001-07-05 2001-07-05 コンピュータ装置、その例外処理プログラム及びコンパイル方法

Publications (2)

Publication Number Publication Date
JP2003029977A true JP2003029977A (ja) 2003-01-31
JP3790683B2 JP3790683B2 (ja) 2006-06-28

Family

ID=19041531

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001205167A Expired - Lifetime JP3790683B2 (ja) 2001-07-05 2001-07-05 コンピュータ装置、その例外処理プログラム及びコンパイル方法

Country Status (2)

Country Link
US (1) US7240343B2 (ja)
JP (1) JP3790683B2 (ja)

Families Citing this family (44)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030135788A1 (en) * 2002-01-11 2003-07-17 Raj Prakash Profile feedback assisted null check removal
US20080027769A1 (en) * 2002-09-09 2008-01-31 Jeff Scott Eder Knowledge based performance management system
US20070011049A1 (en) * 2005-07-09 2007-01-11 Eder Jeffrey S Intelligent, personalized commerce chain
US7730063B2 (en) * 2002-12-10 2010-06-01 Asset Trust, Inc. Personalized medicine service
US7426499B2 (en) * 2004-11-08 2008-09-16 Asset Trust, Inc. Search ranking system
EP1349111A1 (en) * 2002-03-27 2003-10-01 Hewlett-Packard Company Improvements in or relating to software
US20040006583A1 (en) * 2002-06-26 2004-01-08 Nicholas Shaylor Method and apparatus for converting a synchronized method into a non-synchronized method
US20040128658A1 (en) * 2002-12-27 2004-07-01 Guei-Yuan Lueh Exception handling with stack trace cache
JP3899046B2 (ja) * 2003-03-20 2007-03-28 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ装置、コンパイラプログラム、記録媒体、及びコンパイル方法
US7120898B2 (en) * 2003-06-26 2006-10-10 Microsoft Corporation Intermediate representation for multiple exception handling models
US7086041B2 (en) * 2003-06-27 2006-08-01 Microsoft Corporation Extensible type system for representing and checking consistency of program components during the process of compilation
US7685581B2 (en) * 2003-06-27 2010-03-23 Microsoft Corporation Type system for representing and checking consistency of heterogeneous program components during the process of compilation
US7707566B2 (en) * 2003-06-26 2010-04-27 Microsoft Corporation Software development infrastructure
US7559050B2 (en) * 2003-06-30 2009-07-07 Microsoft Corporation Generating software development tools via target architecture specification
US7788652B2 (en) * 2003-06-27 2010-08-31 Microsoft Corporation Representing type information in a compiler and programming tools framework
US20050015579A1 (en) * 2003-07-15 2005-01-20 Rajeev Grover Handling exceptions
US7669193B1 (en) * 2003-09-25 2010-02-23 Lantronix, Inc. Program transformation using flow-sensitive type constraint analysis
US7577961B1 (en) * 2004-08-25 2009-08-18 Sun Microsystems, Inc. Methods and apparatus for exception-based programming
US7596780B2 (en) * 2004-10-22 2009-09-29 Microsoft Corporation System and method for virtual catching of an exception
TWI283192B (en) * 2004-12-21 2007-07-01 Ind Tech Res Inst A flat-plate type static dust-connecting device
US8713025B2 (en) 2005-03-31 2014-04-29 Square Halt Solutions, Limited Liability Company Complete context search system
US7877740B2 (en) * 2005-06-13 2011-01-25 Hewlett-Packard Development Company, L.P. Handling caught exceptions
US8762953B2 (en) * 2007-07-12 2014-06-24 The Mathworks, Inc. Exception-based error handling in an array-based language
US8689194B1 (en) * 2007-08-20 2014-04-01 The Mathworks, Inc. Optimization identification
US8250544B2 (en) * 2008-03-05 2012-08-21 Microsoft Corporation Annotating exception information in a computer program
US7921195B2 (en) * 2008-06-09 2011-04-05 International Business Machines Corporation Optimizing service processing based on business information, operational intelligence, and self-learning
US20100122073A1 (en) * 2008-11-10 2010-05-13 Ravi Narayanaswamy Handling exceptions in software transactional memory systems
US8365198B2 (en) * 2008-12-09 2013-01-29 Microsoft Corporation Handling exceptions in a data parallel system
US8782607B2 (en) * 2009-02-20 2014-07-15 Microsoft Corporation Contract failure behavior with escalation policy
US10346199B2 (en) 2009-04-10 2019-07-09 Microsoft Technology Licensing, Llc Handling exceptions related to corrupt application state
US8250576B2 (en) * 2009-09-30 2012-08-21 Microsoft Corporation Structured task hierarchy for a parallel runtime
US9069897B2 (en) * 2011-11-23 2015-06-30 Microsoft Technology Licensing, Llc Capturing telemetry data by dynamic language engine
US9141351B2 (en) * 2012-05-01 2015-09-22 Oracle International Corporation Indicators for resources with idempotent close methods in software programs
US9141343B2 (en) * 2012-05-01 2015-09-22 Oracle International Corporation Indicators for resources with close methods that do not complete erroneously in software programs
CN103425541A (zh) * 2012-05-25 2013-12-04 鸿富锦精密工业(深圳)有限公司 异常处理机制检测电子装置、系统及方法
US10255158B2 (en) * 2013-10-15 2019-04-09 Oracle International Corporation Monitoring and diagnostics of business transaction failures
CA2831711A1 (en) * 2013-10-31 2015-04-30 Ibm Canada Limited - Ibm Canada Limitee Performing safe conditional-load and conditional-store operations
US10705850B2 (en) * 2017-10-11 2020-07-07 Microsoft Technology Licensing, Llc Stack frame unwinding for exception handling
US11442739B2 (en) * 2019-09-16 2022-09-13 International Business Machines Carporation Exception handling
USD949355S1 (en) 2019-10-15 2022-04-19 JelikaLite, LLC Head wearable light therapy device
US11042422B1 (en) 2020-08-31 2021-06-22 Microsoft Technology Licensing, Llc Hybrid binaries supporting code stream folding
US11403100B2 (en) 2020-08-31 2022-08-02 Microsoft Technology Licensing, Llc Dual architecture function pointers having consistent reference addresses
US11231918B1 (en) 2020-08-31 2022-01-25 Microsoft Technologly Licensing, LLC Native emulation compatible application binary interface for supporting emulation of foreign code
US11675651B2 (en) 2021-03-11 2023-06-13 International Business Machines Corporation Critical problem exception handling

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5854928A (en) 1996-10-10 1998-12-29 Hewlett-Packard Company Use of run-time code generation to create speculation recovery code in a computer system
US5835702A (en) * 1996-10-21 1998-11-10 International Business Machines Corporation Performance monitor
AU1078099A (en) 1997-10-13 1999-05-03 Institute For The Development Of Emerging Architectures, Llc Method and apparatus for optimizing instruction execution
US6070009A (en) * 1997-11-26 2000-05-30 Digital Equipment Corporation Method for estimating execution rates of program execution paths
JP3280322B2 (ja) 1998-05-15 2002-05-13 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイル方法、フレーム検出方法及び装置、コード破棄方法、並びにコンピュータ
JP3320358B2 (ja) 1998-06-18 2002-09-03 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイル方法、例外処理方法、及びコンピュータ
US6631515B1 (en) * 1998-09-24 2003-10-07 International Business Machines Corporation Method and apparatus to reduce code size and runtime in a Java environment
JP2000122875A (ja) 1998-10-19 2000-04-28 Internatl Business Mach Corp <Ibm> 例外処理方法およびシステム
GB9825102D0 (en) * 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
JP4088379B2 (ja) 1999-01-29 2008-05-21 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイル方法及び装置、並びにスタック・トレース方法及び装置
US6718543B2 (en) * 1999-11-08 2004-04-06 Hewlett-Packard Development Company, L.P. Method and apparatus for optimization of the performance of an application program in a computer system while preserving the system behavior
JP3974742B2 (ja) 2000-04-14 2007-09-12 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイル装置、最適化方法および記録媒体
US6662359B1 (en) * 2000-07-20 2003-12-09 International Business Machines Corporation System and method for injecting hooks into Java classes to handle exception and finalization processing
US6886094B1 (en) * 2000-09-28 2005-04-26 International Business Machines Corporation Apparatus and method for detecting and handling exceptions
US20020083163A1 (en) * 2000-10-26 2002-06-27 Metilinx Multi-platform optimization model
JP3707727B2 (ja) 2000-10-30 2005-10-19 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムの最適化方法及びこれを用いたコンパイラ

Also Published As

Publication number Publication date
JP3790683B2 (ja) 2006-06-28
US20030018961A1 (en) 2003-01-23
US7240343B2 (en) 2007-07-03

Similar Documents

Publication Publication Date Title
JP3790683B2 (ja) コンピュータ装置、その例外処理プログラム及びコンパイル方法
US11216258B2 (en) Direct function call substitution using preprocessor
US7725883B1 (en) Program interpreter
JP4823075B2 (ja) 最適化コードの自動発生システム
JP3707727B2 (ja) プログラムの最適化方法及びこれを用いたコンパイラ
US6164841A (en) Method, apparatus, and product for dynamic software code translation system
US5901308A (en) Software mechanism for reducing exceptions generated by speculatively scheduled instructions
US8756572B2 (en) Debugger-set identifying breakpoints after coroutine yield points
US6874140B1 (en) Debug annotations
US20040230957A1 (en) Methods for comparing versions of a program
JPH09330233A (ja) 最適目的コード生成方法
US7698697B2 (en) Transforming code to expose glacial constants to a compiler
Bate et al. Low-level analysis of a portable Java byte code WCET analysis framework
Bebenita et al. Trace-based compilation in execution environments without interpreters
US7124407B1 (en) Method and apparatus for caching native code in a virtual machine interpreter
JP2000066898A (ja) コンピュ―タ命令の実行をスケジュ―ルする方法
US20100138817A1 (en) In-place function modification
US6895580B2 (en) Expression reduction during compilation through routine cloning
GB2249414A (en) Predicting the performance of a computer system
Gupta et al. Optimizing Java programs in the presence of exceptions
US8327342B2 (en) Method of reducing logging code in a computing system
Dot et al. Analysis and optimization of engines for dynamically typed languages
US6665864B1 (en) Method and apparatus for generating code for array range check and method and apparatus for versioning
US8490073B2 (en) Controlling tracing within compiled code
Goss Machine code optimization-improving executable object code

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20050906

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050913

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20051212

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: 20060322

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20060322

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20060403

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 3790683

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20090407

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20100407

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20110407

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20110407

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20120407

Year of fee payment: 6

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

S202 Request for registration of non-exclusive licence

Free format text: JAPANESE INTERMEDIATE CODE: R315201

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

Free format text: PAYMENT UNTIL: 20120407

Year of fee payment: 6

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

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

Free format text: PAYMENT UNTIL: 20120407

Year of fee payment: 6

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

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

Free format text: PAYMENT UNTIL: 20130407

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20130407

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20130407

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20130407

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20130407

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20140407

Year of fee payment: 8

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: R3D02

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term