【手続補正書】
【提出日】平成17年12月19日(2005.12.19)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】特許請求の範囲
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンパイル済メソッドを逆最適化するためにコンピュータによって実行される方法であって、前記メソッドが第１の最適化状態にあり、更に前記メソッドは、制御スタック上に配置されたフレームに関連付けられており、
データ構造を生成するステップであって、前記データ構造は前記制御スタックから分離されており、前記データ構造は前記メソッドに関する情報を含んでおり、この情報は、前記メソッド及び前記フレームの少なくとも一つから取得されたものであるステップと、
参照インジケータを生成するステップであって、前記参照インジケータは前記フレームに関連付けられており、この参照インジケータは、前記データ構造を参照するように構成されているステップと、
前記データ構造が生成された後に、前記メソッドを第２の最適化状態に逆最適化するステップと、を備える方法。
【請求項２】
前記データ構造が機械独立であり、前記メソッドを逆最適化するステップは、前記第１の最適化状態にあるメソッドを消去するステップを含んでいる、請求項１記載のコンピュータによって実行される方法。
【請求項３】
前記第２の最適化状態が解釈済状態である、請求項１又は２記載のコンピュータによって実行される方法。
【請求項４】
前記フレームが前記制御スタックの中間部に配置されている、請求項１〜３のいずれかに記載のコンピュータによって実行される方法。
【請求項５】
前記メソッドを逆コンパイルするステップは、前記メソッドに含まれる最適化アクティベーションを逆最適化するステップを含んでいる、請求項１〜４のいずれかに記載のコンピュータによって実行される方法。
【請求項６】
逆最適化された前記アクティベーションを前記データ構造に格納するステップを更に備える請求項５記載のコンピュータによって実行される方法。
【請求項７】
前記データ構造に格納されている前記逆最適化アクティベーションを用いて新しいフレームを生成するステップと、
この新しいフレームを前記フレームの代わりに前記制御スタック上にプッシュするステップと、を更に備える請求項６記載のコンピュータによって実行される方法。
【請求項８】
前記データ構造は機械独立であり、
前記データ構造を第１のコンピュータシステムから第２のコンピュータシステムの方向に転送するステップを更に備える請求項１〜７のいずれかに記載のコンピュータによって実行される方法。
【請求項９】
前記データ構造は、前記第１コンピュータシステム上で生成され、
このデータ構造に格納された逆最適化アクティベーションを用いて、前記第２コンピュータシステム上に新しいフレームを生成するステップを更に備える請求項８記載のコンピュータによって実行される方法。
【請求項１０】
制御スタック上の第１のフレームを動的に逆最適化するためにコンピュータによって実行される方法であって、前記第１フレームは関連コンパイル済メソッドを有し、このコンパイル済メソッドは、コンパイル済アクティベーションを含んでおり、
前記第１フレームに関連付けられた前記コンパイル済メソッドを逆最適化するステップであって、前記第１フレームは、前記制御スタック上の第２のフレームの下に配置されており、前記コンパイル済アクティベーションを逆最適化するサブステップを含み、前記コンパイル済アクティベーションと等価なインタープリタを生成するサブステップを更に含むステップと、
前記制御スタックから前記第２フレームを除去するステップと、
前記コンパイル済アクティベーションと等価なインタープリタから少なくとも一つのインタープリタフレームを生成するステップと、
この少なくとも一つのインタープリタフレームを前記第１フレームの代わりに前記スタックにプッシュするステップと、を備える方法。
【請求項１１】
前記コンパイル済アクティベーションと等価なインタープリタをデータ構造に格納するステップであって、前記データ構造が前記第１フレームに関連付けられているステップを更に備える請求項１０記載のコンピュータによって実行される方法。
【請求項１２】
前記少なくとも一つのインタープリタフレームが生成された後に前記データ構造を消去するステップを更に備える請求項１１記載のコンピュータによって実行される方法。
【請求項１３】
コンパイル済メソッドを動的に逆最適化するためにコンピュータによって実行される方法であって、前記コンパイル済メソッドは制御スタック上の複数のフレームから選択された第１のフレームに関連付けられており、前記制御スタックは、前記制御スタック上の現行フレームを識別するように構成されたスタックポインタを含んでおり、
データ構造を生成するステップであって、前記データ構造は前記制御スタックから分離されており、前記データ構造は、前記第１フレームに関するインタープリタ情報及び前記コンパイル済メソッドに関するメソッド情報を含んでおり、前記第１フレームが前記データ構造への参照を含んでいるステップと、
前記コンパイル済メソッドを消去するステップと、
前記スタックポインタが前記第１フレームを前記制御スタック上の前記現行フレームとして識別する場合に、前記データ構造に含まれている前記インタープリタ情報をアンパックするステップであって、少なくとも一つのインタープリタフレームを生成するステップと、
前記少なくとも一つのインタープリタフレームを前記制御スタック上にプッシュするステップであって、前記第１フレームが前記少なくとも一つのインタープリタフレームによって置き換えられるステップと、を備える方法。
【請求項１４】
前記コンパイル済メソッドに関連付けられたアクセス情報にアクセスするステップと、
前記インタープリタ情報を前記データ構造内に配置するステップであって、前記アクセス情報を用いて前記インタープリタ情報にアクセスするサブステップを含むステップと、を更に備える請求項１３記載のコンピュータによって実行される方法。
【請求項１５】
前記インタープリタ情報を前記データ構造内に配置する前記ステップは、
前記コンパイル済メソッドから前記メソッド情報を抽出するサブステップと、
前記第１フレームから前記インタープリタ情報を抽出するサブステップと、
前記インタープリタ情報及び前記メソッド情報を用いて少なくとも一つの解釈済アクティベーションを生成するサブステップと、
前記少なくとも一つの解釈済アクティベーションを前記データ構造中にマイグレートするサブステップと、を含んでいる請求項記載１４記載のコンピュータによって実行される方法。
【請求項１６】
前記インタープリタ情報がアンパックされる前に前記コンパイル済メソッドが消去される請求項１３〜１５のいずれかに記載のコンピュータによって実行される方法。
【請求項１７】
前記スタック上にマイグレーティングフレームを生成するステップを更に備える請求項１３〜１６のいずれかに記載のコンピュータによって実行される方法であって、前記マイグレーティングフレームが、前記少なくとも一つのインタープリタフレームを前記制御スタック上の前記複数のフレームから選択された第２のフレームに関連付けるように構成されている方法。
【請求項１８】
メソッドを逆最適化するためのコンピュータシステムであって、前記メソッドは第１の最適化状態にあり、前記メソッドは更に、制御スタック上に配置されたフレームに関連付けられており、
前記制御スタックから分離されたデータ構造であって、前記メソッドに関する情報を含むデータ構造と、
前記フレームに関連付けられた参照インジケータであって、前記データ構造を参照するように構成された参照インジケータと、
前記フレームを第２の最適化状態に逆最適化するように構成されたデオプティマイザであって、前記第２の最適化状態は前記第１の最適化状態よりも最適化が進んでおらず、前記メソッドを第２の最適化状態に逆最適化するように構成されているデオプティマイザと、を備えるコンピュータシステム。
【請求項１９】
前記データ構造は機械独立であり、前記デオプティマイザは、更に前記第１最適化状態にあるメソッドを消去するように構成されている請求項１８記載のコンピュータシステム。
【請求項２０】
前記第２最適化状態が解釈済状態である請求項１８又は１９記載のコンピュータシステム。
【請求項２１】
コンパイル済メソッドを逆最適化するように構成されたコンピュータプログラムコード装置を含むコンピュータ読取り可能な媒体であって、前記コンパイル済メソッドは第１の最適化状態にあり、前記コンパイル済メソッドは更に、制御スタック上に配置されたフレームに関連付けられており、
データ構造を生成するコンピュータプログラムコード装置であって、前記データ構造が前記制御スタックから分離されており、前記データ構造が前記メソッドに関する情報を含んでいるコンピュータプログラムコード装置と、
参照インジケータを生成するコンピュータプログラムコード装置であって、前記参照インジケータが前記フレームに関連付けられており、前記参照インジケータが前記データ構造を参照するように構成されているコンピュータプログラムコード装置と、
前記メソッドを第２の最適化状態に逆最適化するコンピュータプログラムコード装置と、を備えるコンピュータ読取り可能な媒体。
【請求項２２】
コンパイル済メソッドを逆最適化するためにコンピュータによって実行される方法であって、前記メソッドが第１の最適化状態にあり、更に前記メソッドは、制御スタック上のある場所に関連付けられており、
前記制御スタックから分離されたデータ構造を生成するステップであって、前記データ構造は前記メソッドに関する情報を含んでおり、この情報は、前記メソッド及び前記制御スタック上の前記場所から取得されたものであるステップと、
前記データ構造を前記制御スタックに関連付けるように構成された識別メカニズムを生成するステップと、を備える方法。
【請求項２３】
前記データ構造が機械独立であり、
前記データ構造を第１のコンピュータシステムと第２のコンピュータシステムとの間で転送するステップを更に含む請求項２２記載のコンピュータによって実行される方法。
【請求項２４】
前記データ構造は、前記第１のコンピュータ上で生成され、
このデータ構造に格納された情報を用いて、前記第２のコンピュータ上に新しいフレームを生成するステップを更に含む請求項２２又は２３記載のコンピュータによって実行される方法。
【請求項２５】
前記識別メカニズムは、前記制御スタックから前記データ構造を参照するように構成された参照インジケータである請求項２２〜２４のいずれかに記載のコンピュータによって実行される方法。
【請求項２６】
前記制御スタック上の前記場所がフレームであり、前記識別メカニズムが前記データ構造を前記フレームに関連付けるように構成されている請求項２２〜２５のいずれかに記載のコンピュータによって実行される方法。
【請求項２７】
前記データ構造が生成された後に、前記メソッドを第２の最適化状態に逆コンパイルするステップを更に含む請求項２２〜２６のいずれかに記載のコンピュータによって実行される方法。
【請求項２８】
前記第１の最適化状態において前記メソッドを遅延させるステップを更に含む請求項２７記載のコンピュータによって実行される方法。
【請求項２９】
前記第２の最適化状態が解釈済状態である請求項２８記載のコンピュータによって実行される方法。
【請求項３０】
前記メソッドを逆コンパイルするステップは、前記メソッドに含まれる最適化アクティベーションを逆最適化するステップを更に含む請求項２７記載のコンピュータによって実行される方法。
【請求項３１】
前記逆最適化されたアクティベーションを前記データ構造に格納するステップと、
前記データ構造に格納されている前記逆最適化アクティベーションを用いて新しいフレームを生成するステップと、
この新しいフレームを前記フレームの代わりに前記制御スタック上にプッシュするステップと、を更に含む請求項３０記載のコンピュータによって実行される方法。
【請求項３２】
前記データ構造が生成された後に、前記メソッドを第２の最適化状態に逆最適化するステップを更に含む請求項２２記載のコンピュータによって実行される方法。
【請求項３３】
コンパイル済メソッドを動的に逆最適化するためにコンピュータによって実行される方法であって、前記コンパイル済メソッドは制御スタック上の複数のフレームから選択された第１のフレームに関連付けられており、前記制御スタックは、前記制御スタック上の現行フレームを識別するように構成されたスタックポインタを含んでおり、
データ構造を生成するステップであって、前記データ構造は前記制御スタックから分離されており、前記データ構造は前記第１フレームに関するインタープリタ情報及び前記コンパイル済メソッドに関するメソッド情報を含んでおり、前記第１フレームが前記データ構造と関連付けられているステップと、
前記コンパイル済メソッドを遅延させるステップと、
前記スタックポインタが前記第１フレームを前記制御スタック上の前記現行フレームとして識別する場合に、前記データ構造に含まれる前記インタープリタ情報をアンパックするステップであって、前記インタープリタ情報のアンパックが少なくとも一つのインタープリタフレームを生成するステップと、
前記少なくとも一つのインタープリタフレームを前記制御スタック上にプッシュするステップであって、前記第１フレームが前記少なくとも一つのインタープリタフレームによって置き換えられるステップと、を備えるコンピュータによって実行される方法。
【請求項３４】
前記第１フレームは、前記データ構造を識別する前記第１フレームへの参照によって、前記データ構造に関連付けられている請求項３３記載のコンピュータによって実行される方法。
【請求項３５】
メソッドを逆最適化するためのコンピュータシステムであって、前記メソッドが第１の最適化状態にあり、更に前記メソッドは、制御スタック上に配置されたフレームに関連付けられており、
前記制御スタックから分離されたデータ構造であって、前記メソッドに関する情報を含む前記データ構造と、
前記フレームを前記データ構造に関連付けられるように構成された第１のメカニズムと、を備えるコンピュータシステム。
【請求項３６】
請求項３５記載のコンピュータシステムであって、
前記フレームを第２の最適化状態に逆最適化するデオプティマイザを更に含み、
前記第２の最適化状態は前記第１の最適化状態よりも最適化が進んでおらず、
デオプティマイザは、更に前記メソッドを第２の最適化状態に逆最適化する請求項３５記載のコンピュータシステム。
【請求項３７】
コンパイル済メソッドの逆最適化は、該コンパイル済メソッドに含まれるコンパイル済アクティベーションの逆最適化を含む請求項３６記載のコンピュータシステム。
【請求項３８】
前記データ構造が機械独立である請求項３５〜３７のいずれかに記載のコンピュータシステム。
【請求項３９】
前記第１のメカニズムは、前記フレームから前記データ構造を参照する参照インジケータである請求項３５〜３８のいずれかに記載のコンピュータシステム。
【請求項４０】
コンパイル済メソッドを逆最適化するためにコンピュータによって実行される方法であって、前記メソッドが第１の最適化状態にあり、更に前記メソッドは、制御スタック上に配置されたフレームに関連付けられており、
前記メソッドに関する情報を含むデータ構造を生成するステップであって、この情報は、前記メソッド及び前記フレームから取得されたものであるステップと、
前記フレームに対し前記データ構造を識別するように構成されているメカニズムを生成するステップと、を備える方法。
【請求項４１】
前記メソッドを第２の最適化状態に逆最適化するステップを更に含む請求項４０記載のコンピュータによって実行される方法。
【請求項４２】
コンパイル済メソッドを逆最適化するためにコンピュータを実行させる方法であって、前記メソッドが第１の最適化状態にあり、更に前記メソッドは、第１のメモリと関連付けられており、
第１のメモリから分離された第２のメモリ上に配置されると共に前記メソッドに関連付けられた情報を含むデータ構造を生成するステップであって、この情報は、前記第１のメモリから取得されたものであるステップと、
前記第１のメモリを前記第２のメモリに関連付けるように構成された識別メカニズムを生成するステップと、を備えるコンピュータによって実行される方法。
【請求項４３】
コンパイル済メソッドを逆最適化するためにコンピュータによって実行される方法であって、前記メソッドが第１の最適化状態にあり、
前記コンパイル済メソッドから情報を取得するステップと、
少なくとも一部が前記情報に基づいているデータ構造を生成するステップであって、前記データ構造が前記コンパイル済メソッドに関する情報を含んでいるステップと、
前記データ構造を用いて前記コンパイル済メソッドを第２の最適化状態に逆最適化するステップと、を備える方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００５
【補正方法】変更
【補正の内容】
【０００５】
さらに、コンパイル済コードが、もはや有効でない仮定に基づいているという理由で逆コンパイル済コードを廃棄しなければならない場合もある。例えば、コンパイル済コードは、新しいクラスがロードされたという理由や、プログラムコードが変更されたという理由で棄却される場合がある。仮定がもはや有効でない、すなわちもはや成り立たない場合、コンピュータシステムがコンパイル済コードを実行し続けるなら、誤った結果が生じるかもしれない。従って、コンピュータシステムは、一般に、コンパイル済コードが現在一つ以上のアクティベーションレコード内で動作しているという場合ですら、誤った結果を警戒するためにコンパイル済コードの実行を停止しなければならない。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０００８
【補正方法】変更
【補正の内容】
【０００８】
コンパイル済フレームが制御スタックのトップに来るまで逆コンパイル済フレームが等価なインタープリタコードに変換されない場合がある。これは、等価インタープリタコードは、しばしばコンパイル済フレームによって要求されるよりも多くの制御スタック上のスペースを要求するという事実による。従って、付加的なスペースを制御スタックの中間に割り当てることができない場合があるので、メソッドに対応するフレームが制御スタックのトップに来るまで、そのメソッドをデコンパイル（逆コンパイル）したりデオプティマイズ（逆最適化）することができない。このため、コンパイル済フレームが制御スタックの中間にあるとき、すなわちコンパイル済フレームが制御スタックの最上フレームでないときは、コンパイル済フレームを対応するインタープリタフレームによって置き換えることはできない。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００２６
【補正方法】変更
【補正の内容】
【００２６】
コンパイル済メソッド３１６の解釈済表現に関する情報は、コンパイル済メソッド３１６及びフレーム３０８ｂの双方に含まれていることがある。一般に、当業者であれば理解できるように、コンパイル済メソッド３１６は静的な情報を含み、フレーム３０８ｂは動的な情報を含む。図７を参照して後述するように、この情報は、インタープリタアクティベーションを保持するように本質的に構成されたデータ構造を生成する際に用いられる。インタープリタアクティベーションを保持するデータ構造を生成することで、フレーム３０８ｂの逆最適化が可能になる。図４は、インタープリタアクティベーションを保持するデータ構造が本発明の実施形態に従って生成された後におけるスタック３０４の線図である。データ構造３２４は、バーチャルフレーム（“ｖｆｒａｍｅ"）アレイと呼ばれ、図３のコンパイル済メソッド３１６を表すインタープリタアクティベーション３２８を保持する。