(57)【特許請求の範囲】
【請求項１】
マシンにより実施される方法において、
動的出力が現在ユーザに対してレンダリングされているか否かを決定するステップと、
動的出力が現在ユーザに対してレンダリングされているとの決定に応じて、１つ又はそれ以上の組の命令がコンパイルされないようにして、それにより該１つ又はそれ以上の組の命令がインタプリタ的に実行されるようにするステップと
を有し、
決定するステップは、
出力がユーザに対してレンダリングされていることの１つ又はそれ以上のインジケータを喚起するステップと、
該１つ又はそれ以上のインジケータに基づいて、該レンダリングされている出力が動的出力であるか否かを決定するステップとを有し、
該出力が動的出力であるか否かを決定するステップは、
該１つ又はそれ以上のインジケータが喚起される頻度を決定するステップを有し、
１つ又はそれ以上の命令がコンパイルされないようにするステップは、
コンピュータシステムに、コンパイルのために１つ又はそれ以上の組の命令のマーキングを停止させるステップであって、該１つ又はそれ以上の組の命令のマーキングは、前記コンピュータシステムに該１つ又はそれ以上の組の命令が次に前記コンピュータシステムにより処理されたときに、該１つ又はそれ以上の組の命令をコンパイルさせるステップを有し、
動的出力がモーションビデオ及びオーディオからなるグループのうちの１つである、
方法。
【請求項２】
コンパイルは該１つ又はそれ以上の組の命令を第一フォーマットから第二フォーマットへ変換させ、該第二フォーマットは該１つ又はそれ以上の組の命令をネイティブ的に実行させるために使用される、請求項１に記載の方法。
【請求項３】
該１つ又はそれ以上の組の命令が実行ログ内にリストされている最近実行された命令の組であり、
コンピュータシステムに、コンパイルのために１つ又はそれ以上の組の命令のマーキングを停止させるステップは、コンピュータシステムに、該実行ログ内のどの組の命令のマーキングも停止させるステップを含む、請求項１に記載の方法。
【請求項４】
１つ又はそれ以上の組の命令を有するコンピュータプログラムであって、１つ又はそれ以上のプロセッサにより実行されたとき、該１つ又はそれ以上のプロセッサに、
動的出力が現在ユーザに対してレンダリングされているか否かを決定するステップと、
動的出力が現在ユーザに対してレンダリングされているとの決定に応じて、１つ又はそれ以上の組の命令がコンパイルされないようにして、それにより該１つ又はそれ以上の組の命令がインタプリタ的に実行されるようにするステップとを実行させ、
決定するステップは、
出力がユーザに対してレンダリングされていることの１つ又はそれ以上のインジケータを喚起するステップと、
該１つ又はそれ以上のインジケータに基づいて、該レンダリングされている出力が動的出力であるか否かを決定するステップとを有し、
該出力が動的出力であるか否かを決定するステップは、
該１つ又はそれ以上のインジケータが喚起される頻度を決定するステップを有し、
１つ又はそれ以上の命令がコンパイルされないようにするステップは、
コンピュータシステムに、コンパイルのために１つ又はそれ以上の組の命令のマーキングを停止させるステップであって、該１つ又はそれ以上の組の命令のマーキングは、前記コンピュータシステムに該１つ又はそれ以上の組の命令が次に前記コンピュータシステムにより処理されたときに、該１つ又はそれ以上の組の命令をコンパイルさせるステップを有する、
動的出力がモーションビデオ及びオーディオからなるグループのうちの１つである
コンピュータプログラム。
【請求項５】
コンパイルは該１つ又はそれ以上の組の命令を第一フォーマットから第二フォーマットへ変換させ、該第二フォーマットは該１つ又はそれ以上の組の命令をネイティブ的に実行させるために使用される、請求項４に記載のコンピュータプログラム。
【請求項６】
該１つ又はそれ以上の組の命令が実行ログ内にリストされている最近実行された命令の組であり、
コンピュータシステムに、コンパイルのための１つ又はそれ以上の組の命令のマーキングを停止させるステップは、コンピュータシステムに、該実行ログ内のどの組の命令のマーキングも停止させるステップを含む、請求項４に記載のコンピュータプログラム。
【請求項７】
固定記憶部と、
１つ又はそれ以上のプロセッサと、
１組の命令であって、該１つ又はそれ以上のプロセッサによって実行されたとき、該１つ又はそれ以上のプロセッサに、
動的出力が現在ユーザに対してレンダリングされているか否かを決定するステップと、
動的出力が現在ユーザに対してレンダリングされているとの決定に応じて、１つ又はそれ以上の組の命令がコンパイルされないようにして、それにより該１つ又はそれ以上の組の命令がインタプリタ的に実行されるようにするステップと
を実施させる１組の命令と、
を有し、
決定するステップは、
出力がユーザに対してレンダリングされていることの１つ又はそれ以上のインジケータを喚起するステップと、
該１つ又はそれ以上のインジケータに基づいて、該レンダリングされている出力が動的出力であるか否かを決定するステップとを有し、
該出力が動的出力であるか否かを決定するステップは、
該１つ又はそれ以上のインジケータが喚起される頻度を決定するステップを有し、
１つ又はそれ以上の命令がコンパイルされないようにするステップは、
コンピュータシステムに、コンパイルのために１つ又はそれ以上の組の命令のマーキングを停止させるステップであって、該１つ又はそれ以上の組の命令のマーキングは、前記コンピュータシステムに該１つ又はそれ以上の組の命令が次に前記コンピュータシステムにより処理されたときに、該１つ又はそれ以上の組の命令をコンパイルさせる、
動的出力がモーションビデオ及びオーディオからなるグループのうちの１つである、
装置。
【請求項８】
コンパイルが、該１つ又はそれ以上の組の命令をして第一フォーマットから第二フォーマットへ変換させ、該第二フォーマットが該１つ又はそれ以上の組の命令をネイティブ的に実行させるために使用される、請求項７に記載の装置。
【請求項９】
該１つ又はそれ以上の組の命令が実行ログ内にリストされている最近実行された命令の組であり、
コンピュータシステムに、コンパイルのための１つ又はそれ以上の組の命令のマーキングを停止させるステップは、コンピュータシステムに、該実行ログ内のどの組の命令のマーキングも停止させるステップを含む、請求項７に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動的コンパイル期間中に動的ポーズを減少させる技術に関するものであって、更に詳細には、動的コンパイルにより発生される動的出力における検知可能なポーズを減少させる技術に関するものである。
【背景技術】
【０００２】
このセクションに記載するアプローチは、探求することが可能であったアプローチであるが、必ずしも以前に着想されたか又は探求されたアプローチではない。従って、そうでないことが示されない限り、このセクションにおいて記載するアプローチのいずれもが単にこのセクション内に包含されているという理由によって従来技術としての地位を有するものであると仮定すべきではない。
【０００３】
サンマイクロシステムのジャバ（Ｊａｖａ（登録商標））プログラミング言語等のプログラミング言語は、プログラマーが比較的容易に多くのプラットフォームに対し１つの言語でアプリケーションを開発することを可能とし、相互引用性を確保するよりも、製品の開発に関してより多くの資源を消費することを可能とする。
【０００４】
典型的なジャバインプリメンテーションにおいては、ジャバアプリケーションが実行される場合には、ジャバ仮想マシン（ＪＶＭ）のインスタンスもジャバアプリケーションの実行をサポートするために開始される。ＪＶＭは、ネイティブコードであることが可能であり、ジャババイトコードを解釈し且つ実行する。ジャババイトコードは、人間のプログラマーにより作成され且つ理解されるジャバソースコードから派生される。該バイトコードは中間レベルのコードとして動作する。ジャバプログラムは、ＪＶＭが実行中である任意のプラットフォーム上で実行することが可能である。
【０００５】
時折、ＪＶＭをしてバイトコードを解釈させるよりも、ジャバアプリケーションをネイティブなマシンコードで実行することがより望ましい。このような場合には、バイトコードは、典型的に、ジャストインタイム即ちＪＩＴコンパイラーと呼称されるコンパイラーによりネイティブなマシンコードへコンパイルすることが可能である。そうすることによりＪＶＭは特定のアプリケーションをより速く実行することを可能とする（アプリケーションのジャババイトコードを実行するためにジャバインタプリタを使用するのではなく、アプリケーションは直接的にプロセッサにより実行され、そのことはより高速である）。
【０００６】
ＪＶＭはあるインターバルでバイトコードをネイティブのマシンコードへコンパイルすることをトリガするためのサンプリングメカニズムを包含している。例えば、サンプリングメカニズムは、３０ミリ秒毎にコンパイルをトリガすべく設定することが可能である。然しながら、コンパイルはその他の目的のために使用することが可能なシステム資源を消費する。従って、コンパイルの効果を最小とするために、ＪＶＭは、例えば、一度に５ミリ秒の間コンパイルが発生することが可能であるに過ぎないようにコンパイルに制限を設定することが可能である。このことは、一度に１つのプロセッサスレッドを稼動させるのに充分な資源を具備する単一プロセッサシステムにおいて特に有用である。サンプリングメカニズムを介してのコンパイルを制限することにより、ＪＶＭは、プロセッサスレッドに関して時間を取り過ぎることによりコンパイルがシステム資源を重苦しくすることがないことを保証する。
【０００７】
サンプリングメカニズムの１つの欠点は、コンパイルの静的性質である。コンパイルは特定の時間において行われるべく設定されており且つある期間に制限されている。然しながら、ベンチマーク用のアプリケーション等のプロセッサ集約的プログラムの場合には、実行効率を最大化させるために可及的に多くのメソッドをコンパイルすることが望ましい場合がある。このような場合には、サンプリングに加えて、幾つかの仮想マシンは「ホットメソッド（ｈｏｔ  ｍｅｔｈｏｄ）」（ある時間周期内において頻繁に呼出されるメソッド）の動的コンパイルを使用する。ホットメソッドは、最近実行されたメソッドのリストをトラッキングすることによりコンパイルされる。このリストにおける各メソッドは、マーク付けされ、インタプリタ的な実行の代わりにネイティブな実行のためにそのメソッドをコンパイルさせる。
【０００８】
然しながらホットメソッドの動的コンパイルの欠点のうちの１つは、コンパイラーがシステム資源の不釣り合いな割合を迅速に消費する場合があるということである。このことは、特に、多数のホットメソッドが存在している場合に言えることである。このことは、ビデオ又はオーディオ等の動的出力のレンダリング等のその他のシステム機能に悪影響を与える場合がある。例えば、充分な処理能力が存在しない場合には、ビデオアニメーションのフレームは必要な割合でリフレッシュしない場合があり、アニメーションの観察者をして不所望なスタッター（ｓｔｕｔｔｅｒ）、ポーズ又はブランクイメージを知覚させることとなる。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
上の説明から、静的サンプリングアプローチも、ホットメソッドの動的コンパイルアプローチも、それら自身によって、完全に満足の行く結果を提供するものではないことが明らかである。従って、コンパイルを管理する改善したメカニズムが必要とされている。
【課題を解決するための手段】
【００１０】
本発明の１実施例によれば、動的コンパイルにより発生される動的出力における検知可能なポーズを減少させる方法が提供される。動的出力は、頻繁に変化する出力として定義される。動的出力の例は、モーションビデオ、アニメーション、又はオーディオとすることが可能である。この方法によれば、仮想マシンを具備するシステム上で稼動しているアプリケーションがユーザに対してレンダリングされるべく出力をユーザインターフェースへ送る。アプリケーションがこのような出力を送る場合にはいつでも、該アプリケーションは、このような出力が発生したことを仮想マシンへ通知するメソッドを喚起させる。出力が発生したことのこのような通知は仮想マシンにより、出力の頻度を追従する動的出力モニタへ転送される。
【００１１】
動的出力モニタは出力の頻度をスレッシュホールドに対して比較して、その出力が動的出力であるか否か及び仮想マシン上のコンパイルが中止されるべきか又は継続されるべきかを決定する。その出力頻度がスレッシュホールドを超える場合には、動的出力モニタはグローバル動的出力インジケータの値を変化させてシステムの他のコンポーネントに対してコンパイルを中止することを告げる。特に、グローバル動的出力インジケータは、コンパイルのためにメソッドのマーキングを継続するか否かをシステム上のコンパイラーに告げるために使用される。
【００１２】
システム上のインタプリタが、メソッド処理の制御をコンパイラーへパスすることが命令される場合にコンパイルが行われる。処理制御がコンパイラーへパスされると、コンパイラーはグローバル動的出力インジケータをチェックして、動的出力モニタがコンパイルが中止されることを要求したか否かを決定する。そうである場合には、コンパイラーはコンパイルのためにメソッドをマーキングすることがないことによりコンパイルを中止する。メソッドは、通常、それらが最近解釈されたメソッドのログ内に位置されている「ホットメソッド」である場合に、コンパイルのためにマーク付けされる。最近解釈されたメソッドは、ジャバインタプリタにより最近実行されたメソッドである。コンパイルのためにメソッドのマーキングしないことにより、次回にこれらのメソッドがインタプリタにより取扱われると、インタプリタはそのメソッドの処理制御をコンパイラーへパスすることはなく、従って、コンパイルは実施されない。コンパイルが実施されないので、動的出力をユーザに対してレンダリングするためにより多くの資源が使用可能とされる。このことは、ユーザが動的出力において検知可能なポーズを経験することの蓋然性を減少させる。このように、本発明のこの実施例は、ホットメソッドを動的にコンパイルさせることを可能とする。然しながら、動的出力がレンダリングされている場合には、ホットメソッドのコンパイルが中止されて、出力レンダリングメカニズムに対してそれらが動的出力をレンダリングするのに必要な処理資源を与える。このように動的コンパイルを自動的に制御することによりシステムのその他の部分に悪影響を与えることなしにホットメソッドコンパイルの恩恵を受けることが可能である。
【発明を実施するための最良の形態】
【００１３】
以下の説明において、説明の便宜上、本発明の完全なる理解を与えるために多数の特定の詳細について記載する。然しながら、本発明はこれらの特定な詳細なしで実施することが可能であることは明らかである。その他の場合において、本発明を不必要にぼかすことを回避するために、良く知られた構造及び装置はブロック図で示してある。
【００１４】
構造的概観
図１を参照すると、本発明の１実施例をインプリメントすることが可能なシステム１００のブロック図が示されている。説明の便宜上、本発明の１実施例をシステム１００上のＪＶＭ１０１を参照して説明する。然しながら、注意すべきことであるが本発明はこのような実施例に制限されるものではなく、ＪＶＭによってインプリメントされることが必要なものではない。そうではなく、本明細書に記載したようなプロセスを実施することが可能な任意のシステムを使用することが可能である。システム１００の例は、ハンドヘルドコンピューティング装置、パーソナルデジタルアシスタント、携帯電話、ポータブルコンピュータ、パソコン、又は本明細書に記載したプロセスを実施するための任意のその他のタイプのコンピューティングシステムを包含することが可能である。
【００１５】
図示したように、ＪＶＭ１０１は、就中、インタプリタ１０２及びコンパイラー１０６を包含している。インタプリタ１０２及びコンパイラー１０６は、システム１００上のアプリケーション１５０によりコールされたメソッドを処理するためにＪＶＭ１０１により使用される。インタプリタ１０２は、バイトコードを実行することによりメソッドをインタプリタ的に、即ち解釈しながら実行する。更に、インタプリタ１０２は実行ログ１０４を使用してメソッドの実行をログ、即ち記録する。メソッドを処理している間に、インタプリタ１０２は、又、処理制御がコンパイラー１０６へパスされるべきか否かを決定する役目を有している。
【００１６】
コンパイラー１０６はコンパイルとして知られている処理においてバイトコードをネイティブコードへコンパイルする。コンパイル期間中に、コンパイラー１０６は、１つのメソッドのバイトコードをネイティブ実行可能コードへ翻訳するために喚起、即ち呼出され、該ネイティブな実行可能コードはシステム１００上の１つ又はそれ以上のプロセッサにより実行される。更に、コンパイラー１０６は多数のその他のタスクの役目を担っている。例えば、１実施例によれば、コンパイラー１０６は、又、将来のコンパイルのために実行ログ１０４内におけるメソッドのマーク付けをするか否かを決定する役目を担っている。
【００１７】
実行ログ１０４はインタプリタ１０２によって最近実行されたメソッドのリスティングを包含している。実行ログ１０４内にログされたメソッドは「ホットメソッド」というラベルが付けられ、それらのメソッドは、設定したインターバル期間中にインタプリタ１０２によって特定の頻度を超えて実行されたメソッドである。例えば、１実施例によれば、実行ログ１０４は、各キュー空間が最近解釈されたメソッドを表わす２０個のキュー空間の寸法を有するキューとすることが可能である。そうであるから実行ログ１０４はインタプリタ１０２によって実行された過去２０個のメソッドを追跡するに過ぎない。１つのメソッドがインタプリタ１０２によって実行されると、そのメソッドは実行ログ１０４内にログされる。付加的なメソッドのその後の処理は、元のメソッドを実行ログ１０４からプッシュアウト、即ち押出させる。然しながら、元のメソッドが再度２０個のメソッド内において実行される場合には、それは実行ログ１０４内に再び入り且つホットメソッドとして留まる。
【００１８】
実行ログ１０４内のホットメソッドはコンパイラー１０６によってコンパイル用のマークが付けられる。例えば、それがインタプリタ１０２から処理制御を獲得する場合には、コンパイラー１０６は、通常、コンパイルのために実行ログ１０４内の全てのメソッドにマークを付ける。然しながら、ホットメソッドのコンパイルを検知可能なポーズなしでユーザに対して動的出力をレンダリングさせるのに必要な処理能力とバランスさせるために、コンパイラー１０６は動的出力の存在をモニタする。動的出力は、ビデオ、アニメーション、オーディオ又は頻繁に変化するその他の任意のタイプの出力等の任意のタイプの出力とすることが可能である。動的出力が現在レンダリングされているか否かに基づいて、コンパイラー１０６は、コンパイルのために実行ログ１０４内のメソッドにマークを付けるか否かを決定することによりホットメソッドのコンパイルを動的に制御することが可能である。
【００１９】
ＪＶＭ１０１は、又、サンプリングインタラプト１０８を包含している。サンプリングインタラプトは、コンパイラー１０６によるメソッドのコンパイルをトリガするために使用されるメカニズムである。これを達成するために、１実施例においては、サンプリングインタラプト１０８は、メソッドの実行期間中にインタプリタ１０２がチェックするグローバル変数に対する値を割当てる。グローバル変数の値は、サンプリングトリガがフラッグされているか否かを表示するために使用される。サンプリングトリガは、インタプリタ１０２が、処理スレッドの制御がコンパイルのためにコンパイラー１０６に与えられることが必要であることを認識することを可能とする。インタプリタ１０２がそのメソッドを処理即ち解釈している間に、インタプリタ１０２は、サンプリングインタラプト１０８がグローバル変数に対して設定された値に基づいてサンプリングトリガをフラッグしたか否かを決定する。サンプリングトリガがフラッグされている場合、即ちフラッグが立てられている場合には、インタプリタ１０２はプロセッサスレッドの制御をコンパイラー１０６へ渡す。
【００２０】
同様に、実行ログ１０４内のメソッドをマーキングすることによりコンパイラー１０６はサンプリングインタラプト１０８によって使用される同一のグローバル変数をして、処理制御をコンパイラー１０６へパスするか否かをインタプリタ１０２に知らせる。従って、次回にインタプリタ１０２がマークされているメソッドを実行すると、インタプリタ１０２は、サンプリングトリガがフラッグされており且つ処理制御をコンパイラー１０６へパスすることを認識する。コンパイラー１０６が処理制御を有すると、コンパイラー１０６は、実行ログ１０４内のメソッドにマークを付けるか否かを決定する。実行ログ１０４内のメソッドをマークを付けるか否かを決定するために、コンパイラー１０６は、最初に、動的出力がレンダリング中であるか否かを決定する。このことを行うために、ＪＶＭ１０１は、アプリケーション１５０と通信することにより動的出力がレンダリング中であるか否かを認識せねばならない。
【００２１】
アプリケーション１５０はシステム１００上で稼動し且つＪＶＭ１０１により実行のためのメソッドをコールする。１実施例によれば、アプリケーション１５０がマルチメディアの提示期間中にディスプレイ又はオーディオにおける変化等のユーザインターフェースに対しての出力をレンダリングする場合には、アプリケーション１５０はその出力をＪＶＭ１０１に知らせるために出力インジケータを喚起させる。例えば、アプリケーション１５０がシステム１００上で稼動しているグラフィカルゲームアプリケーションであると仮定する。アプリケーション１５０は、そのゲームのビジュアル出力が１つのフレームから次のフレームへ変化したことを検知し且つ出力が現在レンダリングされていることをＪＶＭ１０１のコンポーネントに告げるために使用される出力インジケータをコールする。１実施例によれば、その出力インジケータがコールされると、ＪＶＭ１０１は動的出力モニタ１１０を使用して出力表示を処理する。
【００２２】
動的出力モニタ１１０はアプリケーション１５０による出力インジケータのコールをモニタする役目を担っている。例えば、アプリケーション１５０が出力インジケータをコールする度に、動的出力モニタ１１０はクロック１１２を使用してその発生をログ、即ち記録し、出力がアプリケーション１５０から報告される頻度を追従する。動的出力モニタ１１０が、出力頻度が特定のスレッシュホールド、例えば１分間におけるコールのある数を超えたことを決定する場合には、動的出力モニタ１１０はグローバル変数をして、表示中の出力が動的出力であることを表わすように設定させる。
【００２３】
動的出力モニタ１１０は全てのアプリケーションによる出力インジケータのコールを継続してモニタする。出力インジケータのコール数が設定したスレッシュホールドより低くなると、動的出力モニタ１１０は、表示中の出力が動的出力ではないことを表わすべくグローバル変数を変化させることが可能である。
【００２４】
グローバル変数を使用して、コンパイラー１０６は、コンパイルのために実行ログ１０４内のメソッドにマークを付けるか否かを決定することが可能であり、従って動的出力のレンダリング期間中にメソッドのコンパイルを動的に制御することが可能である。
【００２５】
機能的概観
動的出力に対するモニタリング
次に、図２を参照すると、本発明の１実施例に基づいて、動的出力モニタ１１０及び任意のアプリケーション１５０の動作を例示したフローチャートが示されている。ステップ２０２において、アプリケーション１５０がシステム１００のユーザインターフェースへ出力を送ると、アプリケーション１５０は出力インジケータをコールする。ユーザインターフェースへ送られた出力は、例えば、ディスプレイスクリーン上のピクセルの変化又は新たな組のオーディオデータとすることが可能である。従って、１実施例によれば、ピクセル又はオーディオデータにおける変化に応答して、アプリケーション１５０はＪＶＭ１０１のその出力を知らせるために出力インジケータを喚起する役目を担っている。１実施例によれば、該出力インジケータは、ＪＶＭ１０１への出力への存在を表わすカスタムジャバクラスのインスタンスとすることが可能である。
【００２６】
アプリケーション１５０が出力インジケータをコールすると、ＪＶＭ１０１はその表示を動的出力モニタ１１０へ転送する。従って、ステップ２０４において、動的出力モニタ１１０は出力インジケータのコールをモニタする。クロック１１２を使用して、動的出力モニタ１００は、設定した量の時間内における報告された出力の頻度を決定する。１実施例によれば、動的出力モニタ１１０は、特定の量の時間におけるメソッドコールの量を表わす比を作成することにより出力インジケータコールを積極的にモニタする。例えば、動的出力モニタ１１０は毎秒出力インジケータが何回コールされたかを決定するために毎秒毎に比の値を作成することが可能である。従って、出力インジケータが１秒内に、例えば、４回コールされると、報告される比は４である。
【００２７】
この比を使用して、動的出力モニタ１１０は、動的出力が現在レンダリングされているか否かを決定するために、その比の値をスレッシュホールド比と比較する。スレッシュホールド比はコンパイルが中断される前にある量の時間当たりの出力の最大限許容される検知数を表わしている。スレッシュホールド比が高ければ高い程、コンパイルが発生することが許容される蓋然性は一層高い。同様に、低いスレッシュホールド比は、動的出力のレンダリング期間中にコンパイルがスタッター又はポーズを発生させる蓋然性がより少ないことを確保する。
【００２８】
１実施例によれば、スレッシュホールド比の値は、システム１００、ＪＶＭ１０１又はアプリケーション１５０等の任意のその他のコンポーネントにより自動的に設定し且つ変化させることが可能である。例えば、システム１００の任意のコンポーネントが、任意の与えられた時刻において、効率の目的のためのメソッドのコンパイルが、動的出力における何等かのポーズ又はスタッターの影響に優るものであることを決定することが可能である。従って、スレッシュホールド比の値が元々２である場合には、システム１００の１つのコンポーネントはその値は５へ増加させることが可能である。代替的に、別の実施例においては、スレッシュホールド比はシステム１００のユーザにより手動的に設定することが可能である。
【００２９】
動的出力モニタ１１０は、動的出力が上述した比をスレッシュホールド比と比較することによりレンダリングされているか否かを決定するものであるが、本発明はこのような実施例に制限されるものではなく、動的出力モニタ１１０は、アプリケーション１５０からの出力インジケータのコールを追跡する任意のその他のメソッドにより動的出力がレンダリングされているか否かを決定することが可能であることに注意すべきである。
【００３０】
再度図２を参照すると、ステップ２０６において、動的出力モニタ１１０は、上述した処理を使用して動的出力がレンダリングされているか否かを決定する。このような決定を行った後に、１実施例によれば、動的出力モニタ１１０はグローバル変数の値を変化させる。該変数は「グローバル」変数であるとして定義されるが、その理由は、システム１００の任意のコンポーネント又はオブジェクトへアクセス可能だからである。該グローバル変数は、動的出力の存在をシステム１００上の全てのコンポーネント又はオブジェクトへ通信するために使用される。このグローバル変数は、以後、「グローバル動的出力インジケータ」と呼称される。従って、動的出力がレンダリング中であるか否かを決定した後に、動的出力モニタ１１０は夫々ステップ２０７又は２０８において、グローバル動的出力インジケータに対し０又は１の値を割当てる。
【００３１】
該スレッシュホールド比の値が出力インジケータコールの頻度よりも一層高い場合には、ステップ２０７において、グローバルダイナミック出力インジケータの値は０へ設定される。この場合において、システム１００のその他のコンポーネントは、グローバル動的出力インジケータが０に設定される場合には、動的出力がレンダリングされていないことを認識する形態とさせることが可能である。
【００３２】
然しながら、出力インジケータコールの頻度がスレッシュホールド比より一層高い場合には、ステップ２０８において、グローバル動的出力インジケータの値は１へ設定され且つシステム１００のコンポーネントは、このような値が、動的出力が現在レンダリングされていることを表わすことを認識する形態とさせることが可能である。
【００３３】
動的出力モニタ１１０はグローバル動的出力インジケータを積極的に０又は１の値へ設定するものであるから、動的出力がレンダリングされているか否かに関して、システム１００及びＪＶＭ１０１のコンポーネントは継続的にアップデートされる。更に、グローバル動的出力インジケータは０または１の値に設定することが可能であることについて説明したが、本発明はこのような実施例に制限されるものではなく、且つグローバル動的出力インジケータは任意の値に設定することが可能である。例えば、その他の実施例においては、グローバル動的出力インジケータは、動的出力のスペクトルを表わす任意の数の値に設定することが可能である。特に、０の値は、動的出力が現在レンダリングされていないことを表わすことが可能であり、一方５の値は、動的出力が非常に頻繁にレンダリングされることを表わすことが可能である。更に、０と５との間の任意の値は、動的出力の異なる頻度を表わすことが可能である。グローバル動的出力インジケータの値を使用して、１実施例によれば、動的出力の頻度に従って動的出力期間中に動的コンパイルを可変的に制御することが可能である。
【００３４】
メソッドのインタプリタ的処理
動的出力モニタ１１０が動的出力に対してモニタしている間に、アプリケーション１５０はＪＶＭ１０１による実行のためのメソッドを喚起する。例示的な目的として、システム１００上で稼動しているアプリケーション１５０によりメソッドｎが最近コールされたものと仮定する。次に、図３を参照すると、インタプリタ１０２の動作を例示したフローチャートが本発明の１実施例に基づいて示されている。メソッドｎがコールされると、ＪＶＭ１０１は該メソッドをインタプリタ的に実行するためにインタプリタ１０２へパスする。ステップ３０２において、インタプリタ１０２はバイトコードでメソッドｎをインタプリタ的に実行する。
【００３５】
インタプリタ的実行期間中に、又は、代替的に、任意のその他の時間において、ステップ３０４において、メソッドｎのエントリが実行ログ１０４内に配置される。メソッドｎのエントリが実行ログ１０４内になされるので、メソッドｎは、通常、処理制御がコンパイラー１０６へパスされる場合にコンパイル用のマークが付けられる。以下に説明するように、コンパイラー１０６は、動的出力がレンダリングされるか否かに依存して、実行ログ１０４内のいずれかのメソッドに対してマーキングを行う役目を担っている。メソッドｎはコンパイル用のマークが付けられるので、次回にメソッドｎがインタプリタ的に実行される場合に、インタプリタ１０２は処理制御をコンパイラー１０６へパスし、本明細書に記載した如き処理を使用してメソッドｎをコンパイルさせる。
【００３６】
メソッドｎのログを実行ログ１０４内に配置させた後に、ステップ３０６において、インタプリタ１０２は、サンプリングトリガがフラッグされているか否かを決定する。サンプリングトリガは、インタプリタ１０２が処理制御をコンパイラー１０６へ渡すべきであるか否かを表わすために使用される。１実施例によれば、サンプリングトリガは、２つの態様でフラッグすることが可能であり、即ち（１）サンプリングメカニズムがトリガされているか、又は（２）コンパイラー１０６によるコンパイルのためにマークが付けられているメソッドが現在インタプリタ１０２によってインタプリタ的に実行されていることである。これら２つの態様の間の唯一の差は、第一の態様のサンプリングメカニズムは、サンプリングトリガを特定のインターバルでフラッグさせ、一方２番目の態様におけるホットメソッドは、どのメソッドがコンパイラー１０６によるコンパイルのためのマークが付けられているかに依存して、任意の与えられた時間においてサンプリングトリガをフラッグさせることが可能である。
【００３７】
１実施例によれば、サンプリングトリガがフラッグされているか否かを決定するために、インタプリタ１０２は、以後「グローバルコンパイル変数」と呼称する別のグローバル変数の値をチェックする。グローバルコンパイル変数は、処理制御をコンパイラー１０６へ渡すか否かをインタプリタ１０２へ通知する。グローバルコンパイル変数が１の値を有している場合には、サンプリングトリガがフラッグされており、且つインタプリタ１０２は処理制御をコンパイラー１０６へ渡す。そうでない場合には、グローバルコンパイル変数は０のままである。グローバルコンパイル変数の値が０である場合には、インタプリタ１０２はメソッドｎをインタプリタ的に実行することを完了し、且つステップ３０８において、次に喚起されるメソッドｎ＋１をインタプリタ的に実行する。
【００３８】
然しながら、ステップ３０６において、コンパイル変数の値が１であるのでサンプリングトリガがフラッグされていることを決定する場合には、ステップ３０８において、インタプリタ１０２は処理制御をコンパイラー１０６へ渡す。
【００３９】
メソッドの動的コンパイル
１実施例によれば、システム１００は単一処理スレッドシステムであり、そのことは、システム１００のどのコンポーネントも処理制御を獲得しない限り何等の動作を実施することはないことを意味している。従って、コンパイラー１０６は、それが上述した如くインタプリタ１０２から処理制御を受取るまで何等の動作を実施することはない。コンパイラー１０６が処理制御を受取ると、それは処理制御をインタプリタ１０２へ返す前に本明細書に記載するような多数の動作を実施する。
【００４０】
次に、図４を参照すると、本発明の１実施例に基づいてコンパイラー１０６の動作を例示したフローチャートが示されている。コンパイラー１０６が動作中である場合、即ち処理制御を獲得している場合には、ステップ４０２において、コンパイラーは上述した如く動的出力モニタ１１０によって設定されたグローバル動的出力変数の値をチェックする。従って、１実施例によれば、ステップ４０４において、コンパイラー１０６は、表示中の出力が動的出力であるか否かをＪＶＭ１０１によって設定されたグローバルメディア変数の値を検査することにより決定する。例えば、グローバル動的出力変数が０の値に設定された場合には、コンパイラー１０６は、動的出力が現在発生されていないことを決定し、且つステップ４０６において、コンパイラー１０６の通常動作において為されるように、コンパイル用に実行ログ１０４内の各メソッドのマーク付けを継続する。
【００４１】
１実施例によれば、実行ログ１０４内のメソッドのマーキング即ちマーク付けは、そのメソッドが再度コールされる場合にサンプリングトリガをフラッグさせる。１実施例において、このことは、変数宣言を表わす１つ又はそれ以上の命令をコールされているメソッドのインスタンス内に挿入することにより達成される。次回にそのメソッドがＪＶＭ１０１によってコールされると、その変数宣言はその特定の変数をして値を変化させる。
【００４２】
例えば、１実施例において、メソッドｎがコンパイル用にマーク付けされていた場合に、コンパイラー１０６は次回にメソッドｎがコールされる場合に、グローバルコンパイル変数に対する変数宣言を表わす命令を１の値へ設定させる。従って、図３に示した処理に従ってインタプリタ１０２がメソッドｎを実行している場合に、インタプリタ１０２は、グローバルコンパイル変数が１の値に設定されているのでサンプリングトリガがフラッグされていることを決定する（図３におけるステップ３０６参照）。それに応答して、インタプリタ１０２は処理制御をコンパイラー１０６へパスする。このことは、更に、コンパイラーをしてメソッドｎのコンパイル動作を開始させる。
【００４３】
然しながら、動的出力が現在レンダリング中である場合には、コンパイラー１０６は実行ログ１０４内のいずれのメソッドにマーク付けを行うものではなく、従って処理制御はこれらのメソッドの実行期間中にコンパイラー１０６へ戻ることはない。再度ステップ４０４を参照すると、コンパイラー１０６が、グローバル動的出力インジケータの値が１に設定されているので動的出力がレンダリング中であることを決定すると、コンパイラー１０６はステップ４０６をスキップし且つ直接的にステップ４０８へ進行する。従って、動的出力がレンダリング中であることが決定される場合には、コンパイラー１０６は実行ログ１０４内のいずれのメソッドもマーク付けするものではなく、そのことは、これらのメソッドが喚起される場合にはグローバルコンパイル変数は１へ設定されることがないことを意味している。インタプリタ１０２がこれらのメソッドの処理を回避する場合には、コンパイルトリガがフラッグされていないことを決定する。
【００４４】
ステップ４０８において、システム１００上の１つ又はそれ以上のプロセッサによるネイティブ実行のために、メソッドｎのバイトコード命令をネイティブコードへ翻訳することによるメソッドｎのコンパイルをコンパイラー１０６が開始する。代替的に、現在のメソッドｎをコンパイルする代わりに、コンパイラー１０６は、前のメソッドに関するコンパイルを再開することが可能である。例えば、１実施例によれば、ＪＶＭ１０１はコンパイルが行われることが許容される時間の量を５ミリ秒に制限する。
【００４５】
最大コンパイル時間が５ミリ秒であると仮定する。コンパイラー１０６が以前にメソッドｎ−１をコンパイルしており且つ５ミリ秒でそのコンパイルを完了することができなかった場合には、コンパイラー１０６はメソッドｎ−１に対するコンパイルの経過をマーク付けし且つ処理制御をインタプリタ１０２へリターンする。然しながら、次回にそれが処理制御を得ると、コンパイラー１０６はそれがコンパイルを中断した点においてメソッドｎ−１のコンパイルを再開することが可能である。１実施例によれば、部分的にコンパイルされたメソッドのコンパイルは未だに全くコンパイルされていないメソッドに対して優先性を持っている。従って、例えコンパイラーがメソッドｎの実行期間中に処理スレッドの制御を得たとしても、メソッドｎ−１が最初にコンパイルされ、且つコンパイラー１０６はメソッドｎをコンパイルのために次に並ぶべく待ち合わせさせることが可能である。
【００４６】
代替的にメソッドｎ−１が完全にコンパイルされている場合には、コンパイラー１０６は、今やネイティブコードであるメソッドｎ−１を、そのメソッドがＪＶＭ１０１において次にコールされる場合に実行させ、且つ新たなメソッド又は部分的にコンパイルされているメソッドのコンパイルを継続して行う。
【００４７】
ステップ４１０において、コンパイラー１０６はグローバルコンパイル変数を０へリセットする。インタプリタ１０２が、サンプリングメカニズムによって又は何等かのメソッドｎがコンパイルのためにマーク付けされているためにコンパイラー１０６へ制御をパスすることを確保するために、コンパイラー１０６はコンパイル変数をリセットさせる。従って、グローバルコンパイル変数が０へリセットされるので、（１）サンプリングトリガがフラッグされているか、又は（２）メソッドｎ＋１がコンパイルのためにコンパイラー１０６によってマーク付けされており、従ってグローバルコンパイル変数をして再度１の値へ設定させていない限り、次のメソッドｎ＋１の実行時にインタプリタ１０２は処理制御をコンパイラー１０６へパスすることはない。
【００４８】
更に、１実施例によれば、コンパイラーがＪＶＭ１０１によって設定されているその最大時間制限に到達すると、コンパイラー１０６はグローバルコンパイル変数を０へリセットする。例えば、コンパイルは５ミリ秒の最大値に制限される場合がある。従って処理制御を獲得してから５ミリ秒が経過すると、コンパイラー１０６はステップ４１０へ進行し、コンパイル変数を０へリセットし且つ処理制御をステップ４１２においてインタプリタ１０２へリターンする。
【００４９】
図２乃至４にわたって説明した処理はＪＶＭ１０１及びシステム１００上のいずれかのアプリケーション１５０の動作期間中連続的である。グローバル動的出力インジケータの使用は、アプリケーション１５０により処理中の動的出力の量に従ってコンパイルを動的に抑制することを可能とする。このような処理の結果を更に図５及び図６によって例示する。
【００５０】
図５Ａを参照すると、１実施例に基づくサンプリングメカニズムの動作期間中の処理スレッドを例示したブロック図が示されている。図５はサンプリングメカニズムの動作期間中の処理タイムラインに基づく処理スレッド５００ａを示している。１実施例によれば、サンプリングメカニズムは、３０ｍｓ等の設定したインターバルにおいてメソッドのコンパイルをトリガする形態とされている。従って、３０ｍｓ毎に、インタプリタ１０２は処理スレッド５００Ａの制御をコンパイラー１０６へパスする。然しながら、サンプリングメカニズムは、システム資源を節約するためにコンパイルの量を制限する形態とさせることが可能である。従って、１実施例によれば、コンパイルは任意の与えられた時間において５ｍｓへ制限される。このように、制御が３０ｍｓにおいてコンパイラー１０６へパスされると、コンパイルは３５ｍｓまで実施される。この点において、コンパイルは中断され且つスレッド５００Ａの制御はインタプリタ１０２へリターンされる。
【００５１】
図５Ｂは、１実施例に基づくサンプリングメカニズム及びホットメソッドの動的コンパイルの両方の動作期間中の処理スレッドを例示したブロック図である。図５Ｂにおいて、処理スレッド５００Ｂは、ホットメソッドのコンパイル期間中における処理スレッドを表わしている。スレッド５００Ａのように、サンプリングメカニズムによるコンパイルは３０ｍｓと３５ｍｓとの間において行われる。然しながら、スレッド５００Ａと異なり、コンパイルは３５ｍｓと６０ｍｓとの間の時間期間中に中断されることはなく、その理由は、コンパイラー１０６はこの時間期間中にホットメソッドのコンパイルをトリガすることが可能だからである。例えば、スレッド５００Ｂ上において、ポイントＡ及びＢは実行ログ１０４においてマークが付けられているホットメソッドのコンパイルを表わしている。更に、１実施例によれば、ホットメソッドの動的コンパイルに対して設定された時間は存在しない。従って、実行ログにおいてマークが付けられているメソッドのコンパイルは、スレッド５００Ｂ上で大きな量の時間を占めることが可能である。例えば、ポイントＡ，Ｂ，Ｃ，Ｄは、６０ｍｓと９０ｍｓとの間の時間の大きな大部分を占めている。スレッド５００Ｂ上のメソッドのコンパイルに多くの時間が消費されるので、より多くのシステム資源がコンパイルするために使用され且つ動的出力のレンダリングが影響を受ける場合がある。充分なシステム資源が動的出力に対して使用されることがないので、動的出力のレンダリングにおいてユーザはポーズ又はスタッターを検知する場合がある。
【００５２】
然しながら、上述した如く、動的コンパイル期間中に検知可能なポーズを減少させる方法は、コンパイラー１０６が実行ログ１０４内のメソッドを選択的にマーク付けすることを可能とする。例えば、コンパイラー１０６が実行ログ１０４内のいずれのメソッドにもマーク付けすることがない場合には、処理制御は上述した如くコンパイラー１０６へパスすることはないので３５ｍｓと６０ｍｓとの間でコンパイルが行われることはない。その代わりに、コンパイルは、ほぼ５００Ａのように、３０ｍｓと３５ｍｓとの間におけるサンプリングメカニズムに制限される。
【００５３】
このように、本発明は、処理スレッド５００Ａ及び処理スレッド５００Ｂにおいて特徴付けられる場合の間の制御を可能とする。動的出力がレンダリングされているか否かに依存して、コンパイラー１０６は検知可能なポーズを減少させるためにメソッドのコンパイルを動的に制御することが可能である。
【００５４】
ハードウエア概観
図６は本発明の１実施例をインプリメントすることが可能なコンピュータシステム６００を例示したブロック図である。コンピュータシステム６００は、情報交換を容易化させるためのバス７０２、及び情報を処理するためにバス６０２と結合されている１個又はそれ以上のプロセッサ６０４を包含している。コンピュータシステム６００は、又、ランダムアクセスメモリ（ＲＡＭ）又はその他の動的記憶装置等の情報を記憶し且つプロセッサ６０４により実行されるべき命令を記憶するためにバス６０２へ結合されているメインメモリ６０６を包含している。メインメモリ６０６は、又、プロセッサ６０４による命令の実行期間中に一次的な変数又はその他の中間情報を記憶するために記憶することが可能である。コンピュータシステム６００は、更に、静的情報及びプロセッサ６０４に対する命令を記憶するためにバス６０２へ結合されているリードオンリメモリ（ＲＯＭ）７０８又はその他の静的記憶装置を包含することが可能である。磁気ディスク又は光学ディスク等の記憶装置６１０が設けられており且つ情報及び命令を格納するためにバス６０２へ結合されている。
【００５５】
コンピュータシステム６００は、コンピュータユーザに対し情報を表示するためにバス６０２を介してディスプレイ６１２へ結合させることが可能である。英文字及びその他のキーを包含する入力装置６１４が、情報及びコマンド選択をプロセッサ６０４へ通信するためにバス６０２へ結合されている。別のタイプのユーザ入力装置は、方向情報及びコマンド選択をプロセッサ６０４へ通信し且つディスプレイ６１２上のカーソルの移動を制御するために、マウス、トラックボール、又はカーソル方向器等のカーソル制御６１６である。この入力装置は、典型的に、２つの軸、即ち第一軸（例えば、ｘ）及び第二軸（例えば、ｙ）において２つの自由度を有しており、そのことは、該装置が面内における位置を特定することを可能とする。
【００５６】
コンピュータシステム６００において、バス６０２は、種々のコンポーネント間で情報、信号、データ等を交換させることを可能とする任意のメカニズム及び／又は媒体とすることが可能である。例えば、バス６０２は、電気的信号を担持する１組の導体とすることが可能である。バス６０２は、又、１つ又はそれ以上のコンポーネント間でワイヤレス信号を担持するワイヤレス媒体（例えば、空気）とすることも可能である。バス６０２は、更に、１つ又はそれ以上のコンポーネントを接続するネットワーク接続とすることが可能である。種々のコンポーネント間で情報、信号、データ等を交換することを可能とする任意のメカニズム及び／又は媒体をバス６０２として使用することが可能である。
【００５７】
バス６０２は、又、これらのメカニズム／媒体の結合とすることが可能である。例えば、プロセッサ６０４は、記憶装置６１０とワイヤレス的に通信することが可能である。このような場合には、バス６０２は、プロセッサ６０４及び記憶装置６１０の観点からは空気等のワイヤレス媒体である。更に、プロセッサ６０４は容量的にＲＯＭ６０８と通信することが可能である。更に、プロセッサ６０４は、ネットワーク接続を介してメインメモリ６０６と通信することが可能である。この場合には、バス６０２はネットワーク接続である。更に、プロセッサ６０４は、１組の導体を介してディスプレイ６１２と通信することが可能である。この場合には、バス６０２は１組の導体である。従って、種々のコンポーネントがどのようにして互いに通信するかに依存して、バス６０２は異なる形態を取ることが可能である。図６に示したように、バス６２０は、種々のコンポーネント間で情報、信号、データ等を交換することを可能とする全てのメカニズム及び／又は媒体を機能的に表わしている。
【００５８】
本発明は本明細書に記載した技術をインプリメントするためのコンピュータシステム６００の使用に関連している。本発明の１実施例によれば、これらの事実は、メインメモリ６０６内に包含している１つ又はそれ以上の命令の１つ又はそれ以上のシーケンスを実行するプロセッサ６０４に応答してコンピュータシステム６００により実施される。このような命令は記憶装置６１０等の別の機械読取可能な媒体からメインメモリ６０６内に読み込むことが可能である。メインメモリ６０６内に包含される命令のシーケンスの実行は、プロセッサ６０４をして本明細書に記載した処理ステップを実施させる。代替的実施例においては、本発明をインプリメントするために、ソフトウエア命令の代わりに又はそれと結合してハードワイヤード回路を使用することが可能である。従って、本発明の実施例はハードウエア回路とソフトウエアとの何等かの特定の組合わせに制限されるものではない。
【００５９】
本明細書に使用されているように「機械読取可能な媒体」という用語は、マシンをして特定の態様で動作させるデータを供給することに参画する任意の媒体のことを意味している。コンピュータシステム６００を使用してインプリメントされる実施例においては、種々の機械読取可能な媒体が、例えば、実行のために命令をプロセッサ６０４へ供給することに関与する。このような媒体は、これらに制限されるものではないが、非揮発性媒体、揮発性媒体、及び伝送媒体を包含する多くの形態を取ることが可能である。非揮発性媒体は、例えば、記憶装置６１０等の光学的又は磁気的ディスクを包含している。揮発性媒体は、メインメモリ６０６等のダイナミックメモリを包含している。伝送媒体は、同軸ケーブル、銅ワイヤ及びオプティカルファイバー、バス６０２を含むワイヤを包含している。伝送媒体は、又、無線及び赤外線データ通信期間中に発生されるもののような音響的又は光波の形態を取ることが可能である。
【００６０】
機械読取可能な媒体の一般的な形態は、例えば、フロッピィディスク、フレキシブルディスク、ハードディスク、磁気テープ、又は任意のその他の磁気媒体、ＣＤ−ＲＯＭ、ＤＶＤ、又は任意のその他の光学的記憶媒体、パンチカード、ペーパーテープ、孔のパターンを具備する任意のその他の物理的媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、フラッシュＥＰＲＯＭ、任意のその他のメモリチップ又はカートリッジ、以後記載するような搬送波、又はそれからコンピュータが読取ることが可能な任意のその他の媒体を包含している。
【００６１】
機械読取可能な媒体の種々の形態は、実行のために１つ又はそれ以上の命令の１つ又はそれ以上のシーケンスをプロセッサ６０４へ担持する場合に関連する場合がある。例えば、命令は、初期的に、遠隔コンピュータの磁気ディスク上に担持されている場合がある。その遠隔コンピュータは該命令をそのダイナミックメモリ内にロードさせ且つ該命令をモデムを使用する電話線を介して送信することが可能である。コンピュータシステム６００に対して局所的なモデムは電話線上のデータを受取り且つ赤外線送信器を使用してそのデータを赤外線信号へ変換することが可能である。赤外線検知器は赤外線信号内に担持されるデータを受取ることが可能であり且つ適宜の回路がそのデータをバス６０２上に配置させることが可能である。バス６０２はメインメモリ６０６へデータを担持し、それから、プロセッサ６０４が命令を検索し且つ実行する。メインメモリ６０６によって受取られる命令は、オプションとして、プロセッサ６０４による実行の前又は後のいずれかにおいて記憶装置６１０に記憶させることが可能である。
【００６２】
コンピュータシステム６００は、又、バス６０２へ結合されている通信インターフェース６１８を包含している。通信インターフェース６１８はローカルネットワーク６２２へ接続されているネットワークリンク６２０に対し二方向データ通信結合を提供する。例えば、通信インターフェース６１８は、統合サービスデジタルネットワーク（ＩＳＤＮ）カード又は対応するタイプの電話線に対してデータ通信接続を提供するモデムとすることが可能である。別の例として、通信インターフェース６１８は互換性のあるＬＡＮに対しデータ通信接続を提供するためのローカルエリアネットワーク（ＬＡＮ）カードとすることが可能である。ワイヤレスリンクを実現することも可能である。いずれかのこのような実現例において、通信インターフェース６１８は種々のタイプの情報を表わすデジタルデータストリームを担持する電気的、電磁的又は光学的信号を送信し且つ受信する。
【００６３】
ネットワークリンク６２０は、典型的に、１つ又はそれ以上のネットワークを介して他のデータ装置に対してのデータ通信を提供する。例えば、ネットワークリンク６２０はローカルネットワーク６２２を介してホストコンピュータ６２４に対する又はインターネットサービスプロバイダー（ＩＳＰ）７２６により運用されるデータ装置への接続を提供することが可能である。ＩＳＰ７２６は現在「インターネット」６２８として一般的に呼称されているワールドワイドパケットデータ通信ネットワークを介してのデータ通信サービスを提供する。ローカルネットワーク６２２及びインターネット６２８は、両方共、デジタルデータストリームを担持する電気的、電磁的又は光学的信号を使用する。種々のネットワークを介しての信号及びネットワークリンク６２０上及びコンピュータシステム６００へ及びそれからのデジタルデータを担持する通信インターフェース６１８を介しての信号は情報を輸送する搬送波の例示的形態である。
【００６４】
コンピュータシステム６００は、ネットワーク、ネットワークリンク６２０及び通信インターフェース６１８を介して、メッセージを送信し且つプログラムコードを含むデータを受信することが可能である。インターネットの例においては、サーバー６３０はインターネット６２８、ＩＳＰ６２６、ローカルネットワーク６２２及び通信インターフェース６１８を介してアプリケーションプログラム用の要求されたコードを送信する場合がある。
【００６５】
受信したコードはそれが受信されるとプロセッサ６０４により実行されることが可能であり、及び／又は後に実行するために記憶装置６１０又はその他の非揮発性記憶装置内に記憶させることが可能である。このように、コンピュータシステム６００は搬送波の形態でアプリケーションコードを得ることが可能である。
【００６６】
以上、本発明の具体的実施の態様について詳細に説明したが、本発明は、これら具体例にのみ制限されるべきものではなく、本発明の技術的範囲を逸脱することなしに種々の変形が可能であることは勿論である。
【図面の簡単な説明】
【００６７】
【図１】本発明の１実施例をインプリメントすることが可能なシステムの概略を示したブロック図。
【図２】本発明の１実施例に基づく動的出力モニタの動作を例示したフローチャート。
【図３】本発明の１実施例に基づくインタプリタの動作を例示したフローチャート。
【図４】本発明の１実施例に基づいてコンパイラーの動作を例示したフローチャート。
【図５】（Ａ）は１実施例に基づくサンプリングメカニズムの動作期間中の処理スレッドを例示した概略図、（Ｂ）は１実施例に基づくホットメソッドの動的コンパイル期間中の処理スレッドを例示した概略図。
【図６】本発明の１実施例を実現することが可能な汎用コンピュータシステムを示したブロック図。
【符号の説明】
【００６８】
１００  システム
１０１  ＪＶＭ
１０２  インタプリタ
１０４  実行ログ
１０６  コンパイラー
１０８  サンプリングインタラプト
１１０  動的出力モニタ
１１２  クロック
１５０  アプリケーション
【図１】
0005324050.tif 000002
【図２】
0005324050.tif 000003
【図３】
0005324050.tif 000004
【図４】
0005324050.tif 000005
【図５】
0005324050.tif 000006
【図６】
0005324050.tif 000007