JPH11242597A - Javaバイトコードデータのフローグラフの生成方法 - Google Patents
Javaバイトコードデータのフローグラフの生成方法Info
- Publication number
- JPH11242597A JPH11242597A JP10313910A JP31391098A JPH11242597A JP H11242597 A JPH11242597 A JP H11242597A JP 10313910 A JP10313910 A JP 10313910A JP 31391098 A JP31391098 A JP 31391098A JP H11242597 A JPH11242597 A JP H11242597A
- Authority
- JP
- Japan
- Prior art keywords
- bytecode
- blocks
- uninterrupted
- block
- bytecodes
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
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)
- Executing Machine-Instructions (AREA)
Abstract
(57)【要約】 (修正有)
【課題】ジャバ最適化器とJITコンパイラの速度と効率
を最適化するIRを形成する為ソースバイトコードからDF
Gを生成する方法を提供する。 【解決手段】バイトソースファイルからの中断されない
バイトコードブロックの前方向スキャンを中断されない
ブロック内各バイトコード開始を同定する為に実行し、
次に後方向スキャンを実行する。ブロック内各バイトコ
ードについてDFGノードを生成し、ブロック内バイトコ
ードによって使用される全ての値に対するリンクを達成
し、ファイル内の先行する又は後続するノードに対する
リンクを生成する。
を最適化するIRを形成する為ソースバイトコードからDF
Gを生成する方法を提供する。 【解決手段】バイトソースファイルからの中断されない
バイトコードブロックの前方向スキャンを中断されない
ブロック内各バイトコード開始を同定する為に実行し、
次に後方向スキャンを実行する。ブロック内各バイトコ
ードについてDFGノードを生成し、ブロック内バイトコ
ードによって使用される全ての値に対するリンクを達成
し、ファイル内の先行する又は後続するノードに対する
リンクを生成する。
Description
【0001】
【発明の属する技術分野】本発明はジャバ(Java)
クラスファイルの最適化に関する。より詳細には、本発
明はバイトコードのブロック内およびバイトコードのブ
ロック間におけるデータ値の伝搬を同定するジャバクラ
スファイル最適化器からのデータフローグラフのアスペ
クト(aspect)の生成に関する。
クラスファイルの最適化に関する。より詳細には、本発
明はバイトコードのブロック内およびバイトコードのブ
ロック間におけるデータ値の伝搬を同定するジャバクラ
スファイル最適化器からのデータフローグラフのアスペ
クト(aspect)の生成に関する。
【0002】
【従来の技術】ソフトウエア開発者およびコンピュータ
のユーザにとって知られている1つの問題は、オペレー
ションシステムのプラットフォーム間におけるソフトウ
エアの可搬性の欠如である。この問題に向けた試みは、
ワールドワイドウェブの如き膨張するネットワークにお
いてコンピュータが相互にリンクされるにしたがって安
全性を保証する手段を含む必要がある。これらの両方に
対して対応に関して、複数層の安全性保護を含むべくデ
ザインされたプラットフォームに独立なオブジェクト指
向のコンピュータ言語として、JAVAプログラム言語
がサンマイクロシステムズによって開発された。
のユーザにとって知られている1つの問題は、オペレー
ションシステムのプラットフォーム間におけるソフトウ
エアの可搬性の欠如である。この問題に向けた試みは、
ワールドワイドウェブの如き膨張するネットワークにお
いてコンピュータが相互にリンクされるにしたがって安
全性を保証する手段を含む必要がある。これらの両方に
対して対応に関して、複数層の安全性保護を含むべくデ
ザインされたプラットフォームに独立なオブジェクト指
向のコンピュータ言語として、JAVAプログラム言語
がサンマイクロシステムズによって開発された。
【0003】ジャバは、コンパイル言語と翻訳言語の両
方であることによってオペレーションシステムに対する
独立性を達成している。最初に、ジャバクラスファイル
からなるジャバソースコードがジャババイトコードと呼
ばれる汎用中間フォーマットにコンパイルされる。ジャ
ババイトコード単一バイトオプコード(opcode)
のシーケンスによって構成され、各オプコードは実行さ
れるべき特定のオペレーションを同定する。更には、オ
プコードの幾つかはパラメータを有する。オプコード番
号21 iload<varnum>は局所変数var
num内に格納された単一ワードの整数値を取り出して
スタック上にプッシュする。
方であることによってオペレーションシステムに対する
独立性を達成している。最初に、ジャバクラスファイル
からなるジャバソースコードがジャババイトコードと呼
ばれる汎用中間フォーマットにコンパイルされる。ジャ
ババイトコード単一バイトオプコード(opcode)
のシーケンスによって構成され、各オプコードは実行さ
れるべき特定のオペレーションを同定する。更には、オ
プコードの幾つかはパラメータを有する。オプコード番
号21 iload<varnum>は局所変数var
num内に格納された単一ワードの整数値を取り出して
スタック上にプッシュする。
【0004】次に、バイトコードは、ジャババーチャル
マシーン(Java Virtual Machine
JVM)によって解釈され、バイトコードが固有の
(native)マシーンコードに翻訳される。JVM
は物理的なマイクロプロセッサと多くの特徴を共有する
“仮想”のプロセッサのスタック化ベースの具体化であ
る。JVMによって実行されるバイトコードは本質的に
はマシーンインストラクションの集合であり、当業者に
よって認識されるであろうが、計算機のアッセンブリイ
言語に類似している。したがって、各ハードウエアプラ
ットフォームもしくはオペレーションシステムは、ジャ
バランタイムシステム(Java Runtime S
ystem)と呼ばれる、JVMの固有の具体化手段を
有することができ、ユニバーサルなバイトコード呼出し
を下層の固有システムにルート付けする。
マシーン(Java Virtual Machine
JVM)によって解釈され、バイトコードが固有の
(native)マシーンコードに翻訳される。JVM
は物理的なマイクロプロセッサと多くの特徴を共有する
“仮想”のプロセッサのスタック化ベースの具体化であ
る。JVMによって実行されるバイトコードは本質的に
はマシーンインストラクションの集合であり、当業者に
よって認識されるであろうが、計算機のアッセンブリイ
言語に類似している。したがって、各ハードウエアプラ
ットフォームもしくはオペレーションシステムは、ジャ
バランタイムシステム(Java Runtime S
ystem)と呼ばれる、JVMの固有の具体化手段を
有することができ、ユニバーサルなバイトコード呼出し
を下層の固有システムにルート付けする。
【0005】
【発明が解決しようとする課題】JAVAバイトコード
のインストラクションセットを開発するに当たって、設
計者は、ハードウエアの最適化にとって十分に簡単であ
ることとともに、安全性保護を与え、不適切にフォーマ
ットされたバイトコードに帰因する実行エラーやシステ
ム破壊を防ぐ検証手段が含まれているということを保証
することを要求された。ジャババイトコードは有意型
(significant type)の情報を含むの
で、検証手段は、バイトコードがインターネットや局所
のディスクから最初に取り出されたときに、広範囲型
(extensive type)のチェックを実行す
ることができる。その結果、ネイティブマシーンのイン
タープリータは、実行時に最小限の(minimal
type)チェックを実行するのみでよい。広範囲な演
算時チェックを実行することによって保護を与えるSm
all Talkの如き言語とは異なり、ジャバは演算
時チェックをより高速に実行することができる。
のインストラクションセットを開発するに当たって、設
計者は、ハードウエアの最適化にとって十分に簡単であ
ることとともに、安全性保護を与え、不適切にフォーマ
ットされたバイトコードに帰因する実行エラーやシステ
ム破壊を防ぐ検証手段が含まれているということを保証
することを要求された。ジャババイトコードは有意型
(significant type)の情報を含むの
で、検証手段は、バイトコードがインターネットや局所
のディスクから最初に取り出されたときに、広範囲型
(extensive type)のチェックを実行す
ることができる。その結果、ネイティブマシーンのイン
タープリータは、実行時に最小限の(minimal
type)チェックを実行するのみでよい。広範囲な演
算時チェックを実行することによって保護を与えるSm
all Talkの如き言語とは異なり、ジャバは演算
時チェックをより高速に実行することができる。
【0006】ジャバは検証手段によって安全性を保証
し、バイトコードによって可搬性(portabili
ty)を与えるが、ジャバプログラムはC/C++の如
き言語で書かれたネイティブにコンパイルされたプログ
ラムをその実行時に遅延させる。ユーザがウエブページ
(Web Page)上でジャバプログラムを立上げた
場合、ユーザはプログラムがダウンロードされるのを待
つのみでなく、翻訳されるまで待たなければならない。
ジャバの実行時間を改善するためには、ジャババイトコ
ードの処理に最適化を導入することができる。この最適
化は、スタンドアローン最適化器(Stand‐Alo
ne Optimizer SAO)として、或いはジ
ャストインタイム(Just−in−Time JI
T)コンパイラの一部として含む様々の態様で具体化す
ることができる。
し、バイトコードによって可搬性(portabili
ty)を与えるが、ジャバプログラムはC/C++の如
き言語で書かれたネイティブにコンパイルされたプログ
ラムをその実行時に遅延させる。ユーザがウエブページ
(Web Page)上でジャバプログラムを立上げた
場合、ユーザはプログラムがダウンロードされるのを待
つのみでなく、翻訳されるまで待たなければならない。
ジャバの実行時間を改善するためには、ジャババイトコ
ードの処理に最適化を導入することができる。この最適
化は、スタンドアローン最適化器(Stand‐Alo
ne Optimizer SAO)として、或いはジ
ャストインタイム(Just−in−Time JI
T)コンパイラの一部として含む様々の態様で具体化す
ることができる。
【0007】SAOはバイトコードを含む入力クラスフ
ァイルを、同じ演算をより効率的に実行するバイトコー
ドを含む出力クラスファイルに変換する。JITはバイ
トコードを含む入力クラスファイルを実行可能なプログ
ラムに変換する。JITの開発以前では、JVMがプロ
グラム内の全てのバイトコードインストラクションをス
テップ処理して機械的にネイティブコードコールを実行
していた。しかし、JITコンパイラを用いる場合、J
VMはまずJITに対し呼び出しをかけ、JITはイン
ストラクションをネイティブなオペレーションシステム
上で直接に実行されるネイティブコードにコンパイルす
る。JITコンパイラはネイティブにコンパイルされた
コードがより高速に実行されることを可能にし、コード
が一度だけコンパイルされればそれで済むことを可能に
する。更に、JITコンパイラは、実行可能なコードが
最適化されうるステージを提供する。
ァイルを、同じ演算をより効率的に実行するバイトコー
ドを含む出力クラスファイルに変換する。JITはバイ
トコードを含む入力クラスファイルを実行可能なプログ
ラムに変換する。JITの開発以前では、JVMがプロ
グラム内の全てのバイトコードインストラクションをス
テップ処理して機械的にネイティブコードコールを実行
していた。しかし、JITコンパイラを用いる場合、J
VMはまずJITに対し呼び出しをかけ、JITはイン
ストラクションをネイティブなオペレーションシステム
上で直接に実行されるネイティブコードにコンパイルす
る。JITコンパイラはネイティブにコンパイルされた
コードがより高速に実行されることを可能にし、コード
が一度だけコンパイルされればそれで済むことを可能に
する。更に、JITコンパイラは、実行可能なコードが
最適化されうるステージを提供する。
【0008】バイトコードの最適化、或いはコンパイル
は、当業者には中間表現(intermediate
representation IR)として知られて
いるソースバイトコードへの翻訳を必要とする。IR
は、プログラムの2つの基本要素、即ち、制御フローグ
ラフ(CFG)およびデータフローグラフ(DFG)に
関する情報を与える。次いで、IRはコンパイラに関し
てはオブジェクトコードに、最適化器の場合にはソース
コードフォーマットの改善バージョンに変換される。
は、当業者には中間表現(intermediate
representation IR)として知られて
いるソースバイトコードへの翻訳を必要とする。IR
は、プログラムの2つの基本要素、即ち、制御フローグ
ラフ(CFG)およびデータフローグラフ(DFG)に
関する情報を与える。次いで、IRはコンパイラに関し
てはオブジェクトコードに、最適化器の場合にはソース
コードフォーマットの改善バージョンに変換される。
【0009】CFGはコードを中断されることのないグ
ループとして常に実行されるバイトコードブロックに分
断し、ブロックを相互にリンクする関係を作り上げる。
DFGは、値が生成される所とそれらが使用される所の
間の関係をマップする。これはバイトコードブロック内
の関係とバイトコードブロック間の関係とを含む。ジャ
バプログラムは、暗黙の変数としてスタック位置を多用
するので、値の伝播のトラッキングは困難なプロセスで
ある。IRのためにDFGを生成するため、データフロ
ーの情報を抽出する場合、従来のアプローチは全ての可
能なフローパスを通じて、スタックと反復の両方の完全
なシミュレーションを実行することであった。
ループとして常に実行されるバイトコードブロックに分
断し、ブロックを相互にリンクする関係を作り上げる。
DFGは、値が生成される所とそれらが使用される所の
間の関係をマップする。これはバイトコードブロック内
の関係とバイトコードブロック間の関係とを含む。ジャ
バプログラムは、暗黙の変数としてスタック位置を多用
するので、値の伝播のトラッキングは困難なプロセスで
ある。IRのためにDFGを生成するため、データフロ
ーの情報を抽出する場合、従来のアプローチは全ての可
能なフローパスを通じて、スタックと反復の両方の完全
なシミュレーションを実行することであった。
【0010】エンドユーザがコンパイルされたプログラ
ムと協働するのみである伝統的なコンパイラとは対照的
に、ジャバのランタイム特性は、ジャバの最適化器とJ
ITコンパイラの速度と効率を最適化するための重要な
インセンティブを創り出す。したがって、本発明の目的
は、ジャバの最適化器とJITコンパイラの速度と効率
を最適化するIRを形成するためソースバイトコードか
らDFGを生成する方法を提供することである。本発明
のこれらおよび他の多くの目的および利点は、発明の図
面の考察および以下の記述から当業者にとって明かにな
るであろう。
ムと協働するのみである伝統的なコンパイラとは対照的
に、ジャバのランタイム特性は、ジャバの最適化器とJ
ITコンパイラの速度と効率を最適化するための重要な
インセンティブを創り出す。したがって、本発明の目的
は、ジャバの最適化器とJITコンパイラの速度と効率
を最適化するIRを形成するためソースバイトコードか
らDFGを生成する方法を提供することである。本発明
のこれらおよび他の多くの目的および利点は、発明の図
面の考察および以下の記述から当業者にとって明かにな
るであろう。
【0011】
【課題を解決するための手段】本発明は、IRのための
DFGの生成の効率を改善することによってジャバクラ
スファイルの最適化に向けられている。本発明の第1の
態様によれば、バイトソースファイルからの中断されな
いバイトコードブロックの前方向スキャンは、中断され
ないブロック内の各バイトコードの開始を同定するため
に実行される。次に、後方向スキャンが実行される。ブ
ロック内の各バイトコードについて、DFGノードが生
成され、ブロック内のバイトコードによって使用される
全ての値に対するリンクが達成され、ファイル内の先行
する或いは後続するノードに対するリンクが生成され
る。
DFGの生成の効率を改善することによってジャバクラ
スファイルの最適化に向けられている。本発明の第1の
態様によれば、バイトソースファイルからの中断されな
いバイトコードブロックの前方向スキャンは、中断され
ないブロック内の各バイトコードの開始を同定するため
に実行される。次に、後方向スキャンが実行される。ブ
ロック内の各バイトコードについて、DFGノードが生
成され、ブロック内のバイトコードによって使用される
全ての値に対するリンクが達成され、ファイル内の先行
する或いは後続するノードに対するリンクが生成され
る。
【0012】本発明の第2の態様によれば、バイトコー
ドブロックはファイルの実行順にリンクされるととも
に、スタック状態が各コードブロックについて生成され
る。CFGによって生成される各加入ステートメントに
ついて、CFGの1つのパスが歩進される。次に、DF
G内において、値が使用される個所と値が生成される個
所との間にリンクが達成される。最後に、値を生成する
ブロックに平行な全てのブロックについて、同じスタッ
ク状態個所を専有するバイトコードのためのリンクが複
写される。
ドブロックはファイルの実行順にリンクされるととも
に、スタック状態が各コードブロックについて生成され
る。CFGによって生成される各加入ステートメントに
ついて、CFGの1つのパスが歩進される。次に、DF
G内において、値が使用される個所と値が生成される個
所との間にリンクが達成される。最後に、値を生成する
ブロックに平行な全てのブロックについて、同じスタッ
ク状態個所を専有するバイトコードのためのリンクが複
写される。
【0013】
【発明の実施の形態】当業者であれば、本発明の以下の
記述は図示のためだけであり、いかなる意味においても
制限的なものでないことを認識するであろう。本発明の
他の実施例は、開示の範囲内における考察から当業者に
とって容易に示唆されるであろう。
記述は図示のためだけであり、いかなる意味においても
制限的なものでないことを認識するであろう。本発明の
他の実施例は、開示の範囲内における考察から当業者に
とって容易に示唆されるであろう。
【0014】まず、図1の(A)及び(B)を参照する
と、ジャババイトコードソースファイルの最適化の簡略
化フローダイアグラム10および20が図示されてい
る。両方のフローダイアグラム10と20においても、
ジャバソースコードファイル12はジャバコンパイラ1
4によってジャババイトコードクラスファイル16にコ
ンパイルされる。フローダイアグラム10では、クラス
ファイルはSAO18において演算され、フローダイア
グラム20では、クラスファイルはジャバランタイムシ
ステム22を通してJITコンパイラ24に渡される。
ジャバSAO18は、入力クラスファイルと同じ演算を
実行するバイトコードを含むジャバクラスファイル26
を最適化された方法においてのみ出力する。JIT24
はネイティブのオペレーションシステム30上で直接に
実行される実行可能なコード28を出力する。当業者な
らば、図1に記述された手順は単に例示的であり、クラ
スファイルが最適化されうる他の構造が存在することを
認識できるであろう。
と、ジャババイトコードソースファイルの最適化の簡略
化フローダイアグラム10および20が図示されてい
る。両方のフローダイアグラム10と20においても、
ジャバソースコードファイル12はジャバコンパイラ1
4によってジャババイトコードクラスファイル16にコ
ンパイルされる。フローダイアグラム10では、クラス
ファイルはSAO18において演算され、フローダイア
グラム20では、クラスファイルはジャバランタイムシ
ステム22を通してJITコンパイラ24に渡される。
ジャバSAO18は、入力クラスファイルと同じ演算を
実行するバイトコードを含むジャバクラスファイル26
を最適化された方法においてのみ出力する。JIT24
はネイティブのオペレーションシステム30上で直接に
実行される実行可能なコード28を出力する。当業者な
らば、図1に記述された手順は単に例示的であり、クラ
スファイルが最適化されうる他の構造が存在することを
認識できるであろう。
【0015】入力バイトコードソースクラスファイルの
処理において、SAOとJITの両方がIRを形成す
る。上記した如く、IRはCFGとDFGへのプログラ
ムの制御およびデータフロー情報の簡単で直接的な構造
化である。CFGはプログラムの実行のためにリンクさ
れたコードブロックとしてバイトコードインストラクシ
ョンの実行のシーケンスと順序に関する情報を表す。コ
ードブロックは、中断されないグループとして常に実行
されるバイトコードの区切りであり、コードブロック間
のリンクはバイトコードブランチ、条件又はジャンプイ
ンストラクションである。
処理において、SAOとJITの両方がIRを形成す
る。上記した如く、IRはCFGとDFGへのプログラ
ムの制御およびデータフロー情報の簡単で直接的な構造
化である。CFGはプログラムの実行のためにリンクさ
れたコードブロックとしてバイトコードインストラクシ
ョンの実行のシーケンスと順序に関する情報を表す。コ
ードブロックは、中断されないグループとして常に実行
されるバイトコードの区切りであり、コードブロック間
のリンクはバイトコードブランチ、条件又はジャンプイ
ンストラクションである。
【0016】図2はバイトコードのクラスファイル40
からのCFGの生成を示すフローダイアグラムである。
CFGの生成方法は複数知られていることが認識される
べきである。開示の重複的な複雑化およびそれにより本
発明の不明確化を避けるため、これら方法のいずれかの
詳細を開示することはしない。プロシージャは1からN
まで順番が付けられた順序付けバイトコードインストラ
クションシーケンスを含むクラスファイル40を用いて
開始される。1からNの順番は、当業界において知られ
ているように、コンピュータプログラムの行の番号付け
との類推である。次に、最適化器42はバイトコードか
ら制御フロー情報を抽出するためバイトコードクラスフ
ァイル40を処理する。
からのCFGの生成を示すフローダイアグラムである。
CFGの生成方法は複数知られていることが認識される
べきである。開示の重複的な複雑化およびそれにより本
発明の不明確化を避けるため、これら方法のいずれかの
詳細を開示することはしない。プロシージャは1からN
まで順番が付けられた順序付けバイトコードインストラ
クションシーケンスを含むクラスファイル40を用いて
開始される。1からNの順番は、当業界において知られ
ているように、コンピュータプログラムの行の番号付け
との類推である。次に、最適化器42はバイトコードか
ら制御フロー情報を抽出するためバイトコードクラスフ
ァイル40を処理する。
【0017】制御フロー情報は、CFG44によって図
示されている。例えば、CFG44は、クラスファイル
40について、バイトコードインストラクション1から
3を最初に実行し、インストラクション100から10
3を次に実行し、インストラクション10から14又は
15から19のいずれかを実行し、最後にインストラク
ション4から8が残りのバイトコードインストラクショ
ンの実行の前に実行されるべきことを指示する。CFG
44は単なる例であり、最適化器42によってクラスフ
ァイル40からいかなる数のCFGを作ってもよいこと
が理解されるであろう。
示されている。例えば、CFG44は、クラスファイル
40について、バイトコードインストラクション1から
3を最初に実行し、インストラクション100から10
3を次に実行し、インストラクション10から14又は
15から19のいずれかを実行し、最後にインストラク
ション4から8が残りのバイトコードインストラクショ
ンの実行の前に実行されるべきことを指示する。CFG
44は単なる例であり、最適化器42によってクラスフ
ァイル40からいかなる数のCFGを作ってもよいこと
が理解されるであろう。
【0018】上記の如く、CFGが一旦生成されると、
DFGが生成される。本発明によれば、DFGの2つの
態様がCFGから生成される。1つの態様ではなく、バ
イトコードのブロック内における値の伝播が決定され
る。典型的なJAVAプログラムにおいて知られている
ように、データ値は1個所において生成され、他の個所
で使用される。本発明の第1の態様は、中断されること
のないコードブロック内において発生する生成点と消費
点の間の関係を樹立することに関係する。本発明は暗黙
の変数が容易に認識され、それらの値がDFG内におい
てそれらを用いるバイトコードに直ちにリンクされるこ
とを可能にする。
DFGが生成される。本発明によれば、DFGの2つの
態様がCFGから生成される。1つの態様ではなく、バ
イトコードのブロック内における値の伝播が決定され
る。典型的なJAVAプログラムにおいて知られている
ように、データ値は1個所において生成され、他の個所
で使用される。本発明の第1の態様は、中断されること
のないコードブロック内において発生する生成点と消費
点の間の関係を樹立することに関係する。本発明は暗黙
の変数が容易に認識され、それらの値がDFG内におい
てそれらを用いるバイトコードに直ちにリンクされるこ
とを可能にする。
【0019】先行技術とは異なり、本発明はバイトコー
ドによって使用される値を決定するためスタックを構成
する先行技術において採用されたアプローチを避ける。
例えば、図3にはCFGのコードブロック内においてリ
ンクを生成するための公知の方法のブロックダイアグラ
ムが示されている。このダイアグラムはDFGを生成す
るに際して、暗黙のスタック位置変数の値を決定するた
め採用された主要なステージを例示している。ステージ
60の間、バイトコード62の入力シーケンスの演算が
シーケンスが表すスタック64のあるバージョンを生成
するためにシミュレートされる。64で示されるスタッ
クはバイトコード62の入力シーケンスの一部分66の
みを示す。ステージ68の間、スタック64が実行さ
れ、POPインストラクション70が先行するBIPU
SH“2”インストラクション72によって値“2”と
関係付けられることが決定される。この情報は参照番号
74と76によって表されるDFGノード内に格納され
る。
ドによって使用される値を決定するためスタックを構成
する先行技術において採用されたアプローチを避ける。
例えば、図3にはCFGのコードブロック内においてリ
ンクを生成するための公知の方法のブロックダイアグラ
ムが示されている。このダイアグラムはDFGを生成す
るに際して、暗黙のスタック位置変数の値を決定するた
め採用された主要なステージを例示している。ステージ
60の間、バイトコード62の入力シーケンスの演算が
シーケンスが表すスタック64のあるバージョンを生成
するためにシミュレートされる。64で示されるスタッ
クはバイトコード62の入力シーケンスの一部分66の
みを示す。ステージ68の間、スタック64が実行さ
れ、POPインストラクション70が先行するBIPU
SH“2”インストラクション72によって値“2”と
関係付けられることが決定される。この情報は参照番号
74と76によって表されるDFGノード内に格納され
る。
【0020】本発明の好ましい実施例によれば、ノード
ツリーが採用される。バイトコードクラスファイルによ
って値が生成されると、新しいノードがツリー内に生成
される。このノードは公知になるように、これを値の生
成および消費点にリンクさせることによってツリーの他
の部分に関係付けられる。この方式において、プログラ
ムを通してのデータ値の伝播は容易に追跡することがで
きる。当業者ならば、種々のデータ構造を使用しうるこ
とを認識するであろう。
ツリーが採用される。バイトコードクラスファイルによ
って値が生成されると、新しいノードがツリー内に生成
される。このノードは公知になるように、これを値の生
成および消費点にリンクさせることによってツリーの他
の部分に関係付けられる。この方式において、プログラ
ムを通してのデータ値の伝播は容易に追跡することがで
きる。当業者ならば、種々のデータ構造を使用しうるこ
とを認識するであろう。
【0021】図4に戻って、本発明による、バイトコー
ドブロック内におけるリンクの生成方法のフローダイア
グラムが図示されている。第1ステップ100では、バ
イトコードソースファイル102の前進方向スキャン
は、公知の如くバイトコードは異なる長さでありうるの
で、バイトコード112、114および116の開始
(スタート)106,108および110を夫々決定す
るために実行される。
ドブロック内におけるリンクの生成方法のフローダイア
グラムが図示されている。第1ステップ100では、バ
イトコードソースファイル102の前進方向スキャン
は、公知の如くバイトコードは異なる長さでありうるの
で、バイトコード112、114および116の開始
(スタート)106,108および110を夫々決定す
るために実行される。
【0022】次に、ステップ118において、バイトコ
ードソースファイル102の後進方向スキャンが実行さ
れる。後方向スキャンステップ118では、DFGのノ
ードがそれらが発生するにしたがって生成される。例え
ば、バイトコード116がインストラクションPOPで
あれば、POPが読取られるとノード120がPOPイ
ンストラクション122を含むDFG内に生成される。
次に、インストラクションBIPUSH“2”がバイト
コード108で読取られると、124において、値
“2”がそれを使用するPOPインストラクション12
2にリンクされる。
ードソースファイル102の後進方向スキャンが実行さ
れる。後方向スキャンステップ118では、DFGのノ
ードがそれらが発生するにしたがって生成される。例え
ば、バイトコード116がインストラクションPOPで
あれば、POPが読取られるとノード120がPOPイ
ンストラクション122を含むDFG内に生成される。
次に、インストラクションBIPUSH“2”がバイト
コード108で読取られると、124において、値
“2”がそれを使用するPOPインストラクション12
2にリンクされる。
【0023】本発明は、スタックのコピーの構築全体の
プロセスがなくなるので、DFGの生成における効率の
大幅な増加を与える。本発明は、バイトコードのストリ
ームはスタックマシーンに対するインストラクションで
あるので、バイトコードインストラクションによって消
費されるオペランドあるいは値がインストラクションに
先行することを認識している。バイトコードファイルが
逆順に読まれるときに、DFG内のノードを生成するス
テップはバイトコードが読まれた後、直ちに実行され
る。
プロセスがなくなるので、DFGの生成における効率の
大幅な増加を与える。本発明は、バイトコードのストリ
ームはスタックマシーンに対するインストラクションで
あるので、バイトコードインストラクションによって消
費されるオペランドあるいは値がインストラクションに
先行することを認識している。バイトコードファイルが
逆順に読まれるときに、DFG内のノードを生成するス
テップはバイトコードが読まれた後、直ちに実行され
る。
【0024】全体をカバーする意図ではないが、更なる
例が本発明によるバイトコードインストラクションから
生成されるDFG内のノードについて、図5(A)と
(B)に図示されている。図5(A)と(B)は、夫々
2つのリンクを持った単一インストラクションおよび多
数のリンクを持ったインストラクションのシリーズの例
である。
例が本発明によるバイトコードインストラクションから
生成されるDFG内のノードについて、図5(A)と
(B)に図示されている。図5(A)と(B)は、夫々
2つのリンクを持った単一インストラクションおよび多
数のリンクを持ったインストラクションのシリーズの例
である。
【0025】図5(A)において、バイトコードソース
ブロック150は、まず、前進方向スキャンによってバ
イトコード152、154および158に分けられる。
後進方向のスキャンステップが実行される時に、整数加
算(IADD)インストラクションがバイトコード15
8から読取られるとともに、ノード160がDFG内に
生成される。インストラクションIADDの定義からノ
ード160は2つの値を消費することが知られている。
後進方向スキャンが継続すると、これら2つの値がバイ
トコード154と152から読取られ、DFGのノード
ツリー内のノード162と164として生成され、ノー
ド160にリンクされる。
ブロック150は、まず、前進方向スキャンによってバ
イトコード152、154および158に分けられる。
後進方向のスキャンステップが実行される時に、整数加
算(IADD)インストラクションがバイトコード15
8から読取られるとともに、ノード160がDFG内に
生成される。インストラクションIADDの定義からノ
ード160は2つの値を消費することが知られている。
後進方向スキャンが継続すると、これら2つの値がバイ
トコード154と152から読取られ、DFGのノード
ツリー内のノード162と164として生成され、ノー
ド160にリンクされる。
【0026】図5(B)において、バイトコードソース
ブロック166は前進方向スキャンによってバイトコー
ド168、170および172にまず区分される。バイ
トコード166のシーケンスはステートメント(X+
X)を実施する。後進方向スキャンステップでは、最初
に出会ったバイトコード172はIADDインストラク
ションである。図5(A)の例に関して説明したよう
に、IADDインストラクションはDFG内において2
つの値とのリンクを持ったノード174を生成する。次
のバイトコード170は複写(DUP)インストラクシ
ョンであるので、ノード174からの両方のリンクはD
UPインストラクションのためノード176に対して作
られる。次に、整数ロードX(ILOADX)インスト
ラクションを有するバイトコード168が読まれ、ノー
ド176に対するリンクを持ったノード178が生成さ
れる。ノードツリーにおけるこのシーケンスにおいて、
ノード178の値はノード176に複写され、両方の値
はノード174において消費される。上に掲げた例から
当業者には明かなように、後進方向スキャンステップを
実行する際、生成された特定のDFGはCFGによって
生成されたブロック内のバイトコードのシーケンスに依
存する。
ブロック166は前進方向スキャンによってバイトコー
ド168、170および172にまず区分される。バイ
トコード166のシーケンスはステートメント(X+
X)を実施する。後進方向スキャンステップでは、最初
に出会ったバイトコード172はIADDインストラク
ションである。図5(A)の例に関して説明したよう
に、IADDインストラクションはDFG内において2
つの値とのリンクを持ったノード174を生成する。次
のバイトコード170は複写(DUP)インストラクシ
ョンであるので、ノード174からの両方のリンクはD
UPインストラクションのためノード176に対して作
られる。次に、整数ロードX(ILOADX)インスト
ラクションを有するバイトコード168が読まれ、ノー
ド176に対するリンクを持ったノード178が生成さ
れる。ノードツリーにおけるこのシーケンスにおいて、
ノード178の値はノード176に複写され、両方の値
はノード174において消費される。上に掲げた例から
当業者には明かなように、後進方向スキャンステップを
実行する際、生成された特定のDFGはCFGによって
生成されたブロック内のバイトコードのシーケンスに依
存する。
【0027】本発明の第2の態様によれば、CFG内の
バイトコードブロック間の値の伝播が決定される。図6
はリンクされたコード200、202、204および2
06の複数のブロックを持ったCFG180を示してい
る。CFG180ではジョイン(join)208に先
行するブロック202と206は平行であると考えられ
る。ジョインは複数の平行なブロックを接続することで
あると考えられるべきである。CFGが生成されると、
スタック状態210、212、214および216がバ
イトコード200、202、204および206の各ブ
ロックについて夫々生成される。スタック状態は当該ス
タックに関係するブロック内のバイトコードが実行され
た後に、スタック上に依然存在する全ての値を含む。ス
タック上の値はバイトコードブロック内のインストラク
ションによって生成されるということを認識すべきであ
る。このことは、インストラクション218と220の
スタック状態222と224への夫々のマッピングによ
って図示されている。以下の記述の図示の目的で、イン
ストラクション218はPUSH“1”であり、インス
トラクション220はPUSH“0”であり、インスト
ラクション226はPOPである。
バイトコードブロック間の値の伝播が決定される。図6
はリンクされたコード200、202、204および2
06の複数のブロックを持ったCFG180を示してい
る。CFG180ではジョイン(join)208に先
行するブロック202と206は平行であると考えられ
る。ジョインは複数の平行なブロックを接続することで
あると考えられるべきである。CFGが生成されると、
スタック状態210、212、214および216がバ
イトコード200、202、204および206の各ブ
ロックについて夫々生成される。スタック状態は当該ス
タックに関係するブロック内のバイトコードが実行され
た後に、スタック上に依然存在する全ての値を含む。ス
タック上の値はバイトコードブロック内のインストラク
ションによって生成されるということを認識すべきであ
る。このことは、インストラクション218と220の
スタック状態222と224への夫々のマッピングによ
って図示されている。以下の記述の図示の目的で、イン
ストラクション218はPUSH“1”であり、インス
トラクション220はPUSH“0”であり、インスト
ラクション226はPOPである。
【0028】バイトコードの始めのブロック内に生成さ
れた値がバイトコードのブロック間においてDFG内の
リンクを生成するためにバイトコードの相続くブロック
によって使用される又は消費される時点を決定するた
め、先のスタック状態値の消費を注目するとともに、そ
のソースを同定しながら、ブロックの実行がなされる。
この情報はバイトコードの消費と生成のノード間のリン
クとしてDFG内に表示される。全ての平行なブロック
のためのリンクを樹立するため、従来の方法はCFG内
における全ての可能な制御フロー経路を通しての繰返し
(iterating)に依存していた。例えば、CF
G180内のブロック間のリンクについてDFGを生成
するため、第1経路はブロック200、202および2
04を含む経路を通して作られ、次いで、第2経路がブ
ロック200、206および204を含む経路を通して
作られる。
れた値がバイトコードのブロック間においてDFG内の
リンクを生成するためにバイトコードの相続くブロック
によって使用される又は消費される時点を決定するた
め、先のスタック状態値の消費を注目するとともに、そ
のソースを同定しながら、ブロックの実行がなされる。
この情報はバイトコードの消費と生成のノード間のリン
クとしてDFG内に表示される。全ての平行なブロック
のためのリンクを樹立するため、従来の方法はCFG内
における全ての可能な制御フロー経路を通しての繰返し
(iterating)に依存していた。例えば、CF
G180内のブロック間のリンクについてDFGを生成
するため、第1経路はブロック200、202および2
04を含む経路を通して作られ、次いで、第2経路がブ
ロック200、206および204を含む経路を通して
作られる。
【0029】本発明によれば、バイトコードの平行ブロ
ック間のリンクについてDFGを形成するために全ての
制御フロー経路を検証する必要はない。ブロック20
0、202、204および206間のDFG内のリンク
は、ブロック200、202、204を通して歩進し、
その後、ブロック206に対するリンクを樹立するため
に、ブロック200,202、204を通した経路から
の情報を適用することによって生成される。本発明は、
ジャバの標準要求および上記した検証は適切にフォーマ
ットされたコードではジョインに先行するブロックのい
ずれのスタック状態も同一であることを保障するという
事実を活用している。
ック間のリンクについてDFGを形成するために全ての
制御フロー経路を検証する必要はない。ブロック20
0、202、204および206間のDFG内のリンク
は、ブロック200、202、204を通して歩進し、
その後、ブロック206に対するリンクを樹立するため
に、ブロック200,202、204を通した経路から
の情報を適用することによって生成される。本発明は、
ジャバの標準要求および上記した検証は適切にフォーマ
ットされたコードではジョインに先行するブロックのい
ずれのスタック状態も同一であることを保障するという
事実を活用している。
【0030】例えば、CFG180において、ジョイン
208に先行するスタック状態212と216の両方は
サイズおよび相対形式の両方において同一でなければな
らない。実行時、ブロック202内のある値の消費はブ
ロック206内のある値の消費と平行に行なわれる。そ
の結果、例えば、スタック状態位置222に対応する値
がコードブロック204の226におけるバイトコード
インストラクションによって使用されるならば、バイト
コードインストラクション226はスタック状態位置2
24に対応する値をも使用する。
208に先行するスタック状態212と216の両方は
サイズおよび相対形式の両方において同一でなければな
らない。実行時、ブロック202内のある値の消費はブ
ロック206内のある値の消費と平行に行なわれる。そ
の結果、例えば、スタック状態位置222に対応する値
がコードブロック204の226におけるバイトコード
インストラクションによって使用されるならば、バイト
コードインストラクション226はスタック状態位置2
24に対応する値をも使用する。
【0031】シュードコード(pseudocode)
の以下の行は点を示している。もし(IF)(何らかの
条件が発生したら) X=1; その他(ELSE) X=0; : : A=X+2
の以下の行は点を示している。もし(IF)(何らかの
条件が発生したら) X=1; その他(ELSE) X=0; : : A=X+2
【0032】式“A=X+2”における“A”に対する
値の付与には、“IF(何らかの条件が発生すれば)”
ステートメントによって決められるような暗黙のスタッ
ク変数“X”として割当てられた値を“X=1”又は
“X=0”のいずれかによって用いる。
値の付与には、“IF(何らかの条件が発生すれば)”
ステートメントによって決められるような暗黙のスタッ
ク変数“X”として割当てられた値を“X=1”又は
“X=0”のいずれかによって用いる。
【0033】図7(A)において、本発明の第2の態様
にしたがってDFGを生成するために採用されたステッ
プを概観するブロックダイアグラムが図示されている。
ステップ250において、CFGグラフの第1のブラン
チがスキャンされる。図6のCFG180に適用する
と、ブロック200、202および204を通る第1経
路が実行される。
にしたがってDFGを生成するために採用されたステッ
プを概観するブロックダイアグラムが図示されている。
ステップ250において、CFGグラフの第1のブラン
チがスキャンされる。図6のCFG180に適用する
と、ブロック200、202および204を通る第1経
路が実行される。
【0034】次に、ステップ252において、値が生成
される個所と値が消費される個所との間のリンクが形成
される。図7(B)に図示されているように、リンク2
54がCFG180内の位置218におけるPUSH
“1”インストラクションとCFG180内の位置22
6においてこれを消費するPOPインストラクションと
の間に形成される。
される個所と値が消費される個所との間のリンクが形成
される。図7(B)に図示されているように、リンク2
54がCFG180内の位置218におけるPUSH
“1”インストラクションとCFG180内の位置22
6においてこれを消費するPOPインストラクションと
の間に形成される。
【0035】次に、ステップ256において、PUSH
0インストラクションのためのデータはCFG180内
の位置218のPUSH1インストラクションと同じス
タック状態位置を占有することが知られているので、リ
ンク258が位置220におけるPUSH0インストラ
クションとこれを消費する位置226におけるPOPイ
ンストラクションとの間に形成される。このようにし
て、本発明の第2の態様によれば、従来では行なわれて
いたCFG内の全ての経路を検証することを要すること
なく、バイトコードブロック間のDFGにおけるリンク
はより効率的に形成される。ジョインはバイトコードソ
ースコード全体を通じて極めて共通であるので、本発明
は効率における大幅な増加を実現する。多重ジョインが
存在する場合には、効率の増加はより大きい。
0インストラクションのためのデータはCFG180内
の位置218のPUSH1インストラクションと同じス
タック状態位置を占有することが知られているので、リ
ンク258が位置220におけるPUSH0インストラ
クションとこれを消費する位置226におけるPOPイ
ンストラクションとの間に形成される。このようにし
て、本発明の第2の態様によれば、従来では行なわれて
いたCFG内の全ての経路を検証することを要すること
なく、バイトコードブロック間のDFGにおけるリンク
はより効率的に形成される。ジョインはバイトコードソ
ースコード全体を通じて極めて共通であるので、本発明
は効率における大幅な増加を実現する。多重ジョインが
存在する場合には、効率の増加はより大きい。
【0036】この発明の例示的な実施例と応用が図示さ
れ、記述されたが、上に述べたものよりもより多くの修
正がここに設定した発明思想から逸脱することなしに可
能であることが当業者にとって明らかであろう。本発明
は、それ故、添付の特許請求の範囲の技術的思想の範囲
内における外、制限されるべきではない。
れ、記述されたが、上に述べたものよりもより多くの修
正がここに設定した発明思想から逸脱することなしに可
能であることが当業者にとって明らかであろう。本発明
は、それ故、添付の特許請求の範囲の技術的思想の範囲
内における外、制限されるべきではない。
【図1】 (A)は、本発明によるスタンドアローン最
適化器を用いたJAVAバイトコードソースファイルの
最適化のフローダイアグラムであり、(B)は本発明に
よるジャストインコンパイラを用いたJAVAバイトコ
ードソースファイルの最適化のフローダイアグラムであ
る。
適化器を用いたJAVAバイトコードソースファイルの
最適化のフローダイアグラムであり、(B)は本発明に
よるジャストインコンパイラを用いたJAVAバイトコ
ードソースファイルの最適化のフローダイアグラムであ
る。
【図2】 本発明において使用するのに好適なバイトコ
ードソースファイルからの制御フローグラフの生成を図
示するフローダイアグラムである。
ードソースファイルからの制御フローグラフの生成を図
示するフローダイアグラムである。
【図3】 先行技術によるデータフローグラフの生成の
フローダイアグラムである。
フローダイアグラムである。
【図4】 本発明によるバイトコードブロック内のリン
クのためのデータフローグラフの生成の第1の態様のフ
ローダイアグラムである。
クのためのデータフローグラフの生成の第1の態様のフ
ローダイアグラムである。
【図5】 (A)は本発明の第1の態様によるインスト
ラクションIADDのためのデータフローグラフ内のノ
ードの生成についてのブロックダイアグラムであり、
(B)は本発明の第1の態様による複数のインストラク
ションについてデータフローグラフ内の複数のノードの
生成についてのブロックダイアグラムである。
ラクションIADDのためのデータフローグラフ内のノ
ードの生成についてのブロックダイアグラムであり、
(B)は本発明の第1の態様による複数のインストラク
ションについてデータフローグラフ内の複数のノードの
生成についてのブロックダイアグラムである。
【図6】 本発明によるバイトコードブロック間のリン
クのためのデータフローグラフの生成の第2の態様を図
示するのに好適な制御フローグラフのフローダイアグラ
ムである。
クのためのデータフローグラフの生成の第2の態様を図
示するのに好適な制御フローグラフのフローダイアグラ
ムである。
【図7】 (A)は本発明の第2の態様にしたがった方
法におけるステップのブロックダイアグラムであり、
(B)は本発明の第2の態様によるデータフローグラフ
におけるノードの生成のためのブロックダイアグラムで
ある。
法におけるステップのブロックダイアグラムであり、
(B)は本発明の第2の態様によるデータフローグラフ
におけるノードの生成のためのブロックダイアグラムで
ある。
Claims (2)
- 【請求項1】 データフローグラフの形成において、中
断されることのないバイトコードブロックのバイトコー
ドをリンクさせる方法は以下のステップからなる:上記
バイトコードの各々の開始を同定するため、中断される
ことのないバイトコードブロックを前進方向にスキャン
する;上記中断されることのないバイトコードブロック
内において、上記バイトコードの各々をバイトコード単
位で後進方向にスキャンする;および上記バイトコード
の各々によって使用される上記バイトコードの他の全て
に対して、上記バイトコードの各々をリンクさせる、上
記データフローグラフ内のリンクを生成する。 - 【請求項2】 データフローグラフの形成において、中
断されることのないバイトコードブロック間でバイトコ
ードをリンクさせる方法であって、上記中断されること
のないバイトコードブロックは、上記中断されることの
ないブロックの実行順にしたがったリンクを有し、スタ
ック状態は上記中断されることのないバイトコードブロ
ックの各々について生成される方法は、以下のステップ
からなる:上記中断されることのないブロックの一つに
おいて、ある値を生成する各バイトコードと上記中断さ
れることのないブロックの第1経路上のいま一つにおい
て上記値を消費する各バイトコード間に上記データフロ
ーグラフにおけるリンクを生成するため、上記実行順の
複数の経路のうち、ジョインで終端する第1の経路を通
して歩進する;およびある値を生成する各バイトコード
のための上記第1の経路以外の他の全ての経路におい
て、上記第1の経路内における上記中断されることのな
いブロックの1つにある値を生成する各バイトコードと
同様のスタック位置を有する各バイトコードのためのリ
ンクを用いて、上記第1の経路内の各リンクを複写す
る。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US08/940212 | 1997-09-30 | ||
| US08/940,212 US6233733B1 (en) | 1997-09-30 | 1997-09-30 | Method for generating a Java bytecode data flow graph |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH11242597A true JPH11242597A (ja) | 1999-09-07 |
Family
ID=25474426
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP10313910A Pending JPH11242597A (ja) | 1997-09-30 | 1998-09-29 | Javaバイトコードデータのフローグラフの生成方法 |
Country Status (5)
| Country | Link |
|---|---|
| US (1) | US6233733B1 (ja) |
| EP (1) | EP0905617B1 (ja) |
| JP (1) | JPH11242597A (ja) |
| CA (1) | CA2249042A1 (ja) |
| DE (1) | DE69833617D1 (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US9250880B2 (en) | 2013-11-25 | 2016-02-02 | International Business Machines Corporation | Method for obtaining execution frequency information on execution paths in control flow graph, and computer and computer program for obtaining the information |
Families Citing this family (32)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| BR9713267A (pt) | 1996-10-25 | 2004-06-15 | Schlumberger Systems & Service | Cartão de circuito integrado para uso com um terminal, processo para uso com o mesmo, microcontrolador e processo para sua programação |
| US6792600B1 (en) * | 1998-05-14 | 2004-09-14 | International Business Machines Corporation | Method and apparatus for just in time compilation of instructions |
| US6324688B1 (en) * | 1998-07-30 | 2001-11-27 | International Business Machines Corporation | Method and apparatus for optimizing execution of Java programs |
| US6412109B1 (en) * | 1999-01-29 | 2002-06-25 | Sun Microsystems, Inc. | Method for optimizing java bytecodes in the presence of try-catch blocks |
| US6421821B1 (en) * | 1999-03-10 | 2002-07-16 | Ronald J. Lavallee | Flow chart-based programming method and system for object-oriented languages |
| US6412108B1 (en) * | 1999-05-06 | 2002-06-25 | International Business Machines Corporation | Method and apparatus for speeding up java methods prior to a first execution |
| US6560774B1 (en) * | 1999-09-01 | 2003-05-06 | Microsoft Corporation | Verifier to check intermediate language |
| GB9920676D0 (en) * | 1999-09-01 | 1999-11-03 | Tao Group Ltd | Translating and executing object-oriented computer programs |
| US8121955B2 (en) * | 2003-01-16 | 2012-02-21 | Oracle America, Inc. | Signing program data payload sequence in program loading |
| US20040143739A1 (en) * | 2003-01-16 | 2004-07-22 | Sun Mircosystems, Inc., A Delaware Corporation | Run time code integrity checks |
| US7222331B2 (en) * | 2003-01-16 | 2007-05-22 | Sun Microsystems, Inc. | Linking of virtual methods |
| US7484095B2 (en) * | 2003-01-16 | 2009-01-27 | Sun Microsystems, Inc. | System for communicating program data between a first device and a second device |
| US7165246B2 (en) * | 2003-01-16 | 2007-01-16 | Sun Microsystems, Inc. | Optimized representation of data type information in program verification |
| US7272830B2 (en) * | 2003-01-16 | 2007-09-18 | Sun Microsystems, Inc. | Ordering program data for loading on a device |
| US7281244B2 (en) * | 2003-01-16 | 2007-10-09 | Sun Microsystems, Inc. | Using a digital fingerprint to commit loaded data in a device |
| KR100643268B1 (ko) * | 2004-01-17 | 2006-11-10 | 삼성전자주식회사 | 자바 가상 머신의 성능을 향상시키는 방법 및 상기 방법에의해 동작되는 시스템 |
| US7721275B2 (en) * | 2004-05-14 | 2010-05-18 | Sap Ag | Data-flow based post pass optimization in dynamic compilers |
| US20050272001A1 (en) * | 2004-06-03 | 2005-12-08 | Blain Christopher C | Oral care device |
| EP1622009A1 (en) * | 2004-07-27 | 2006-02-01 | Texas Instruments Incorporated | JSM architecture and systems |
| US7788655B2 (en) * | 2004-08-30 | 2010-08-31 | Oracle America, Inc. | Mechanism for ordering lists of local variables associated with a plurality of code blocks |
| US8108826B2 (en) * | 2004-09-29 | 2012-01-31 | Avaya Inc. | Code-coverage guided prioritized test generation |
| MY135555A (en) * | 2004-12-14 | 2008-05-30 | Axiomatic Solutions Sdn Bhd | Compile time linking via hashing technique |
| KR100763177B1 (ko) * | 2005-04-21 | 2007-10-04 | 삼성전자주식회사 | 자바 가상 머신의 명령어 수행 방법 및 그 장치 |
| US8444416B2 (en) * | 2005-04-26 | 2013-05-21 | Braun Gmbh | Valves for personal care devices |
| US20070017582A1 (en) * | 2005-07-20 | 2007-01-25 | Chenvainu Alexander T | Fluid couplings |
| US8046202B1 (en) * | 2006-07-17 | 2011-10-25 | The Mathworks, Inc. | Generation of intermediate representations based on user specified elements in a graphical model that enable simulation, propagation and code generation |
| US8191052B2 (en) * | 2006-12-01 | 2012-05-29 | Murex S.A.S. | Producer graph oriented programming and execution |
| US8307337B2 (en) | 2006-12-01 | 2012-11-06 | Murex S.A.S. | Parallelization and instrumentation in a producer graph oriented programming framework |
| US8332827B2 (en) | 2006-12-01 | 2012-12-11 | Murex S.A.S. | Produce graph oriented programming framework with scenario support |
| DE102007028184A1 (de) | 2007-06-20 | 2008-12-24 | Braun Gmbh | Bürstenkopf für eine Zahnbürste |
| US9152437B2 (en) * | 2010-10-28 | 2015-10-06 | Hewlett-Packard Development Company, L.P. | Dynamically installing image processing |
| US11321218B1 (en) * | 2021-03-08 | 2022-05-03 | Correct Computation, Inc. | Automated generation of source code models from machine code for code analysis |
Family Cites Families (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO1990001738A1 (en) * | 1988-07-29 | 1990-02-22 | Hunter Systems Software, Inc. | Machine process for translating programs in binary machine language into another binary machine language |
| US5428786A (en) * | 1991-03-07 | 1995-06-27 | Digital Equipment Corporation | Branch resolution via backward symbolic execution |
| US5666296A (en) * | 1991-12-31 | 1997-09-09 | Texas Instruments Incorporated | Method and means for translating a data-dependent program to a data flow graph with conditional expression |
-
1997
- 1997-09-30 US US08/940,212 patent/US6233733B1/en not_active Expired - Lifetime
-
1998
- 1998-09-29 CA CA002249042A patent/CA2249042A1/en not_active Abandoned
- 1998-09-29 DE DE69833617T patent/DE69833617D1/de not_active Expired - Lifetime
- 1998-09-29 JP JP10313910A patent/JPH11242597A/ja active Pending
- 1998-09-29 EP EP98307926A patent/EP0905617B1/en not_active Expired - Lifetime
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US9250880B2 (en) | 2013-11-25 | 2016-02-02 | International Business Machines Corporation | Method for obtaining execution frequency information on execution paths in control flow graph, and computer and computer program for obtaining the information |
Also Published As
| Publication number | Publication date |
|---|---|
| US6233733B1 (en) | 2001-05-15 |
| EP0905617A2 (en) | 1999-03-31 |
| DE69833617D1 (de) | 2006-04-27 |
| CA2249042A1 (en) | 1999-03-30 |
| EP0905617A3 (en) | 2002-08-14 |
| EP0905617B1 (en) | 2006-03-01 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JPH11242597A (ja) | Javaバイトコードデータのフローグラフの生成方法 | |
| US6412109B1 (en) | Method for optimizing java bytecodes in the presence of try-catch blocks | |
| CN100385399C (zh) | 用于多个异常处理模型的中间表示的方法和系统 | |
| EP1258805B1 (en) | Placing exception throwing instruction in compiled code | |
| US6247172B1 (en) | Method for a translation system that aggressively optimizes and preserves full synchronous exception state | |
| US6973644B2 (en) | Program interpreter | |
| US7062755B2 (en) | Recovering from compilation errors in a dynamic compilation environment | |
| EP2315118B1 (en) | Method and apparatus for enabling parallel processing during execution of a cobol source program using two-stage compilation | |
| US9495720B2 (en) | Method and apparatus for compiling and executing an application using virtualization in a heterogeneous system | |
| US20020100028A1 (en) | System for modifying the functionality of compiled computer code at run-time | |
| JP2011530768A (ja) | ソフトウェア・アプリケーションの性能向上 | |
| JP2013533533A (ja) | コンピューティング・プラットフォーム内のワークロードの分配及び並列化 | |
| US20060101432A1 (en) | Assembly language code compilation for an instruction-set architecture containing new instructions using the prior assembler | |
| CN100481007C (zh) | 无需额外的代码分析来进行链接时代码优化的方法和系统 | |
| US20160246622A1 (en) | Method and system for implementing invocation stubs for the application programming interfaces embedding with function overload resolution for dynamic computer programming languages | |
| US20070277166A1 (en) | Method and apparatus for performing versioning for loop, method and apparatus for collecting array range check information in basic blocks, method for modifying array range check information, method for optimizing array range checks, method for generating codes for array range checks, method and apparatus for eliminating redundant array range checks, method for selecting array range checks, method for modifying array range checks, method for collecting array range checks, and method for determining handling of array range checks | |
| JP2003513353A (ja) | Java(登録商標)プログラムのプラットフォームに特定的な効率性を高めるための方法及びソフトウエア製品 | |
| Cifuentes et al. | Experience in the design, implementation and use of a retargetable static binary translation framework | |
| CN112882701A (zh) | 一种支持多架构的可执行文件静态插桩技术框架 | |
| EP4196874B1 (en) | Representing asynchronous state machine in intermediate code | |
| JP3551352B2 (ja) | ループ分割方法 | |
| US20080127072A1 (en) | Method and system for extending evaluation for intermediate representation interpretation | |
| Leroy | Compiling functional languages | |
| JP3018783B2 (ja) | コンパイル方式 | |
| JPS58169637A (ja) | コンパイル処理方式 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050906 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080924 |
|
| A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20090310 |