JPH11237991A - コンパイル済アクティベーションを動的に逆最適化する方法及び装置 - Google Patents

コンパイル済アクティベーションを動的に逆最適化する方法及び装置

Info

Publication number
JPH11237991A
JPH11237991A JP10319743A JP31974398A JPH11237991A JP H11237991 A JPH11237991 A JP H11237991A JP 10319743 A JP10319743 A JP 10319743A JP 31974398 A JP31974398 A JP 31974398A JP H11237991 A JPH11237991 A JP H11237991A
Authority
JP
Japan
Prior art keywords
frame
compiled
interpreter
data structure
computer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP10319743A
Other languages
English (en)
Inventor
Urs Holzle
ホルツル ウールズ
Lars Bak
バク ラーズ
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.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
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 Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JPH11237991A publication Critical patent/JPH11237991A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary
    • 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99944Object-oriented database structure

Abstract

(57)【要約】 【課題】 逆コンパイル及び逆最適化に伴う遅延を本質
的に除去する機構を提供する。 【解決手段】 コンピュータプログラムの実行中に制御
スタック中のフレームを動的に逆最適化する方法及び装
置が開示されている。記載されている方法は、解釈済バ
イトコード及びコンパイル済バイトコードの双方を実行
するように構成されたコンピュータシステムで使用する
のに特に適している。本発明の一態様によれば、コンパ
イル済メソッドを逆最適化するためにコンピュータによ
って実施される方法は、データ構造を生成するステップ
を含んでいる。このデータ構造は,制御スタックから分
離されており、コンパイル済メソッドに関する情報を格
納するように構成されている。ポインタ等の参照インジ
ケータは、そのデータ構造をフレームに関連付けるため
に生成される。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、全体として、ソフ
トウェアアプリケーションにおけるコンパイル済アクテ
ィベーションをデオプティマイズ(逆最適化)するため
の方法及び装置に関し、特に、コンピュータプログラム
の全体実行中にコンパイル済アクティベーションのイー
ガー(熱心な)逆最適化を実行する方法及び装置に関す
る。
【0002】
【従来の技術】コンピュータシステムは、コンピュータ
システムのネットワーク(例えば、ローカルエリアネッ
トワーク、イントラネット、インターネット)を介して
リンクされ、資源を共有できるようになっていることが
多い。共有資源は、しばしばソフトウェアアプリケーシ
ョンを含んでいる。一般に、ソフトウェアアプリケーシ
ョン、あるいはコンピュータプログラムは、異なるコン
ピュータシステムに異なるフォーマットで配信されるこ
とがある。これは、各コンピュータシステムが、ソフト
ウェアアプリケーションが特定のフォーマットであるこ
とを要求するという事実によるものである。この他に、
一つの形式のコンピュータプログラムを多くの異なるコ
ンピュータシステムが利用できるようにするために、コ
ンピュータプログラムが、機械独立形式、すなわちバイ
トコードとしてコンピュータシステムに配信される場合
もある。
【0003】コンピュータプログラムを機械独立形式で
配信する場合、プログラムを直接解釈したり、あるいは
プログラムを機械依存コード、すなわち「マシンコー
ド」に翻訳することができる。直接解釈されるプログラ
ムは、マシンコードに翻訳されるプログラムよりもコン
ピュータシステム内で占めるスペースが少ない。しかし
ながら、直接解釈されるプログラムは、たいていの場
合、マシンコードに翻訳されるプログラムよりも実行速
度が遅い。このため、コンピュータプログラムをマシン
コードに翻訳する代わりにコンピュータプログラムを直
接解釈するかどうかは、多くの場合、実行速度に対する
スペースの相対的な重要度に基づいて判断される。
【0004】一部のコンピュータシステムは、解釈済コ
ード及びコンパイル済コード(すなわち、マシンコー
ド)の双方をサポートするように構成されていることが
ある。解釈済コード及びコンパイル済コードの双方をサ
ポートするシステム上でプログラムを実行する過程の間
に、コンパイル済メソッドを削除または消去することが
有益なことが時々ある。コンパイル済メソッドはコンパ
イル済アクティベーションを含んでおり、コンパイル済
メソッドを削除することは、一般に、コンピュータシス
テム内のスペースを解放する。従って、コンピュータシ
ステム上でより多くのスペースが必要になったときに
は、コンパイル済メソッドが消去されたり、コンパイル
済メソッドが等価なインタープリタコードに置き換えら
れることがある。というのも、解釈済メソッドは、それ
と等価なコンパイル済コードよりもスペースを占有しな
いからである。
【0005】さらに、コンパイル済コードが、もはや有
効でない仮定に基づいているという理由逆コンパイル済
コードを廃棄しなければならない場合もある。例えば、
コンパイル済コードは、新しいクラスがロードされたと
いう理由や、プログラムコードが変更されたという理由
で棄却される場合がある。仮定がもはや有効でない、す
なわちもはや成り立たない場合、コンピュータシステム
がコンパイル済コードを実行し続けるなら、誤った結果
が生じるかもしれない。従って、コンピュータシステム
は、一般に、コンパイル済コードが現在一つ以上のアク
ティベーションレコード内で動作しているという場合で
すら、誤った結果を警戒するためにコンパイル済コード
の実行を停止しなければならない。
【0006】コンピュータプログラム、あるいはアプリ
ケーション内の各メソッドは、通常、コンピュータ制御
スタック上の少なくとも一つのフレームに関連付けられ
ている。このため、コンパイル済メソッドが消去される
と、コンパイル済メソッドに関連付けられた任意のフレ
ーム、すなわちコンパイル済フレームは、本質的にはイ
ンタープリタフレームに変換されなければならない。一
般に、コンパイル済フレームも、上記のように無効にな
ったときには、インタープリタフレームに変換すること
ができる。当業者であれば理解できるように、このよう
な無効コンパイル済フレームをインタープリタフレーム
に変換することは、本質的には無効フレームを有効フレ
ームに変換することである。
【0007】この技術では良く知られているように、フ
レームは、制御スタック上に格納されているアクティベ
ーションレコード(activation record)である。フレ
ームは、メソッドに関連しており、そのメソッドの実行
のための情報を格納するように構成されている。フレー
ムに格納されている情報は、制御状態変数やローカル変
数や表現スタックを含むことがある。制御スタックは、
複数のメソッド、すなわち関数のためのフレームをこれ
らの逐次呼び出し順序で格納するためにプログラム実行
中に用いられるスタックである。メソッドが呼び出され
ると、そのメソッド用のフレームが制御スタック上にプ
ッシュされる。続いて、そのメソッドが終了すると、そ
のメソッドに関連付けられたフレームがそのスタックか
らポップされ、制御スタックのトップにある新しいフレ
ームのための関数が実行を再開、すなわち制御を回復す
る。
【0008】コンパイル済フレームが制御スタックのト
ップに来るま逆コンパイル済フレームが等価なインター
プリタコードに変換されない場合がある。これは、等価
インタープリタコードは、しばしばコンパイル済フレー
ムによって要求されるよりも多くの制御スタック上のス
ペースを要求するという事実による。従って、付加的な
スペースを制御スタックの中間に割り当てることができ
ない場合があるので、メソッドに対応するフレームが制
御スタックのトップに来るまで、そのメソッドをデコン
パイル(逆コンパイル)したりデオプティマイズ(逆最
適化)することができない。このため、コンパイル済フ
レームが制御スタックの中間にあるとき、すなわちコン
パイル済フレームが制御スタックの最上フレームでない
ときは、コンパイル済フレームを対応するインタープリ
タフレームによって置き換えることはできない。
【0009】図1は、コンパイル済フレームを含んだ制
御スタックの線図である。制御スタック104は、上述
したようにメソッドに関連付けられたフレーム108を
含んでいる。例えば、フレーム108bは、コンパイル
済メソッド116に関連付けられたアクティベーション
情報を含むレコードである。スタックポインタ112
は、現在動作中のフレームであるスタック104中の最
上フレーム108、すなわちフレーム108cの位置を
識別する。矢印114は、スタック104が成長する方
向を示している。従って、矢印114によって示される
ように、フレーム108cは、スタック104中の最上
フレームであり、よって制御を伴うフレームである。
【0010】コンパイル済メソッド116、及びフレー
ム108bは、コンパイル済メソッド116に等価なイ
ンタープリタコードを生成するために使用することので
きる情報を含んでいる。コンパイル済メソッド116に
等価なインタープリタコードは、一般に、いつでもアク
セスすることができ、従っていつでも取得することがで
きる。しかしながら、等価なインタープリタコードに関
連付けられたインタープリタフレームは、スタック10
4上でフレーム108bと異なる大きさのスペースを占
めることがある。コンパイル済メソッド116に等価な
インタープリタコードを含んだフレーム、すなわちイン
タープリタフレームは、スタック104においてフレー
ム108bより多くのスペースを占有するかもしれない
から、上述のように、フレーム108bがスタック10
4のトップへポップされるまで、そのインタープリタフ
レームはスタック104に挿入することができない。言
い換えると、フレーム108bは、メソッド116及び
フレーム108bが逆最適化される前は、本質的にスタ
ック104中の制御付きフレームでなければならない。
【0011】上述したように、フレーム108bは、フ
レーム108bがスタック104の中間部にあるときに
は逆最適化することはできない。この結果、コンパイル
済メソッド116を消去すべきという判断がなされる
と、コンパイル済メソッド116の消去と、更にはフレ
ーム108bの逆最適化を遅延させなければならない。
従って、フレーム108bがスタック104内の最上フ
レームとなったときにコンパイル済メソッド116が消
去され、フレーム108bが逆最適化されるように、コ
ンパイル済メソッド116を、消去するものとしてマー
クし、フレーム108bを、逆最適化するものとしてマ
ークする場合がある。
【0012】図2を参照しながら、図1のスタック10
4内のフレーム108bの逆最適化を説明する。図1に
示されるように、フレーム108cがスタック104か
らポップされると、フレーム108bは、もはやスタッ
ク104内の中間位置にはない。言い換えると、フレー
ム108は、スタック104内の最上フレームとなる。
この後、フレーム108bをインタープリタフレーム1
08b′で置き換えてもよい。このフレームは、コンパ
イル済メソッド116のインタープリタアクティベーシ
ョンを含んでいる。この後、スタックポインタ112
を、インタープリタフレーム108b′を指すようにセ
ットしてもよい。インタープリタフレーム108b′が
スタック104上にプッシュされると、コンパイル済メ
ソッド116を消去してもよい。これは、消去コンパイ
ル済メソッド116′で示されている。コンパイル済メ
ソッド116によって以前に占有されていたスペース
は、この後、他の用途のために再割当てするのに用いる
ことができる。
【0013】フレーム108bがスタック104内の最
上フレームになる直前にフレーム108bを逆最適化す
ることもできる。言い換えると、フレーム108cがリ
ターンしてスタック104からポップしようとしている
ときにフレーム108bを逆最適しても良い。フレーム
108bが最上フレームになる直前に行われるフレーム
108bの逆最適化は、「レイジー(怠惰な)」逆最適
化(デオプティマイゼーション)として知られている。
レイジー逆最適化では、特定のコンパイル済フレームの
逆最適化は、一つのスタック中でその特定コンパイル済
フレームより高位にある唯一のフレームがその特定コン
パイル済フレームへリターンしようとするときまで遅延
される。そのため、レイジー逆最適化では、フレームの
逆最適化は、そのフレームが実行をまさに再開しようと
するときに行われる。
【0014】
【発明が解決しようとする課題】一般に、コンパイル済
メソッドに割り当てられた少なくとも一部のコンピュー
タ資源(例えば、メモリスペース)は、不十分な資源し
か他の目的に使えない場合は、再割当てを予定されるこ
とがある。コンパイル済メソッドに割り当てられた資源
が再割当て又は再分配されたる場合、資源を解放するた
めに、コンパイル済メソッドを消去したり逆最適化しな
ければならない。従って、他の目的にすぐに使える資源
はコンパイル済メソッドが消去されるまで利用できない
から、コンパイル済メソッドの消去を延期することは、
しばしば望ましくない。すなわち、消去前の遅延の長さ
は比較的長いことが多いので、逆最適化されるフレーム
のスタック位置などの要因によっては、コンパイル済メ
ソッドを逆コンパイルし、関連コンパイル済フレームを
逆最適化するプロセスは非効率な場合がある。そのた
め、逆コンパイル及び逆最適化に伴う遅延を本質的に除
去する機構が望まれている。すなわち、コンピュータプ
ログラムに付随するコンパイル済メソッドの動的逆コン
パイルやコンパイル済フレームの動的逆最適化の効率を
高める方法及び装置が望まれている。
【0015】
【課題を解決するための手段】コンピュータプログラム
の実行中に制御スタック内のフレームを動的に逆最適化
する方法及び装置を開示する。ここに記載する方法は、
解釈済バイトコード及びコンパイル済バイトコードの双
方を実行するように構成されたコンピュータシステムで
使用するのに特に適している。本発明の一態様によれ
ば、コンパイル済メソッドを逆最適化するためにコンピ
ュータによって実施される方法は、データ構造を生成す
るステップを含んでいる。このデータ構造は、制御スタ
ックから分離されており、逆最適化される制御スタック
上のコンパイル済メソッド及びフレームに関する情報を
記憶するように構成されている。ポインタなどの参照イ
ンジケータは、このデータ構造をフレームに関連付ける
ために生成される。この後、コンパイル済メソッドは直
ちに廃棄することができる。ある態様では、このデータ
構造は機械独立であり、コンパイル済メソッドの逆最適
化は、コンパイル済メソッドを消去するステップを含ん
でいる。
【0016】本発明の別の態様によれば、制御スタック
上の第1のフレームを動的に逆最適化する方法は、コン
パイル済メソッドの逆コンパイルするステップを含んで
いる。ここで、この第1フレームは、コンパイル済アク
ティベーションを含むコンパイル済メソッドに関連付け
られている。このコンパイル済メソッドは、第1フレー
ムが制御スタック上の第2のフレームの下に配置された
ときに逆コンパイルしてもよい。コンパイル済メソッド
を逆コンパイルするステップには、コンパイル済アクテ
ィベーションを逆コンパイルして、コンパイル済アクテ
ィベーションに等価なインタープリタを生成するサブス
テップが含まれている。第2のフレームは、最終的には
制御スタックからポップされ、コンパイル済アクティベ
ーションに等価なインタープリタからインタープリタフ
レームが生成される。次いで、インタープリタフレーム
が第1フレームの代わりにスタック上にプッシュされ
る。ある態様では、コンパイル済アクティベーションに
等価なインタープリタは、第1フレームに関連付けられ
た一時データ構造に格納される。このような態様では、
インタープリタフレームが生成された後にそのデータ構
造を消去してもよい。
【0017】本発明のさらに別の態様によると、制御ス
タック上の複数のフレームから選択された第1のフレー
ムに関連付けられたコンパイル済メソッドを動的に逆最
適化する方法は、第1フレームによって参照されるデー
タ構造を生成するステップを含んでいる。このデータ構
造は、制御スタックから分離されており、第1フレーム
に関するインタープリタ情報及びコンパイル済メソッド
に関するメソッド情報を含んでいる。制御スタックに関
連付けられたスタックポインタが第1フレームを現行フ
レームとして識別すると、コンパイル済メソッドが消去
され、インタープリタ情報がアンパックされる。インタ
ープリタ情報をアンパックするステップには、インター
プリタフレームの生成が含まれている。このインタープ
リタフレームは、制御スタック上にプッシュされて第1
フレームと置き換わる。
【0018】本発明の上記及び他の利点は、以下の詳細
な説明を読み、種々の添付図面を検討することによって
明らかになる。
【0019】本発明は、添付図面とともに以下の説明を
参照することによって最も良く理解することができる。
【0020】
【発明の実施の形態】上述のように、解釈済コード及び
コンパイル済コードの双方をサポートするコンピュータ
システムで動作しているコンピュータプログラムの実行
中に、コンピュータシステム内の資源をより効率良く割
り当てようとする場合には、通常、コンパイル済メソッ
ドを消去することが望ましい。一般的には、コンパイル
済メソッドのデオプティマイズ(逆最適化)や、更には
制御スタック上の関連コンパイル済フレームの逆最適化
は、関連コンパイル済フレームがスタック上の最上フレ
ームとなるか、あるいはスタック上の最上フレームにな
ろうとするときまで遅延される。コンパイル済フレーム
の逆最適化は、コンパイル済フレームよりもスタック上
でより多くのスペースを占めるインタープリタフレーム
の生成を含むことがあるので、コンパイル済フレーム
は、スペースの制約のため、スタックの中間部のどこか
に位置する間は逆最適化されない。コンパイル済メソッ
ドの消去の遅延は、コンピュータシステム内の資源のア
ベイラビリティを遅らせることになる。
【0021】コンパイル済メソッド及び関連コンパイル
済フレームの逆最適化を、コンパイル済フレームのスタ
ック位置にかかわらず行うことができるようにすると、
コンパイル済メソッドを本質的に遅延なく廃棄すること
ができる。コンパイル済メソッド及び対応コンパイル済
フレームの逆最適化を、制御がコンパイル済フレームに
リターンするか、あるいはリターンしようとするときま
で遅延なしに行うことができるようにするために、コン
パイル済メソッドに関連付けられたインタープリタ情報
を一時的に保持するための構造を生成してもよい。この
ような逆最適化は、逆最適化されるフレームが制御を有
するか、あるいは制御を獲得しようとするときまで逆最
適化を遅らせる必要がないので、「イーガー(熱心
な)」逆最適化と考えることができる。
【0022】スタックからのインタープリタ情報を保持
するデータ構造を生成することにより、コンパイル済フ
レーム(これは、インタープリタ情報から生成されたフ
レームによって置き換えられることになっている)及び
これに対応するメソッドを、コンパイル済フレームがス
タックの中間にある間に逆最適化することができる。言
い換えると、コンパイル済フレームに関連付けられたコ
ンパイル済メソッドは、コンパイル済フレームがスタッ
クのトップに到達するまで消去を遅延させることなく消
去したり、あるいは逆最適化することができる。インタ
ープリタ情報から生成されるインタープリタフレーム
は、逆最適化フレームがもともと占有していたものより
も多くのスペースをスタック上で占めるかもしれないの
で、データ構造を使用することにより、スタックの中間
部にあるインタープリタフレームのサイジングを含む問
題に直面することなく、イーガーに逆最適化を行うこと
が可能になる。すなわち、このデータ構造は、逆最適化
フレームが最終的にスタックのトップに到達すると、イ
ンタープリタフレームを生成するためにアンパックされ
るべき情報を一時的に保持する。
【0023】図3は本発明の一実施形態に係るコンパイ
ル済メソッドに関連付けられたフレームを含んだ制御ス
タックの線図である。スタック304は、複数の最適化
された、すなわちコンパイルされたフレーム308を含
んでいる。スタックポインタ312は、スタック304
における現在のフレーム(例えば、フレーム“f4"3
08d)を識別している。現行フレーム308dは、ス
タック304を含むコンピュータシステム全体において
制御を有するフレームである。すなわち、現行フレーム
308dは、スタック304内での最上フレームであ
る。ここに記載する実施形態では、フレーム“f2"3
08b(本明細書及び以下では、フレーム308bと呼
ぶ)は、コンパイル済メソッド316と関連付けられて
いる。特に、フレーム308bは、コンパイル済メソッ
ド316に含まれるコンパイル済アクティベーションに
関する状態情報を含んでいる。
【0024】一般に、コンパイル済メソッド316は、
所与の最適化レベルまでコンパイルされているが、コン
パイル済メソッド316がより低い最適化レベルにある
ようにコンパイル済メソッド316を逆最適化すること
もできる。ある実施形態では、コンパイル済メソッド3
16が消去されることになっている場合、コンパイル済
メソッド316内のコンパイル済アクティベーションを
等価なバイトコード(例えば、インタープリタアクティ
ベーション)で置き換えることができる。すなわち、最
適化されたフレーム308bは、一又は複数の解釈済フ
レームで置き換えることができる。
【0025】コンパイル済メソッド316は、多様な理
由から逆最適化される可能性がある。このような種々の
理由には、プログラムコードの変化に伴うコンパイル済
メソッド316の無効化や、付加的なコンピュータメモ
リスペースの必要性などが含まれる。但し、これらに限
られるものではない。コンパイル済メソッド316、あ
るいはより具体的にフレーム308bを逆最適化するこ
とによって、コンパイル済メソッド316が無効になっ
たときにフレーム308bを有効にすることができる。
更に、コンパイル済コードは一般に解釈済コードよりも
多くのコンピュータメモリスペースを占めるから、コン
パイル済メソッド316を逆最適化することにより、通
常はコンピュータメモリスペースが解放される。
【0026】コンパイル済メソッド316の解釈済表現
に関する情報は、コンパイル済メソッド316及びフレ
ーム308bの双方に含まれていることがある。一般
に、当業者であれば理解できるように、コンパイル済メ
ソッド316は静的な情報を含み、フレーム308bは
動的な情報を含む。図7を参照して後述するように、こ
の情報は、インタープリタアクティベーションを保持す
るように本質的に構成されたデータ構造を生成するの際
に用いられる。インタープリタアクティベーションを保
持するデータ構造を生成することで、フレーム308b
の逆最適化が可能になる。図4は、インタープリタアク
ティベーションを保持するデータ構造が本発明の実施形
態に従って生成された後におけるスタック304の線図
である。データ構造324は、バーチャルフレーム
(“vframe")アレイと呼ばれ、図3のコンパイ
ル済メソッド316を表すインタープリタアクティベー
ション328を保持する。
【0027】図示のように、コンパイル済メソッド31
6は、三つのインタープリタアクティベーション328
で表わされている。しかしながら、コンパイル済メソッ
ド316を表すインタープリタアクティベーション32
8の数は、一般に、多様な要因に依存して広範囲に変化
しうる。このような要因には、コンパイル済メソッド3
16のサイズ、すなわちコンパイル済メソッド316に
関連付けられたコンパイル済アクティベーションの数
や、コンパイラによって実行される最適化(例えば、イ
ンライン化)がある。但し、これらに限られるわけでは
ない。
【0028】逆最適化されたフレーム308b′からの
ポインタ332は、vframeアレイ324を識別す
る。言い換えると、ポインタ332は、vframeア
レイ324が逆最適化フレーム308b′に関連付けら
れていることを示すように構成されている。一般に、v
frameアレイ324は、単一の逆最適化フレーム
(例えば、逆最適化フレーム308b′)にのみ関連付
けられている。しかしながら、一部の実施形態では、複
数の逆最適化フレームが、これらが隣接する場合と隣接
しない場合の双方において、単一のvframeアレイ
を共有してもよい。
【0029】vframeアレイ324の生成は、一般
に、任意の時点に行うことができる。特に、vfram
eアレイは、逆最適化フレーム308b′がスタック3
04の中間にある間に生成することができる。vfra
meアレイ324が生成されると、コンパイル済メソッ
ド316が消去される。これは、消去コンパイル済メソ
ッド316′によって示されている。コンパイル済メソ
ッド316の消去により、コンパイル済メソッド316
に関連付けられたシステム資源(例えば、メモリスペー
ス)を再割当てすることができるようになる。特に、コ
ンパイル済メソッド316は、逆最適化フレーム308
b′がスタック304のトップに来る前、すなわち逆最
適化フレーム308b′が現行フレームとなる前の実質
的に任意に時点に消去することができる。従って、必要
なときにはいつでも、コンパイル済メソッド316に関
連付けられたシステム資源を再割当てすることができ、
図3のフレーム308bを逆最適化フレーム308b′
にすることができる。
【0030】図5に示されるように、スタックポインタ
312が、逆最適化フレーム308b′がスタック30
4上の現行フレームであることを示している場合、図6
に示されるように、vframeアレイ324は、対応
するインタープリタフレームをスタック304上に生成
するようにアンパックされる。インタープリタアクティ
ベーション328aはアンパックされ、スタック304
上に配置されるインタープリタフレーム328a′に本
質的に変換される。同様に、インタープリタアクティベ
ーション328bは、インタープリタフレーム328
b′に対応し、インタープリタアクティベーション32
8cは、インタープリタフレーム328c′に対応す
る。インタープリタフレーム328′がスタック304
上にプッシュされると、スタックポインタ312は、イ
ンタープリタフレーム328c′を現行フレームとして
識別するようにセットされる。ある態様では、システム
は、すべてのインタープリタフレーム328を適切にリ
ンクするために用いられるマイグレーティングフレーム
(migrating frame)330を更に生成してもよい。v
frameアレイ324のアンパック、更にインタープ
リタフレーム328′のスタック304での生成に伴う
ステップは、図8を参照しながら後述する。
【0031】前述したように、vframeアレイの使
用を通じて最適化フレームをイーガーに逆最適化する
と、最適化フレームに関連付けられたコンパイル済メソ
ッドの消去を、プログラムの実行中の実質的に任意の時
点に行うことができるようになる。フレームが制御を有
するようになるまでフレームの逆最適化を遅らせないこ
とにより、逆最適化を通じてコンピュータ資源をより効
率良く解放することができる。例えば、コンピュータシ
ステム内でスペースが必要とされるとき、コンパイル済
メソッドは消去を予定してもよい。フレームがスタック
の中間にある間でさえも関連フレームの逆最適化を許容
することによって、コンパイル済メソッドを実質的に直
ちに消去できるようになり、これにより、スペースが必
要なときにコンピュータシステム内で迅速にスペースを
開放することができる。
【0032】次に、図7を参照しながら、最適化フレー
ムをイーガーに逆最適化することに伴うステップを本発
明の一実施形態に従って説明する。一般に、所与のレベ
ルに最適化されたフレームは、任意の数の異なる理由に
よって、より低い最適化レベルに逆最適化することがで
きる。その理由は広範に変化しうるが、このような理由
としては、無効フレームを有効にする必要性や、コンピ
ュータメモリ内のスペースを節約する必要性や、機械独
立な制御スタックを取得する必要性などが挙げられる。
但し、これらに限られるものではない。
【0033】最適化フレームを逆最適化するプロセス
は、ステップ402から開始する。ステップ402で
は、最適化フレーム、すなわち逆最適化しようとしてい
るフレームに関連付けられたプログラムカウンタが取得
される。このプログラムカウンタは、最適化フレームに
関連付けられたコンパイル済メソッド中に存在するアク
セス情報にアクセスする際に使用するために取得され
る。当業者であれば理解できるように、アクセス情報
は、一般に、コンパイル済メソッドに関連付けられたソ
ースレベル変数の値又は位置を含んでいる。但し、これ
に限定されるわけではない。
【0034】アクセス情報は、インタープリタアクティ
ベーションを取得する際に使用するための最適化フレー
ムからインタープリタ状態を抽出するためにステップ4
04で使用される。最適化フレームに関連付けられた多
重インタープリタアクティベーションが存在する場合が
ある。最適化フレームに関連付けられたインタープリタ
アクティベーションが取得されると、そのインタープリ
タアクティベーションは、ステップ406でvfram
eアレイ中にマイグレート(例えば、配置)される。そ
の結果、図8を参照して後述するように、vframe
アレイ内に含まれている実質的にすべての情報(静的及
び動的の双方)は、一連のインタープリタフレームをス
タック上に最終的にプッシュするために使用することが
できる。
【0035】インタープリタアクティベーションがvf
rameアレイ内に格納された後、ステップ408で
は、そのvfameアレイへのポインタが、対応するフ
レーム(例えば、最適化フレーム)内に格納される。一
般に、vframeアレイポインタは、最適化フレーム
内の任意の固定位置に格納することができる。例えば、
vframeアレイポインタは、最適化フレームの最初
のローカル変数に格納することができ、これにより、v
frameアレイポインタへのアクセスを容易にするこ
とができる。ステップ408からプロセスフローはステ
ップ410へ移動する。ステップ410では、逆最適化
されているフレームによって呼び出されているフレーム
のリターンアドレスが、vframeアレイ用のアンパ
ッキングルーチンのアドレスにセットされる。アンパッ
キングルーチンは、一般にマイグレーティングルーチン
を含んでいるが、このアンパッキングルーチンについて
は、図9を参照しながら後で詳細に述べる。
【0036】アクセス情報が取得されたコンパイル済メ
ソッドは、呼び出されているフレーム、例えば「コーリ
ー(callee)」、のリターンアドレスが変更された後
に、ステップ412で消去することができる。コーリー
のリターンアドレス(当初はコンパイル済メソッドのア
ドレスにセットされる場合がある)は、一般に、コーリ
ーが、存在しない消去されたコンパイル済メソッドにリ
ターンすることを防ぐために変更される。当業者であれ
ば理解できるように、ある実施形態では、コンパイル済
メソッドの消去が許容される前に、他のフレームがその
コンパイル済メソッドを参照しているかどうかを確認す
るための判断を行ってもよい。他のフレームがそのコン
パイル済メソッドを参照している場合、通常は、そのコ
ンパイル済メソッドが消去される前に、他のフレームも
逆最適化される。ステップ410でリターンアドレスが
変更された後に、フレームを逆最適化するプロセスが終
了するように示されているが、その逆最適化プロセスが
真に完了する前に、関連コンパイル済メソッドが消去さ
れる。上述したように、そのコンパイル済メソッドに関
連付けられた全てのフレームが、例えば402〜410
までのステップを用いて処理されるまで、コンパイル済
メソッドの消去は一般には行われない。
【0037】図5を参照して上述したように、逆最適化
フレームが現行フレームになるまでは、逆最適化フレー
ムがインタープリタフレームによって物理的に置き換え
られることはない。言い換えると、スタックポインタが
逆最適化フレームを参照するまで、その逆最適化フレー
ムに対応したインタープリタフレームが逆最適化フレー
ムの代わりにスタック上にプッシュされることはない。
逆最適化フレームをインタープリタフレームと置き換え
るステップには、一般に、インタープリタフレームによ
って参照されたvframeアレイをアンパックしてイ
ンタープリタフレームを取得するステップが含まれてい
る。図8は、本発明の一実施形態に従ってvframe
アレイをアンパックし、vframeアレイからアンパ
ックされたインタープリタフレームをスタック上に配置
する一つの方法に伴うステップを示すプロセスフロー図
である。スタック上の逆最適化フレームを、対応するイ
ンタープリタフレームに置き換えるプロセスは、ステッ
プ502から開始する。ステップ502では、逆最適化
フレームに関連付けられたvframeフレームが取得
され、対応するインタープリタフレームのサイズが計算
される。すなわち、逆最適化フレームのvframeア
レイを用いることで、逆最適化フレームに置き換わるイ
ンタープリタフレームのサイズが計算される。インター
プリタフレームのサイズを計算することにより、インタ
ープリタフレームを収容するためにスタック上のスペー
スを割り当てることができるようになる。各インタープ
リタフレームは、一般に、その対応インタープリタアク
ティベーションのサイズに依存したサイズを有すること
になる。
【0038】スタック上でインタープリタフレームのた
めにスペースを割り当てるために、ステップ504で
は、スタック用のスタックポインタが修正される。スタ
ックポインタの修正には、スタックポインタを、逆最適
化フレームからスタックのさらに上の位置をポイントす
るようにセットするステップが含まれる場合がある。通
常、スタックポインタは、スタック内において逆最適化
フレームに関連付けられた最高のインタープリタフレー
ムの位置に最終的に対応することになるスタック上の位
置を識別するようにセットされる。
【0039】スタックポインタがステップ504で変更
された後、マイグレーティングルーチン用のスタックフ
レーム、及びマイグレーティングルーチンがステップ5
06で呼び出される。当業者であれば理解できるよう
に、このマイグレーティングルーチンは、インタープリ
タアクティベーションをスタック上に配置するように構
成される。インタープリタアクティベーションをスタッ
ク上に配置するステップには、通常、vframeアレ
イからの情報を複数のフレームに変換するステップが含
まれている。ある実施形態では、インタープリタアクテ
ィベーションをインタープリタフレームに変換するステ
ップに、各インタープリタアクティベーションに関連付
けられたフレームポインタフィールド及びリターンアド
レスフィールドを生成するステップが含まれている。マ
イグレーティングルーチンの呼出しは、例えばマイグレ
ーティングルーチンに関連付けられたスタックフレーム
を識別するために、スタックポインタをさらに変化させ
る可能性もある。
【0040】マイグレーティングルーチンでは、スタッ
ク上にインタープリタフレームを生成するためにインタ
ープリタアクティベーションがマイグレートされる。特
に、各インタープリタアクティベーション“i"がマイ
グレートされて、スタック上に一つのインタープリタフ
レームが生成される。生成されるインタープリタフレー
ムの数“N"は、vframeアレイに含まれるインタ
ープリタアクティベーションの数に依存している。
【0041】マイグレーティングルーチンが起動される
と、プロセスフローはステップ506からステップ50
8及び510に移動する。これらのステップは、vfr
ameアレイ内のすべてのインタープリタアクティベー
ションが個々にマイグレートされて、対応するインター
プリタフレームがスタック上に生成されるループを表し
ている。言い換えると、インタープリタアクティベーシ
ョンに対応するインタープリタフレームがスタック上に
プッシュされる。このループは、すべてのインタープリ
タアクティベーションがマイグレートされるまで継続す
る。その時点で、vframeアレイをアンパックし、
インタープリタフレームをスタック上に配置するプロセ
スは完了する。
【0042】一般に、スタック上にインタープリタフレ
ームを生成するステップには、そのインタープリタフレ
ームに関連付けられた種々のアドレスやポインタをセッ
トするステップが含まれる。セット、あるいは更新され
たアドレスやポインタは、広範に変化しうる。例えば、
あるインタープリタフレームに関連付けられたフレーム
ポインタが、別のインタープリタフレームを参照するた
めにリセットされる場合がある。インタープリタフレー
ムのリターンアドレスも、そのインタープリタフレーム
のコーラー(caller)を適宜参照するようにセットされ
る場合がある。図9は、本発明の一実施形態に従ってイ
ンタープリタフレームを含む制御スタックの線図であ
る。言い換えると、図9は、イーガー逆最適化プロセス
が完了し、インタープリタフレームがスタック上にプッ
シュされた後における制御スタックの線図である。制御
スタック602は、逆最適化の後に解釈済フレーム61
0によって置き換えられる別のコンパイル済フレーム
(図示せず)を呼び出したコンパイル済フレーム606
を含んでいる。
【0043】一般に、コンパイル済フレーム606など
のフレームは、局所変数やパラメータを含むとともに、
プログラムデータを有する「データ部分」608を含ん
でいる。コンパイル済フレーム606は、フレームポイ
ンタ614及びリターンアドレス618も含んでいる。
フレームポインタ614は、コンパイル済フレーム60
6に関連付けられたリンクを識別する。言い換えると、
フレームポインタ614は、コンパイル済フレーム60
6によって参照されるフレーム(例えば、インタープリ
タフレーム610a)を識別する。リターンアドレス6
18は、スタック602におけるフレームのアドレス位
置であってコンパイル済フレーム606がリターンする
位置を識別する。リターンアドレス618は、コンパイ
ル済フレーム606を呼び出したフレームのアドレスを
識別する。すなわち、リターンアドレス618は、コン
パイル済フレーム606のコーラーの現在のプログラム
カウンタを識別する。当業者であれば理解できるよう
に、フレームポインタ614及びリターンアドレス61
8は、関連インタープリタ及び関連コンパイラの構成に
少なくとも部分的に依存した制御情報を表す。スタック
602内のフレームも、一般に、他の様々なポインタを
含むことがある。
【0044】インタープリタフレーム610がスタック
602上にプッシュされると、インタープリタフレーム
610のフレームポインタ622及びリターンアドレス
626をセットすることができる。すなわち、インター
プリタフレーム610に関連付けられたリンクを確立す
ることができる。上述したように、フレームポインタ6
22は、インタープリタフレーム610によって呼び出
されたフレームを識別するようにセットすることができ
る。例えば、インタープリタフレーム610aのフレー
ムポインタ622aは、インタープリタフレーム610
bを識別するようにセットすることができる。フレーム
ポインタ622及びリターンアドレス626に関する情
報は、一般に、スタック602上の各インタープリタフ
レームの特定の位置に依存しており、インタープリタの
機能に基づいて容易に計算することができる。従って、
このような情報は、通常、対応するvframeアレイ
には含まれない。vframeアレイに含まれる情報
は、アンパックされてインタープリタフレーム610の
データ部分624になる。
【0045】最上インタープリタフレーム610cは、
マイグレーティングフレーム630のコーラーとしてセ
ットアップされる。上述のように、マイグレーティング
フレーム630(フレームポインタ634及びリターン
アドレス638を含んでいる)は、スタック602上の
インタープリタフレーム610をセットアップするよう
に構成されたマイグレーティングルーチンに関連付けら
れている。言い換えると、マイグレーティングフレーム
630は、本質的には、マイグレーティングルーチンが
リターンするときに制御がインタープリタフレーム61
0内にあるようにスタック602上のフレーム610を
割り当てるように構成される。また、マイグレーティン
グフレーム630に関連付けられたマイグレーティング
ルーチンは、当業者に周知の方法を用いて適切なコーリ
ー及びコーラーを参照するようにフレームポインタ62
2及びリターンアドレス626をセットする。リターン
アドレス638は、マイグレーティングフレーム630
のコーラーのプログラムカウンタにセットされ、フレー
ムポインタ634は、最上インタープリタフレーム61
0cを識別するようにセットされる。
【0046】図示のように、マイグレーティングフレー
ム630は、スタックポインタ612によって識別され
るので、制御スタック602内で制御を有するフレーム
となっている。フレームポインタ“fp"613は、マ
イグレーティングフレーム630内のフレームポインタ
634などのスタックポインタ612によって識別され
るフレーム内の制御情報の位置を識別する。
【0047】vframeアレイは本質的に機械独立で
あるが、上述したように、インタープリタフレーム61
0は必ずしも機械独立ではない。従って、マイグレーテ
ィングフレーム630に関連付けられたマイグレーティ
ングルーチンは、本質的には、機械依存情報をvfra
meアレイから得られた情報に追加するために用いられ
る。マイグレーティングルーチンを用いることで、逆最
適化プロセス用のスレッドや二次制御スタックを必要と
することなしに逆最適化を実行することができる。当業
者であれば理解できるように、マイグレーティングルー
チンは、異なるスタック、すなわち二次制御スタック、
の上で動作することもできる。
【0048】本発明は、任意の適切なコンピュータシス
テム上で一般的に実施することができる。特に、上述の
逆最適化は、図11を参照しながら後述する仮想マシン
など、任意の適切な仮想マシンを用いて達成することが
できる。図10は、本発明を実施するのに適した典型的
な汎用コンピュータシステムを示している。このコンピ
ュータシステム730は、複数のメモリ素子に結合され
た任意の数のプロセッサ732(これは、中央処理装
置、すなわちCPUとも呼ばれる)を含んでいる。これ
らのメモリ素子には、一次記憶装置734(通常は、リ
ードオンリメモリ、すなわちROM)と一次記憶装置7
36(通常は、ランダムアクセスメモリ、すなわちRA
M)とが含まれている。
【0049】当業者であれば分かるように、コンピュー
タシステム730、またはより具体的にCPU732
は、仮想マシンをサポートするように構成されていても
よい。コンピュータシステム730でサポートされる仮
想マシンの一例は、図11を参照しながら後述する。こ
の技術分野では周知のように、ROMは、データおよび
命令を単方向でCPU732に転送するように動作する
が、RAMは、通常、データおよび命令を双方向的に転
送するために使用される。一般に、CPU732は、任
意の数のプロセッサを含んでいてもよい。一次記憶装置
734、736は、双方とも任意の適切なコンピュータ
読取り可能媒体を含んでいてもよい。CPU732には
二次記憶媒体738(通常は、マスメモリ素子)も双方
向に結合されており、付加的なデータ記憶容量を提供し
ている。このマスメモリ素子738は、コンピュータコ
ード、データなどを含むプログラムを記憶するために使
用可能なコンピュータ読取り可能な媒体である。通常、
マスメモリ素子738は、一次記憶装置734、736
よりも一般的に遅いハードディスクやテープなどの記憶
媒体である。マスメモリ記憶装置738は、磁気テープ
リーダや紙テープリーダ、あるいは他の周知装置の形を
とることができる。マスメモリ素子738内に保持され
る情報は、適切な場合に、仮想記憶としてRAM736
の一部として標準的な方式で組み込まれることがある。
特定の一次記憶装置734(CD−ROMなど)も、C
PU732に単方向でデータを受け渡すことができる。
【0050】CPU732は、一つ以上の入出力装置7
40にも結合されている。この入出力装置としては、ビ
デオモニタ、トラックボール、マウス、キーボード、マ
イクロフォン、タッチセンシティブディスプレイ、トラ
ンスジューサカードリーダ、磁気テープまたは紙テープ
リーダ、タブレット、スタイラス、音声または手書き文
字認識装置、あるいは他の周知の入力装置(例えば、当
然のことではあるが、他のコンピュータ)を挙げること
ができる。但し、これらに限定されるわけではない。最
後に、CPU732は、オプションとして、符号712
で全体的に示されるネットワーク接続を用いてコンピュ
ータまたは通信ネットワーク(例えば、ローカルエリア
ネットワーク、インターネットネットワーク、イントラ
ネットネットワーク)に結合されていてもよい。このよ
うなネットワーク接続を用いると、CPU732は、上
述の方法ステップを実行する過程でネットワークから情
報を受け取ったり、ネットワークに情報を出力するとが
できるものと考えられる。このような情報は、CPU7
32を用いて実行すべき一連の命令として表されること
が多いが、例えば搬送波に具体化されたコンピュータデ
ータ信号の形でネットワークから受け取ったりネットワ
ークに出力することができる。上述の装置およびマテリ
アルは、コンピュータハードウェアおよびソフトウェア
技術の当業者には良く知られたものであろう。
【0051】前述のように、仮想マシンはコンピュータ
システム730上で動作することができる。図11は、
図10のコンピュータシステム730によってサポート
され、本発明を実施するのに適した仮想マシンの線図で
ある。コンピュータプログラム、例えばカリフォルニア
州マウンテンビューのサンマイクロシステムズ(SunMic
rosystems)によって開発されたJava(商標)プログラ
ミング言語で書かれたコンピュータプログラムが実行さ
れると、翻訳時環境(compile-time environment)80
5内のコンパイラ820にソースコード810が提供さ
れる。コンパイラ820は、ソースコード810をバイ
トコード830に翻訳する。一般に、ソースコード81
0は、ソースコード810がソフトウェア開発者によっ
て作成される時にバイトコード830に翻訳される。
【0052】一般に、バイトコード830は、ネットワ
ーク(例えば、図10のネットワーク712)を通じて
複写、ダウンロード、または配布したり、図10の一次
記憶装置734などの記憶装置に記憶することができ
る。ここに記載する実施形態では、バイトコード830
はプラットフォームに依存しない。すなわち、バイトコ
ード830は、適切な仮想マシン840を動作させてい
る実質的に任意のコンピュータシステム上で実行するこ
とができる。例えば、Java(商標)環境では、Java(商
標)仮想マシンを動作させているコンピュータシステム
上でバイトコード830を実行することができる。
【0053】バイトコード830は、仮想マシン840
を含む実行時環境(runtime environment)835に提
供される。実行時環境835は、一般に、図10のCP
U732などのプロセッサを用いて実行することができ
る。仮想マシン840は、コンパイラ842、インター
プリタ844、およびランタイムシステム846を含ん
でいる。バイトコード830は、一般に、コンパイラ8
42またはインタープリタ844のいずれかに提供する
ことができる。
【0054】バイトコード830がコンパイラ842に
提供される場合は、上述のように、バイトコード830
に含まれるメソッドが機械語命令にコンパイルされる。
一方、バイトコード830がインタープリタ844に提
供される場合は、バイトコード830が一度に1バイト
コードずつインタープリタ844に読み込まれる。次い
で、インタープリタ844は、各バイトコードがインタ
ープリタ844に読み込まれるのに伴って、各バイトコ
ードによって定義される操作を実行する。一般に、イン
タープリタ844は、バイトコード830を処理して、
バイトコード830に関連付けられた操作をほぼ連続的
に実行する。
【0055】メソッドがオペレーティングシステム86
0から呼び出されると、そのメソッドを解釈済メソッド
として呼び出すべきであると判断される場合は、ランタ
イムシステム846はそのメソッドをインタープリタ8
44から取得することができる。一方、メソッドをコン
パイル済メソッドとして呼び出すべきであると判断され
る場合は、ランタイムシステム846はコンパイラ84
2を起動する。この後、コンパイラ842は、バイトコ
ード830から機械語命令を生成し、その機械語命令を
実行する。一般に、この機械語命令は、仮想マシン84
0が終了するときに廃棄される。
【0056】本発明の実施形態を数個しか記載しなかっ
たが、本発明は、本発明の趣旨または範囲から逸脱する
ことなく他の多くの特定形態に具現化することができ
る。例えば、所与のフレームの逆最適化に伴うステップ
は、順序を変えたり、削除または追加することができ
る。一般に、本発明の方法に伴うステップは、本発明の
趣旨または範囲から逸脱することなく順序を変えたり、
取り除いたり、追加することができる。
【0057】スタック中の実質的にすべてのフレームを
逆最適化することができる。すなわち、スタック中の実
質的にすべてのフレームについてvframeアレイを
生成することができる。あるいは、スタック中の複数の
フレームを表現するために単一のvframeアレイを
生成してもよい。vframeアレイは機械独立である
ので、スタック全体を逆最適化し、従ってスタック全体
についてvframeアレイを生成することにより、そ
のスタック全体を任意の適切なコンピュータシステムに
移出することができるようになる。言い換えると、機械
独立vframeアレイは、異なるコンピュータシステ
ム間で共有することができる。機械独立vframeア
レイは、後で実行を再開できるように、ディスクなどの
媒体に格納することができる。この他に、機械独立フレ
ームは別のコンピュータ(例えば、異なるアーキテクチ
ャを有するコンピュータ)に転送してもよく、この場
合、このコンピュータにおいて、上述のように、vfr
ameアレイが解釈済制御スタックにアンパックされた
後、実行を継続することができる。
【0058】ある実施形態では、最適化フレームからイ
ンタープリタ状態を抽出し、次いで、そのインタープリ
タ状態をvframeアレイ内に配置するステップに、
静的解釈及び動的解釈の双方の使用が含まれていてもよ
い。すなわち、最適化フレームに関連付けられたプログ
ラムカウンタを用いてスコープデスクリプタを取得する
ことができ、最適化フレームから実質的に直接にダイナ
ミック情報を取得することができる。スコープデスクリ
プタ(パラメータ変数を含む)及び動的情報(スコープ
デスクリプタのパラメータ変数に関する実際の値を含
む)は、この後、vframeを生成するために使用す
ることができる。このvframeは、この後、直列化
されてvframeアレイとなる。
【0059】逆最適化される各フレームについて個々の
vframeアレイを使用することを述べてきたが、逆
最適化される複数のフレームが一つのvframeアレ
イを共有してもよい。例えば、逆最適化されるフレーム
がスタック上で隣接して配置されている場合、隣接フレ
ームの各々に関連付けられたインタープリタアクティベ
ーションは、本発明の趣旨と範囲から逸脱することな
く、一つの共有vframeアレイにマイグレートする
ことができる。
【0060】コンパイル済フレームをそのコンパイル済
フレームの解釈済表現に逆最適化する観点から最適化フ
レームの逆最適化を記述してきたが、この代わりに、あ
る実施形態では、最適化フレームの逆最適化を、ある最
適化レベルでコンパイルされたフレームをより低い最適
化レベルでコンパイルされたフレームに逆最適化するこ
とに適用することができる。言い換えると、高い最適化
レベルでコンパイルされたメソッドは、より低い最適化
レベルを示すように「アンコンパイル」することができ
る。もとのコンパイル済メソッドに関する最適化レベル
を低下させることにより、通常は、コンパイル済メソッ
ドに関連付けられたメモリスペースが解放される。コン
パイルに関連付けられた最適化レベルが低下すると、v
frameアレイは、もとのコンパイル済メソッドの、
より最適化が進んでいないコンパイル済アクティベーシ
ョンを含む可能性がある。このように、本例は例示であ
って限定的なものではないと考えるべきであり、本発明
は、本明細書で挙げた詳細に限定されるべきではなく、
均等物の全範囲に沿って特許請求の範囲内で変形を加え
ることができる。
【図面の簡単な説明】
【図1】コンパイル済フレームを含む制御スタックの線
図である。
【図2】インタープリタフレームがコンパイル済フレー
ムに置き換わった後のにおける図1の制御スタック10
4の線図である。
【図3】本発明の一実施形態に従ってコンパイル済フレ
ームを含んでいる制御スタックの線図である。
【図4】本発明の一実施形態に従ってコンパイル済フレ
ームが逆最適化され、仮想フレームアレイが生成された
後における図3の制御スタック304の線図である。
【図5】本発明の一実施形態に従って逆最適化フレーム
308b′が最上フレームになった後における図4の制
御スタック304の線図である。
【図6】本発明の一実施形態に従ってインタプリタフレ
ームが逆最適化フレームに置き換わった後における図5
の制御スタック304の線図である。
【図7】本発明の一実施形態に従ってコンパイル済フレ
ームをイーガーに逆最適化することに伴うステップを示
すプロセスフロー図である。
【図8】本発明の一実施形態に従って仮想frameア
レイをアンパックすることに伴うステップを示すプロセ
スフロー図である,
【図9】本発明の一実施形態に従ってインタープリタフ
レーム及びマイグレーティングフレームを含んでいる制
御スタックの線図である,
【図10】本発明を実施するのに適した典型的な汎用の
コンピュータシステムを示す図である。
【図11】本発明を実施するのに適した仮想マシンの線
図である。
【符号の説明】
304…スタック、308…フレーム、312…スタッ
クポインタ、316…コンパイル済メソッド、324…
バーチャルフレームアレイ、328…インタープリタア
クティベーション。
─────────────────────────────────────────────────────
【手続補正書】
【提出日】平成10年12月7日
【手続補正1】
【補正対象書類名】明細書
【補正対象項目名】発明の名称
【補正方法】変更
【補正内容】
【発明の名称】 コンパイル済アクティベー
ションを動的に逆最適化する方法及び装置
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ラーズ バク アメリカ合衆国, カリフォルニア州, パロ アルト, コリナ ウェイ 3782

Claims (21)

    【特許請求の範囲】
  1. 【請求項1】 コンパイル済メソッドを逆最適化するた
    めにコンピュータによって実施されるプロセスであっ
    て、前記メソッドが第1の最適化状態にあり、更に前記
    メソッドは、制御スタック上に配置されたフレームに関
    連付けられており、 データ構造を生成するステップであって、前記データ構
    造は前記制御スタックから分離されており、前記データ
    構造は前記メソッドに関する情報を含んでおり、この情
    報は、前記メソッド及び前記フレームの少なくとも一つ
    から取得されたものであるステップと、 参照インジケータを生成するステップであって、前記参
    照インジケータは前記フレームに関連付けられており、
    この参照インジケータは、前記データ構造を参照するよ
    うに構成されているステップと、 前記データ構造が生成された後に、前記メソッドを第2
    の最適化状態に逆最適化するステップとを備えるプロセ
    ス。
  2. 【請求項2】 前記データ構造が機械独立であり、前記
    メソッドを逆最適化するステップは、前記第1の最適化
    状態にあるメソッドを消去するステップを含んでいる、
    請求項1記載のコンピュータによって実施されるプロセ
    ス。
  3. 【請求項3】 前記第2の最適化状態が解釈済状態であ
    る、請求項1又は2記載のコンピュータによって実施さ
    れるプロセス。
  4. 【請求項4】 前記フレームが前記制御スタックの中間
    部に配置されている、請求項1〜3のいずれかに記載の
    コンピュータによって実施されるプロセス。
  5. 【請求項5】 前記メソッドを逆コンパイルするステッ
    プは、前記メソッドに含まれる最適化アクティベーショ
    ンを逆最適化するステップを含んでいる、請求項1〜4
    のいずれかに記載のコンピュータによって実施されるプ
    ロセス。
  6. 【請求項6】 逆最適化された前記アクティベーション
    を前記データ構造に格納するステップを更に備える請求
    項5記載のコンピュータによって実施されるプロセス。
  7. 【請求項7】 前記データ構造に格納されている前記逆
    最適化アクティベーションを用いて新しいフレームを生
    成するステップと、 この新しいフレームを前記フレームの代わりに前記制御
    スタック上にプッシュするステップと、を更に備える請
    求項6記載のコンピュータによって実施されるプロセ
    ス。
  8. 【請求項8】 前記データ構造は機械独立であり、 前記データ構造を第1のコンピュータシステムから第2
    のコンピュータシステムの方向に転送するステップを更
    に備える請求項1〜7のいずれかに記載のコンピュータ
    によって実施されるプロセス。
  9. 【請求項9】 前記データ構造は、前記第1コンピュー
    タシステム上で生成され、 このデータ構造に格納された逆最適化アクティベーショ
    ンを用いて、前記第2コンピュータシステム上に新しい
    フレームを生成するステップを更に備える請求項8記載
    のコンピュータによって実施されるプロセス。
  10. 【請求項10】 制御スタック上の第1のフレームを動
    的に逆最適化するためにコンピュータによって実施され
    る方法であって、前記第1フレームは関連コンパイル済
    メソッドを有し、このコンパイル済メソッドは、コンパ
    イル済アクティベーションを含んでおり、 前記第1フレームに関連付けられた前記コンパイル済メ
    ソッドを逆最適化するステップであって、前記第1フレ
    ームは、前記制御スタック上の第2のフレームの下に配
    置されており、前記コンパイル済アクティベーションを
    逆最適化するサブステップを含み、前記コンパイル済ア
    クティベーションと等価なインタープリタを生成するサ
    ブステップを更に含むステップと、 前記制御スタックから前記第2フレームを除去するステ
    ップと、 前記コンパイル済アクティベーションと等価なインター
    プリタから少なくとも一つのインタープリタフレームを
    生成するステップと、 この少なくとも一つのインタープリタフレームを前記第
    1フレームの代わりに前記スタックにプッシュするステ
    ップと、 を備える方法。
  11. 【請求項11】 前記コンパイル済アクティベーション
    と等価なインタープリタをデータ構造に格納するステッ
    プであって、前記データ構造が前記第1フレームに関連
    付けられているステップを更に備える請求項10記載の
    コンピュータによって実施される方法。
  12. 【請求項12】 前記少なくとも一つのインタープリタ
    フレームが生成された後に前記データ構造を消去するス
    テップを更に備える請求項11記載のコンピュータによ
    って実施される方法。
  13. 【請求項13】 コンパイル済メソッドを動的に逆最適
    化するためにコンピュータによって実施される方法であ
    って、前記コンパイル済メソッドは制御スタック上の複
    数のフレームから選択された第 1のフレームに関連付け
    られており、前記制御スタックは、前記制御スタック上
    の現行フレームを識別するように構成されたスタックポ
    インタを含んでおり、 データ構造を生成するステップであって、前記データ構
    造は前記制御スタックから分離されており、前記データ
    構造は、前記第1フレームに関するインタープリタ情報
    及び前記コンパイル済メソッドに関するメソッド情報を
    含んでおり、前記第1フレームが前記データ構造への参
    照を含んでいるステップと、 前記コンパイル済メソッドを消去するステップと、 前記スタックポインタが前記第1フレームを前記制御ス
    タック上の現行フレームとして識別する場合に、前記デ
    ータ構造に含まれている前記インタープリタ情報をアン
    パックするステップであって、少なくとも一つのインタ
    ープリタフレームを生成するステップと、 前記少なくとも一つのインタープリタフレームを前記制
    御スタック上にプッシュするステップであって、前記第
    1フレームが前記少なくとも一つのインタープリタフレ
    ームによって置き換えられるステップと、を備える方
    法。
  14. 【請求項14】 前記コンパイル済メソッドに関連付け
    られたアクセス情報にアクセスするステップと、 前記インタープリタ情報を前記データ構造内に配置する
    ステップであって、前記アクセス情報を用いて前記イン
    タープリタ情報にアクセスするサブステップを含むステ
    ップと、を更に備える請求項13記載のコンピュータに
    よって実施される方法。
  15. 【請求項15】 前記インタープリタ情報を前記データ
    構造内に配置する前記ステップは、 前記コンパイル済メソッドから前記メソッド情報を抽出
    するサブステップと、 前記第1フレームから前記インタープリタ情報を抽出す
    るサブステップと、 前記インタープリタ情報及び前記メソッド情報を用いて
    少なくとも一つの解釈済アクティベーションを生成する
    サブステップと、 前記少なくとも一つの解釈済アクティベーションを前記
    データ構造中にマイグレートするサブステップと、を含
    んでいる、請求項記載14記載のコンピュータによって
    実施される方法。
  16. 【請求項16】 前記インタープリタ情報がアンパック
    される前に前記コンパイル済メソッドが消去される請求
    項13〜15のいずれかに記載のコンピュータによって
    実施される方法。
  17. 【請求項17】 前記スタック上にマイグレーティング
    フレームを生成するステップを更に備える請求項13〜
    16のいずれかに記載のコンピュータによって実施され
    る方法であって、前記マイグレーティングフレームが、
    前記少なくとも一つのインタープリタフレームを前記制
    御スタック上の前記複数のフレームから選択された第2
    のフレームに関連付けるように構成されている方法。
  18. 【請求項18】 メソッドを逆最適化するためのコンピ
    ュータシステムであって、前記メソッドは第1の最適化
    状態にあり、前記メソッドは更に、制御スタック上に配
    置されたフレームに関連付けられており、 前記制御スタックから分離されたデータ構造であって、
    前記メソッドに関する情報を含むデータ構造と、 前記フレームに関連付けられた参照インジケータであっ
    て、前記データ構造を参照するように構成された参照イ
    ンジケータと、 前記フレームを第2の最適化状態に逆最適化するように
    構成されたデオプティマイザであって、前記第2の最適
    化状態は前記第1の最適化状態よりも最適化が進んでお
    らず、前記メソッドを第2の最適化状態に逆最適化する
    ように構成されているデオプティマイザと、を備えるコ
    ンピュータシステム。
  19. 【請求項19】 前記データ構造は機械独立であり、前
    記デオプティマイザは、更に前記第1最適化状態にある
    メソッドを消去するように構成されている、請求項18
    記載のコンピュータシステム。
  20. 【請求項20】 前記第2最適化状態が解釈済状態であ
    る請求項18又は19記載のコンピュータシステム。
  21. 【請求項21】 コンパイル済メソッドを逆最適化する
    ように構成されたコンピュータプログラムコード装置を
    含むコンピュータ読取り可能な媒体であって、前記コン
    パイル済メソッドは第1の最適化状態にあり、前記コン
    パイル済メソッドは更に、制御スタック上に配置された
    フレームに関連付けられており、 データ構造を生成するコンピュータプログラムコード装
    置であって、前記データ構造が前記制御スタックから分
    離されており、前記データ構造が前記メソッドに関する
    情報を含んでいるコンピュータプログラムコード装置
    と、 参照インジケータを生成するコンピュータプログラムコ
    ード装置であって、前記参照インジケータが前記フレー
    ムに関連付けられており、前記参照インジケータが前記
    データ構造を参照するように構成されているコンピュー
    タプログラムコード装置と、 前記メソッドを第2の最適化状態に逆最適化するコンピ
    ュータプログラムコード装置と、を備えるコンピュータ
    読取り可能な媒体。
JP10319743A 1997-10-06 1998-10-06 コンパイル済アクティベーションを動的に逆最適化する方法及び装置 Pending JPH11237991A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/944330 1997-10-06
US08/944,330 US5933635A (en) 1997-10-06 1997-10-06 Method and apparatus for dynamically deoptimizing compiled activations

Publications (1)

Publication Number Publication Date
JPH11237991A true JPH11237991A (ja) 1999-08-31

Family

ID=25481204

Family Applications (1)

Application Number Title Priority Date Filing Date
JP10319743A Pending JPH11237991A (ja) 1997-10-06 1998-10-06 コンパイル済アクティベーションを動的に逆最適化する方法及び装置

Country Status (5)

Country Link
US (3) US5933635A (ja)
EP (1) EP0908820A3 (ja)
JP (1) JPH11237991A (ja)
KR (1) KR100573043B1 (ja)
CN (1) CN1143210C (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010267291A (ja) * 1998-11-16 2010-11-25 Myriad Group Ag コンピュータ・システム、コンピュータ読取り可能な記憶媒体および同媒体を動作させる方法、およびコンピュータ・システムを動作させる方法

Families Citing this family (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6865734B2 (en) * 1997-10-06 2005-03-08 Sun Microsystems, Inc. Method and apparatus for performing byte-code optimization during pauses
US5995754A (en) * 1997-10-06 1999-11-30 Sun Microsystems, Inc. Method and apparatus for dynamically optimizing byte-coded programs
US5970249A (en) * 1997-10-06 1999-10-19 Sun Microsystems, Inc. Method and apparatus for performing byte-code optimization during pauses
US6317796B1 (en) 1997-10-06 2001-11-13 Sun Microsystems, Inc. Inline database for receiver types in object-oriented systems
US5933635A (en) * 1997-10-06 1999-08-03 Sun Microsystems, Inc. Method and apparatus for dynamically deoptimizing compiled activations
US6704927B1 (en) * 1998-03-24 2004-03-09 Sun Microsystems, Inc. Static binding of dynamically-dispatched calls in the presence of dynamic linking and loading
US6205578B1 (en) * 1998-08-14 2001-03-20 Ati International Srl Interpreter for stack-based languages
JP2000122875A (ja) * 1998-10-19 2000-04-28 Internatl Business Mach Corp <Ibm> 例外処理方法およびシステム
JP3807860B2 (ja) * 1999-01-29 2006-08-09 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイル方法および装置、並びにメソッド活動度計算方法および装置
US7150005B2 (en) * 1999-07-02 2006-12-12 Beryl Technical Assays, Llc Method and system for global constant management for memory
US6968549B1 (en) * 1999-07-02 2005-11-22 Beryl Technical Assays Llc Method and system for dynamically loading data structures into memory with global constant pool
US6714904B1 (en) * 1999-10-13 2004-03-30 Transmeta Corporation System for using rate of exception event generation during execution of translated instructions to control optimization of the translated instructions
US7761857B1 (en) 1999-10-13 2010-07-20 Robert Bedichek Method for switching between interpretation and dynamic translation in a processor system based upon code sequence execution counts
JP3356742B2 (ja) * 1999-11-17 2002-12-16 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラム実行方法
US6526572B1 (en) * 2000-02-09 2003-02-25 Hewlett-Packard Company Mechanism for software register renaming and load speculation in an optimizer
US6594821B1 (en) 2000-03-30 2003-07-15 Transmeta Corporation Translation consistency checking for modified target instructions by comparing to original copy
US6615300B1 (en) 2000-06-19 2003-09-02 Transmeta Corporation Fast look-up of indirect branch destination in a dynamic translation system
US6973646B1 (en) * 2000-07-21 2005-12-06 International Business Machines Corporation Method for compiling program components in a mixed static and dynamic environment
US6658656B1 (en) * 2000-10-31 2003-12-02 Hewlett-Packard Development Company, L.P. Method and apparatus for creating alternative versions of code segments and dynamically substituting execution of the alternative code versions
JP3808755B2 (ja) * 2001-11-07 2006-08-16 富士通株式会社 Jitコンパイラを備えた仮想計算機
US6996814B2 (en) 2001-11-14 2006-02-07 Sun Microsystems, Inc. Method and apparatus for dynamically compiling byte codes into native code
US6738969B2 (en) 2001-11-14 2004-05-18 Sun Microsystems, Inc. Non-intrusive gathering of code usage information to facilitate removing unused compiled code
US7181732B2 (en) * 2001-11-14 2007-02-20 Sun Microsystems, Inc. Method and apparatus for facilitating lazy type tagging for compiled activations
US8639849B2 (en) * 2001-12-17 2014-01-28 Sutech Data Solutions Co., Llc Integrated circuits for high speed adaptive compression and methods therefor
US7180909B1 (en) * 2001-12-17 2007-02-20 Supergate Technology Usa, Inc. Interface receive circuits for modularized data optimization engines and methods therefor
US7020160B1 (en) 2001-12-17 2006-03-28 Supergate Technology Usa, Inc. Interface circuits for modularized data optimization engines and methods therefor
US6973644B2 (en) 2002-04-12 2005-12-06 The Mathworks, Inc. Program interpreter
US7051322B2 (en) 2002-12-06 2006-05-23 @Stake, Inc. Software analysis framework
US7310723B1 (en) 2003-04-02 2007-12-18 Transmeta Corporation Methods and systems employing a flag for deferring exception handling to a commit or rollback point
US7743377B2 (en) * 2004-10-25 2010-06-22 Microsoft Corporation Cooperative threading in a managed code execution environment
US8413162B1 (en) 2005-06-28 2013-04-02 Guillermo J. Rozas Multi-threading based on rollback
ATE486316T1 (de) * 2005-08-30 2010-11-15 Sony Ericsson Mobile Comm Ab Verfahren und software für die optimierung der positionierung von software-funktionen in einem speicher
US8613080B2 (en) 2007-02-16 2013-12-17 Veracode, Inc. Assessment and analysis of software security flaws in virtual machines
JP2009211190A (ja) * 2008-02-29 2009-09-17 Hitachi Ltd 情報処理装置
US20130205282A1 (en) * 2012-02-07 2013-08-08 Microsoft Corporation Transferring program execution from compiled code to interpreted code
US9286063B2 (en) 2012-02-22 2016-03-15 Veracode, Inc. Methods and systems for providing feedback and suggested programming methods
US8930920B2 (en) * 2012-12-31 2015-01-06 Oracle International Corporation Self-optimizing interpreter and snapshot compilation
US9690581B2 (en) 2013-10-15 2017-06-27 Mil Computing, Inc. Computer processor with deferred operations
US9569185B2 (en) 2014-02-07 2017-02-14 Oracle International Corporation Changing de-optimization guard representation during the compilation process
KR20170047957A (ko) * 2015-10-26 2017-05-08 삼성전자주식회사 반도체 장치의 동작 방법 및 반도체 시스템
US11029929B2 (en) * 2019-01-24 2021-06-08 Red Hat, Inc. Using emulation to improve startup time for just-in-time compilation

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5371747A (en) * 1992-06-05 1994-12-06 Convex Computer Corporation Debugger program which includes correlation of computer program source code with optimized object code
AU4598593A (en) * 1992-06-05 1994-01-04 Convex Computer Corporation Computer program debugging in the presence of compiler synthesized variables
US5586328A (en) * 1994-10-21 1996-12-17 Microsoft Corporation Module dependency based incremental compiler and method
US6021272A (en) * 1995-10-04 2000-02-01 Platinum Technology, Inc. Transforming and manipulating program object code
US5956479A (en) * 1995-11-13 1999-09-21 Object Technology Licensing Corporation Demand based generation of symbolic information
US6151618A (en) * 1995-12-04 2000-11-21 Microsoft Corporation Safe general purpose virtual machine computing system
WO1997027536A1 (en) * 1996-01-24 1997-07-31 Sun Microsystems, Inc. Instruction folding for a stack-based machine
US5933635A (en) * 1997-10-06 1999-08-03 Sun Microsystems, Inc. Method and apparatus for dynamically deoptimizing compiled activations
US6110226A (en) * 1998-02-19 2000-08-29 Cygnus Solutions Java development environment using optimizing ahead-of-time compiler
US6434741B1 (en) * 1998-04-30 2002-08-13 Hewlett-Packard Company Method and apparatus for debugging of optimized code using emulation
US6263489B1 (en) * 1998-04-30 2001-07-17 Hewlett-Packard Company Method and apparatus for debugging of optimized code
US6223340B1 (en) * 1998-10-09 2001-04-24 Sun Microsystems, Inc. Method for directly inlining virtual calls without on-stack replacement
US6275981B1 (en) * 1998-11-12 2001-08-14 Hewlett-Packard Company Method and system for correlating profile data dynamically generated from an optimized executable program with source code statements
US6507946B2 (en) * 1999-06-11 2003-01-14 International Business Machines Corporation Process and system for Java virtual method invocation

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010267291A (ja) * 1998-11-16 2010-11-25 Myriad Group Ag コンピュータ・システム、コンピュータ読取り可能な記憶媒体および同媒体を動作させる方法、およびコンピュータ・システムを動作させる方法

Also Published As

Publication number Publication date
KR19990036885A (ko) 1999-05-25
KR100573043B1 (ko) 2006-11-30
US6240547B1 (en) 2001-05-29
CN1143210C (zh) 2004-03-24
EP0908820A3 (en) 2004-06-23
EP0908820A2 (en) 1999-04-14
US5933635A (en) 1999-08-03
CN1232213A (zh) 1999-10-20
US6601235B1 (en) 2003-07-29

Similar Documents

Publication Publication Date Title
JPH11237991A (ja) コンパイル済アクティベーションを動的に逆最適化する方法及び装置
US7406684B2 (en) Compiler, dynamic compiler, and replay compiler
US6223339B1 (en) System, method, and product for memory management in a dynamic translator
US6654954B1 (en) Computer system, program product and method utilizing executable file with alternate program code attached as a file attribute
US6336213B1 (en) Method and apparatus for dynamic selection of which bytecodes should be just in time compiled
US7530059B2 (en) Method for inlining native functions into compiled java code
US6381737B1 (en) Automatic adapter/stub generator
JP4571710B2 (ja) ディスパッチテーブル構造のための方法と装置
US6363522B1 (en) Method and apparatus for handling exceptions as normal control flow
EP1626338A1 (en) System and method for providing exceptional flow control in protected code through watchpoints
US5991763A (en) Method and apparatus for embedding concatenated data files into object files during runtime in a virtual file system
JPH0644085A (ja) アクセスを実行する方法及び装置並びにコンピュータシステム
US8200938B2 (en) Computer system and method providing a memory buffer for use with native and platform-independent software code
US7086044B2 (en) Method, article of manufacture and apparatus for performing automatic intermodule call linkage optimization
US7020874B2 (en) Techniques for loading class files into virtual machines
US20040083467A1 (en) System and method for executing intermediate code
US6581077B2 (en) Method and apparatus for storing short-lived objects in a virtual machine
JPH02114335A (ja) マルチ・プロセツシング方式
US6901591B1 (en) Frameworks for invoking methods in virtual machines
US8099723B2 (en) Referencing a constant pool in a java virtual machine
US8341606B2 (en) Method of invoking inlined method and java virtual machine using the method
US5150474A (en) Method for transferring arguments between object programs by switching address modes according to mode identifying flag
US6978448B1 (en) Method and apparatus for rewriting bytecodes to minimize runtime checks
US20210294626A1 (en) Optimizing execution of foreign method handles on a virtual machine
US6311184B1 (en) Sort and merge functions with input and output procedures

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20051005

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20051219

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081028

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20090401