JP2013257916A - バーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法と装置 - Google Patents
バーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法と装置 Download PDFInfo
- Publication number
- JP2013257916A JP2013257916A JP2013208227A JP2013208227A JP2013257916A JP 2013257916 A JP2013257916 A JP 2013257916A JP 2013208227 A JP2013208227 A JP 2013208227A JP 2013208227 A JP2013208227 A JP 2013208227A JP 2013257916 A JP2013257916 A JP 2013257916A
- Authority
- JP
- Japan
- Prior art keywords
- compiled
- compiled method
- flag
- computer
- executed
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
- G06F9/4552—Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/865—Monitoring of software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/88—Monitoring involving counting
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Devices For Executing Special Programs (AREA)
- Debugging And Monitoring (AREA)
Abstract
【課題】バーチャルマシン内でコンパイルされたメソッドの実行の頻度を決定することを容易にするシステムを提供すること。
【解決手段】システムは、コンパイルされたメソッドが実行されるとき、決定することによって始まる。その場合、システムは、コンパイルされたメソッドに対応するフラグをセットすることにより、コンパイルされたメソッドが実行していることを示す。システムは、フラグを定期的にスキャンし、フラグがセットされているとき、対応するカウンターの値を増加させて、それから、フラグをリセットする。最終的に、システムは、カウンターの値を解析することにより、コンパイルされたメソッド実行の頻度を決定する。
【選択図】図3
【解決手段】システムは、コンパイルされたメソッドが実行されるとき、決定することによって始まる。その場合、システムは、コンパイルされたメソッドに対応するフラグをセットすることにより、コンパイルされたメソッドが実行していることを示す。システムは、フラグを定期的にスキャンし、フラグがセットされているとき、対応するカウンターの値を増加させて、それから、フラグをリセットする。最終的に、システムは、カウンターの値を解析することにより、コンパイルされたメソッド実行の頻度を決定する。
【選択図】図3
Description
(関連出願)
本出願は、ここで、35U.S.C.§119の下で、U.S.特許仮出願60/550,802、2004年3月5日出願、「Code Cache Eviction Ranking Based on Execution Interval Summarization」という名称、発明者Bernd J.W.MathiskeとOleg A.Pliss(代理人整理番号 SUN04−0481PSP)の優先権主張をする。
本出願は、ここで、35U.S.C.§119の下で、U.S.特許仮出願60/550,802、2004年3月5日出願、「Code Cache Eviction Ranking Based on Execution Interval Summarization」という名称、発明者Bernd J.W.MathiskeとOleg A.Pliss(代理人整理番号 SUN04−0481PSP)の優先権主張をする。
本発明は、コンピュータシステム内におけるバーチャルマシンに関する。特に、本発明は、バーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法と装置に関する。
(関連技術)
Java 2プラットフォーム、Micro Edition(J2ME(登録商標))は、無線デバイスの領域において非常に人気が高くなった。Motorola、Nokia、NTT DoCoMo、RIM、Siemens、および無線デバイス産業における他に多く主要な企業は、最近、非常に大容量のJ2MEの使用可能なデバイスを出荷し始めた。2003年だけで、2億台を超えるJ2MEの使用可能なモバイルフォンが出荷されたと推定される。
Java 2プラットフォーム、Micro Edition(J2ME(登録商標))は、無線デバイスの領域において非常に人気が高くなった。Motorola、Nokia、NTT DoCoMo、RIM、Siemens、および無線デバイス産業における他に多く主要な企業は、最近、非常に大容量のJ2MEの使用可能なデバイスを出荷し始めた。2003年だけで、2億台を超えるJ2MEの使用可能なモバイルフォンが出荷されたと推定される。
これらの無線デバイスの主な制限は、プログラムを実行するために利用可能なメモリが比較的少量であるということである。多くの方法は、これらのメモリ制限があるデバイスにおいてメモリの使用を最適化するために発展してきた。かつてのそのような方法は、インタープリット(interpret)されたコードとコンパイル(compile)されたコードとの実行を両方ともサポートする動的なコンパイラーを用いることを伴う。より頻繁に実行されるコードは、コンパイルモードにおいてコンパイルされ、実行される。一方で、より少ない頻度で実行されるコードは、インタープリットモードにおいて実行される。ここで留意すべきは、コンパイルされたコードは、インタープリットされたコードよりもはるかに早く実行するということである。しかし、コンパイルされたコードは、インタープリットされたコードよりもはるかに多くの空間を要する。
この動的に生成されたコンパイルされたコードが、オブジェクトヒープ上に常駐していようと、メモリの別々のコードキャッシュ領域内に常駐していようと、このコンパイルされたコードは、一般的には、頻繁にアクセスされなくなったときにメモリからイヴィクト(evict)される。このイヴィクション(eviction)は、一般的にはガーベージコレクション(GC)処理を介して行われる。ここで留意すべきは、コンパイルされたコードは、GC処理によって処理されるオブジェクトに対するポインターを含み得るということである。
コンパイルされたコードの実際のイヴィクションは、GCの間に起こるが、イヴィクション処理の犠牲選択の部分は、ミューテーター(mutator)実行中に収集された情報に基づくことが理想的である。ここで、このシステムは、コンパイルされたメソッドが使用される頻度に従って、コンパイルされたメソッドをランク付けするための情報を収集することができる。
メモリ制限が厳しくなるにつれて、このランキング処理の質が、全体の実行速度を高く維持するためにますます重要になる。他方で、ランキングメカニズムが複雑になり過ぎた場合、ランキングデータを取得することは、ミューテーターへの追加的な大きな負担を作成し得る。
方法が使用されている時、決定するために、方法の特定場所にソフトウェアフックを挿入することは一般的なやり方である。これらのフックは、プログラムの実行中に出会うとき、データを収集し、様々な計算を行うことができる。
フックを使用する現行の犠牲選択のスキームは、2つのカテゴリ、重量フックと軽量フックとに分類される。重量フックを使用すると、システムは、上記のフック内において直接的にルーチンに関する重さ計算を行う。例えば、フックは、Java(登録商標)方法のカウンターを増加させることができる。対照的に、軽量フックは、フックでできるだけ少なく計算することによって速度が落ちるミューテーターの最小量を生成する。例えば、所定のGCサイクル中にフックが実行される初回のみ、プロローグと呼ばれるJava(登録商標)方法をパッチするJ2ME(登録商標)内のConnected Limited Device Configuration HotSpot Implementation(CLDC HI)において自己書き換えコードスキームがある。同じルーチンの後に続く使用では、ミューテーターのオーバーヘッドがない。
方法の使い方を決定する別の方法は、統計的なサンプリングを使用することである。統計的なサンプリングは、現行のスタックを定期的に分析することによって動作することにより、ルーチンが実行しているときを決定する。(統計的なサンプリング方法は、また、一般的に比較的低頻度で実行するので、軽量でカウントする。)
しかし、前述した全ての技術は欠点を有する。それら技術は、顕著にミューテーターを減速させるか、またはよい犠牲選択のための十分な情報を収集しない。さらに、GC間の間隔は、一般的に大き過ぎて、多数の方法から有益なランキングを確立することができない。(CLDC HIのように複数ビットにおける複数のGC間隔を反映することは、1つのGC間隔は一般的に既に長すぎるので、この問題を解決しない。)
従って、前述した欠点なしにバーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法が必要とされる。
しかし、前述した全ての技術は欠点を有する。それら技術は、顕著にミューテーターを減速させるか、またはよい犠牲選択のための十分な情報を収集しない。さらに、GC間の間隔は、一般的に大き過ぎて、多数の方法から有益なランキングを確立することができない。(CLDC HIのように複数ビットにおける複数のGC間隔を反映することは、1つのGC間隔は一般的に既に長すぎるので、この問題を解決しない。)
従って、前述した欠点なしにバーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法が必要とされる。
バーチャルマシン内でコンパイルされたメソッドの実行の頻度を決定することを容易にするシステムを提供する。
(概要)
本発明の1つの実施形態は、バーチャルマシン内でコンパイルされたメソッドの実行の頻度を決定することを容易にするシステムを提供する。システムは、コンパイルされたメソッドが実行されるとき、決定することによって始まる。その場合、システムは、コンパイルされたメソッドに対応するコンパイルされたフラグをセットすることにより、コンパイルされたメソッドが実行していることを示す。システムは、フラグを定期的にスキャンし、フラグがセットされているとき、対応するカウンターの値を増加させて、それから、フラグをリセットする。最終的に、システムは、カウンターの値を解析することにより、コンパイルされたメソッド実行の頻度を決定する。
本発明の1つの実施形態は、バーチャルマシン内でコンパイルされたメソッドの実行の頻度を決定することを容易にするシステムを提供する。システムは、コンパイルされたメソッドが実行されるとき、決定することによって始まる。その場合、システムは、コンパイルされたメソッドに対応するコンパイルされたフラグをセットすることにより、コンパイルされたメソッドが実行していることを示す。システムは、フラグを定期的にスキャンし、フラグがセットされているとき、対応するカウンターの値を増加させて、それから、フラグをリセットする。最終的に、システムは、カウンターの値を解析することにより、コンパイルされたメソッド実行の頻度を決定する。
この実施形態の1つの変形において、システムは、カウンターの増加の間の時間間隔を調整する。
この実施形態の1つの変形において、システムは、コンパイルされたメソッドが、第2のコンパイルされたメソッドを呼び出すとき、命令を実行することによって実行されるとき、決定し、命令が、コンパイルされたメソッドに対応するフラグをセットする。
この実施形態の1つの変形において、システムは、コンパイルされたメソッドが、第2のコンパイルされたメソッドによって呼び出されるとき、命令を実行することによって実行されるとき、決定し、命令が、コンパイルされたメソッドに対応するフラグをセットする。
この実施形態の1つの変形において、システムは、コンパイルされたメソッドが、そのコンパイルされたメソッドから第2のコンパイルされたメソッドへ戻るとき、命令を実行することによって実行されるとき、決定し、命令が、コンパイルされたメソッドに対応するフラグをセットする。
この実施形態の1つの変形において、システムは、コンパイルされたメソッドが、第2のコンパイルされたメソッドからコンパイルされたメソッドへ戻るとき、命令を実行することによって実行されるとき、決定し、命令が、コンパイルされたメソッドに対応するフラグをセットする。
この実施形態の1つの変形において、システムは、コンパイルされたメソッドが、そのコンパイルされたメソッド内でバックワードブランチを開始するとき、命令を実行することによって実行されるとき、決定し、命令が、コンパイルされたメソッドに対応するフラグをセットする。
この実施形態の1つの変形において、システムは、コンパイルされたメソッドが、コンパイルされたメソッド内でバックワードブランチに対してターゲットで、命令を実行することによって実行されるとき、決定し、命令が、コンパイルされたメソッドに対応するフラグをセットする。
この実施形態の1つの変形において、システムは、コンパイルされたメソッドの実行の頻度が、所定のしきい値を下回るとき、コンパイルされたメソッドをイヴィクトし、その結果、メソッドは、コンパイルされたメソッドが再び実行されるとき、続いてリコンパイルもしくはインタープリットされなければならい。
さらなる変形において、システムは、所定のしきい値を調整することにより、コンパイルされたメソッドの数を制御する。
この実施形態の1つの変形において、システムは、カウンターを定期的に減少させることにより、デケイを導入して、それによって、コンパイルされたメソッドの過去の実行の関連性を自然にフェードする。
さらなる変形において、システムは、いずれかの方法に関連付けられたいずれかのカウンターが、所定のしきい値に達するとき、カウンターを定期的に減少させる。
この実施形態の1つの変形において、システムは、フラグに割り当てられた重量値を定期的に増加させ、その結果、コンパイルされたメソッドの後の実行は、コンパイルされたメソッドの前の実行より多くカウントする。
この実施形態の1つの変形において、システムは、フラグに割り当てられた重量値を定期的に増加させ、その結果、コンパイルされたメソッドの後の実行は、コンパイルされたメソッドの前の実行より多くカウントする。
以下の説明が提供されることにより、当業者は本発明を作成し使用することができる。また、以下の説明は特定の用途とその条件との関連で提供される。開示された実施形態への様々な改良は、当業者にとって容易に明白であり、ここで定義された一般的な原則は、本発明の精神と範囲から逸脱することなく、他の実施形態と用途とに適用され得る。従って、本発明は説明された実施形態に限られるものではなく、ここで開示された原則と特徴と一致する最も広い範囲を許容する。
この詳細な説明の中で記載されるデータ構造とコードとは、一般的にコンピュータの読み取り可能格納媒体に格納され、このコンピュータの読み取り可能格納媒体は、コンピュータシステムによって使用するためのコードおよび/またはデータを格納することができる任意のデバイスまたは媒体であり得る。これには、この限りではないが、ディスクドライブ、磁気テープ、CD(コンパクトディスク)とDVD(デジタル多用途ディスクまたはデジタルビデオディスク)、および(信号が変調される搬送波と共に、もしくは搬送波なしで)送信媒体で具体化されるコンピュータの命令信号といった磁気および光学の記憶デバイスが含まれる。例えば、送信媒体はインターネットといった通信ネットワークを含む。
(メモリ制限があるコンピューティングデバイス)
図1は、本発明の実施形態に従ったメモリ制限があるコンピューティングデバイス100を示す。メモリ制限があるコンピューティングデバイス100は、この限りではないが、携帯電話、マイクロプロセッサに基づくコンピュータシステム、デジタル信号プロセッサ、携帯型コンピューティングデバイス、整理記録ツール、デバイスコントローラー、装置内のコンピューテーショナルエンジンを含む、いかなるタイプのコンピューティングデバイスを含むことができる。メモリ制限があるコンピューティングデバイス100は、コンパイルされたメソッドとインタープリットされたメソッドとの両方の実行を交互にサポートするJava Virtual Machine(JVM)102を備える。(JAVA、JVM、JAVA VIRTUAL MACHINEという用語は、SUN Microsystems,Inc.of Santa Clara,Californiaの登録商標である。)JVM102はプラットフォーム独立バーチャルマシンのいかなるタイプでもあり得て、Java Virtual Machineに限られるものと意図されていない。
図1は、本発明の実施形態に従ったメモリ制限があるコンピューティングデバイス100を示す。メモリ制限があるコンピューティングデバイス100は、この限りではないが、携帯電話、マイクロプロセッサに基づくコンピュータシステム、デジタル信号プロセッサ、携帯型コンピューティングデバイス、整理記録ツール、デバイスコントローラー、装置内のコンピューテーショナルエンジンを含む、いかなるタイプのコンピューティングデバイスを含むことができる。メモリ制限があるコンピューティングデバイス100は、コンパイルされたメソッドとインタープリットされたメソッドとの両方の実行を交互にサポートするJava Virtual Machine(JVM)102を備える。(JAVA、JVM、JAVA VIRTUAL MACHINEという用語は、SUN Microsystems,Inc.of Santa Clara,Californiaの登録商標である。)JVM102はプラットフォーム独立バーチャルマシンのいかなるタイプでもあり得て、Java Virtual Machineに限られるものと意図されていない。
JVM102は、コンパイルされたメソッドの格納装置110を備える。JVM102内でのパフォーマンスを向上させるために、いくつかのメソッドはコンパイルされて、コンパイルされたメソッドの格納装置110に加えられる。これにより、これらのメソッドはインタープリットされたメソッドよりも早く実行することができる。しかし、コンパイルされたメソッドは、コンパイルされたコードの質によって、一般的にインタープリットされたメソッドよりも多くのスペースを要する。さらに、多くのシステムにおいて、インタープリットされたコードを、コンパイルの後に破棄することができない。従って、JVM102は、より高い頻度で使用されるメソッドのみを動的にコンパイルし、それらをコンパイルされたメソッドの格納装置110に置く。加えて、JVM102は、後に続くメソッドの実行がインタープリットモードで行われるように、より低い頻度で使用されるコンパイルされたメソッドをコンパイルされたメソッドの格納装置110からイヴィクトすることにより、スペースを節約する。このようなイヴィクションは、ガーベージコレクションオペレーションの外で作動する他のイヴィクションオペレーション中と同様に、ガーベージコレクションオペレーション中に行われ得る。
(フラグアレイ)
図2は、本発明の実施形態に従ったフラグアレイ200を示す。フラグアレイ200は、前述したように、重量フックの犠牲選択の質と軽量フックの全体コストとの近くに到達する形で、犠牲選択を容易にするために用いられる。本発明の1つの実施形態では、JVM102における動的なコンパイラーは、(1)呼ばれる人のプロローグ、(2)呼び出し直後、(3)バックワードブランチの直前に、おいて、付加的なコードを生成する。前記の3つの場所を用いて、最も適切なメソッドのアクセス(結局インタープリットより実行されるより良い、長いループのないコードストレッチを除いて)をキャッチすることができる。また、その他のフックの場所(または前記の場所のサブセット)は、恐らく正確性が欠けるのでメソッドランキングの質が低くなるが、これもまた使用され得る。
図2は、本発明の実施形態に従ったフラグアレイ200を示す。フラグアレイ200は、前述したように、重量フックの犠牲選択の質と軽量フックの全体コストとの近くに到達する形で、犠牲選択を容易にするために用いられる。本発明の1つの実施形態では、JVM102における動的なコンパイラーは、(1)呼ばれる人のプロローグ、(2)呼び出し直後、(3)バックワードブランチの直前に、おいて、付加的なコードを生成する。前記の3つの場所を用いて、最も適切なメソッドのアクセス(結局インタープリットより実行されるより良い、長いループのないコードストレッチを除いて)をキャッチすることができる。また、その他のフックの場所(または前記の場所のサブセット)は、恐らく正確性が欠けるのでメソッドランキングの質が低くなるが、これもまた使用され得る。
本発明は、フックを非常に短いインラインアクション(inline action)に制限する。すなわち、実行されているルーチン(メソッド、機能)に対応するフラグアレイ200内にフラグをセットする。図2に示された例では、ビットがフラグアレイ200にセットされており、コンパイルされたメソッド202でコンパイルされたメソッドを実行することを表す。フラグをセットするための実際のマシンの命令は、パフォーマンスを損なうことなくアドレス指定が可能な最小のメモリユニット(ワード、バイト、ビット)のアドレス指定をするために選ばれる。一般的に、実際のマシンの命令は1バイトをセットする。しかし、あるアーキテクチャにおいては、完全なワードまたは単一のビットをセットし得る。これらのフラグは、グローバル変数によって特定されるオフセットに位置づけられるフラグアレイ200内に含まれる。各コンパイルされたメソッドは、フラグアレイ200へそれ自身のインデックス(コンパイルされたメソッド202内に)を有する。ここで留意すべきは、イヴィクトされたルーチンのインデックスは再度使用することができるということである。
理論的に、当該のメソッドが時間内に所定の地点で使用されているという事実は、ミューテーターの実行が進行するにつれて、有用性の点で衰える。前述したように、ビットを収集して、それをランク付けする目的で使用するためにGCが起きるのを待つということは、一般的に時間がかかり過ぎる。1ビットよりも多くのビットを収集することは、他方で、ミューテーターの負担を増やす。本発明は、収集されたビットが調節されることにより、収集されたビットの関連性を、自然にフェードすることを表す第三段階を導入することによって、この緊張を解決する。
(参照アレイ)
図3は、本発明の実施形態に従った参照アレイ300を示す。参照アレイ300は、フラグのインデックスを、コンパイルされたメソッド112、コンパイルされたメソッド302、コンパイルされたメソッド304といった、それぞれのコンパイルされたメソッドにマッピングする。さらに、付加的な「カウント」のフィールドが各メソッドに関連付けられる。これは、第3のアレイもしくはカウントアレイ310によって、もしくは、各メソッドに付加的なフィールドを置くことによって、関連付けられる。前記のデータ構造を用いることで、システムは、コンパイルされたルーチン全てを反復し、フラグがセットされているフィールドに従って「カウント」のフィールドを更新する。カウントフィールドが更新される後に、全てのフラグはリセットされる。
図3は、本発明の実施形態に従った参照アレイ300を示す。参照アレイ300は、フラグのインデックスを、コンパイルされたメソッド112、コンパイルされたメソッド302、コンパイルされたメソッド304といった、それぞれのコンパイルされたメソッドにマッピングする。さらに、付加的な「カウント」のフィールドが各メソッドに関連付けられる。これは、第3のアレイもしくはカウントアレイ310によって、もしくは、各メソッドに付加的なフィールドを置くことによって、関連付けられる。前記のデータ構造を用いることで、システムは、コンパイルされたルーチン全てを反復し、フラグがセットされているフィールドに従って「カウント」のフィールドを更新する。カウントフィールドが更新される後に、全てのフラグはリセットされる。
本発明の1つの実施形態において、カウントフィールドを更新するプロセスは2つの段階を伴う。第1の段階では、全てのカウントが下げられることにより、メソッドの使用の関連性を自然にフェードする。そして、第2の段階では、(必要に応じていくらかの重量要素を要する)フラグは、所定の間隔でフラグのセットを有するそれらのルーチンのみに加えられる。
本発明のもう1つの実施形態では、段階がたった1つだけであり、そこで、セットされたフラグを有するメソッドのための全てのカウントが更新されるが、セットされたフラグのための重量要素は間隔毎に増加する。カウントの低下は、従って、フラグの重量がリセットされた後に、GCの時まで遅らせることができる。ここで留意すべきは、このスキームはミューテーターへの影響をさらに減らすことである。
本発明の第3の実施形態では、カウントのデケイがコンパイルされた任意のメソッドのためのあるカウントしきい値に到達することによって、トリガーされる。このデケイの処理は、典型的なプログラム実行をモデリングすることを助け、そしてそれは、一般的に小規模のコンパイルされたワーキングセットのメソッドへの高頻度のアクセスを伴う。ここでのワーキングセットは自然に発達する。通常のプログラム実行中、あるメソッドは、特定の時間内で、他のメソッドよりもはるかに高い頻度で実行される。自然に、最も頻繁に実行されるメソッドのセット(ワーキングセット)は、プログラムが実行するにつれて変化する。この実施形態において、カウントのデケイの処理は、最近あまり実行されていないメソッドの重要性を減らすので、重要であり、そしてそれは、ワーキングセット内のメソッドのカウントの価値をより強くすることを助ける。
より多くのメソッドが実行されるよりもインタープリットされている場合を考慮することもまた重要である。全体のパフォーマンスを上げるために、本発明の1つの実施形態では、仕事量をインタープリットへシフトすることにより、デケイラウンドが誘発される。例えば、これは、特定の時間間隔の間、コンパイルされる実行に対するインタープリットされる実行の割合を観察することによって求められ得る。事実上、本発明のこの実施形態により、デケイの処理に実質的に無関係な間隔の長さが選択される。このデケイの「タイムフロー」は柱時計の時間とは分離されている。
さらに、ガーベージコレクション時に、すべての方法は、累積されたカウントによって、ランク付けされる。システムは、まず、カウントを方法によってソートし、もしくはあるカウントのしきい値より低い犠牲を繰り返し検索し、所定のイヴィクションターゲット(eviction target)が満たされるまでしきい値を増加させることを保つ。サマリゼーション間隔が、フラグアレイ200内のセットされたフラグの関連性を維持するために十分に短い必要があることに留意する。サマリゼーション間隔は、またミューテーターの負担を広げるために十分に長い必要がある。これらの要求のバランスをとることにおいて、システムは、ミューテータスピードを考慮する必要がある。(例えば、フラグセッティングフックが、ヒットされる速度)
システムは、またインデックスのオーバーフローを処理する必要がある。各インデックスが、コンパイルされる前に、メソッドに割り当てられる。利用可能なインデックスがない場合、システムは、インデックスがあくまでコンパイルを止めるか、もしくは現在ランキングの低いルーチンのインデックスを取得しようとし得る。最初のインデックスの所有者が、まれにフラグをセットしたとき、不正確が起こる。しかしながら、これはまれであり、十分大きいアレイを選択することによってこの上なく保証されているので、インデックスのオーバーフローは、起こり得そうもない。このことを達成するために、アレイのサイズは、ヒープのサイズに比例し得る。(例えば、1メガバイト(MB)のヒープに対して、500の要素を有するアレイが用いられ得る。)
(フラグビットのセット)
図4は、本発明の実施形態に従って、フラグアレイ200内のフラグビットをセットするプロセスを示すフローチャートを示す。システムは、コンパイルされたメソッド(例えば、コンパイルされたメソッド112)が実行されるときを決定することによって始まる(ステップ402)。これは、上述の実行フックを用いることによって達成され得る。最終的に、システムは、フラグビットをフラグアレイ200内にセットすることにより、コンパイルされたメソッドが実行したことを示す(ステップ406)。
システムは、またインデックスのオーバーフローを処理する必要がある。各インデックスが、コンパイルされる前に、メソッドに割り当てられる。利用可能なインデックスがない場合、システムは、インデックスがあくまでコンパイルを止めるか、もしくは現在ランキングの低いルーチンのインデックスを取得しようとし得る。最初のインデックスの所有者が、まれにフラグをセットしたとき、不正確が起こる。しかしながら、これはまれであり、十分大きいアレイを選択することによってこの上なく保証されているので、インデックスのオーバーフローは、起こり得そうもない。このことを達成するために、アレイのサイズは、ヒープのサイズに比例し得る。(例えば、1メガバイト(MB)のヒープに対して、500の要素を有するアレイが用いられ得る。)
(フラグビットのセット)
図4は、本発明の実施形態に従って、フラグアレイ200内のフラグビットをセットするプロセスを示すフローチャートを示す。システムは、コンパイルされたメソッド(例えば、コンパイルされたメソッド112)が実行されるときを決定することによって始まる(ステップ402)。これは、上述の実行フックを用いることによって達成され得る。最終的に、システムは、フラグビットをフラグアレイ200内にセットすることにより、コンパイルされたメソッドが実行したことを示す(ステップ406)。
(セットされたフラグビットを累積する)
図5は、本発明の実施形態に従って、フラブアレイ200からカウントアレイ310に、セットされたフラグビットを累積するプロセスを示すフローチャートを示す。ある定期的間隔で、システムは、セットされたフラグビットに対して、フラグアレイ200をスキャンする(ステップ502)。それぞれのセットされたフラグビットに対して、システムは、フラグアレイ200内のフラグビットに対応するカウントアレイ310内でカウントを増加させる(ステップ504)。カウントアレイ310内のすべての適正なカウントが、増加されたら、システムは、次の定期的間隔で、フラグアレイ200内のすべてのフラグビットを消去する(ステップ506)。カウントアレイを増加する一方で、システムが、カウントの1つにおいて、オーバーフローを検出するとき、システムは、上述のように、カウントアレイ310のビットをシフトすることによって、デケイを導入し得ることに留意する。
図5は、本発明の実施形態に従って、フラブアレイ200からカウントアレイ310に、セットされたフラグビットを累積するプロセスを示すフローチャートを示す。ある定期的間隔で、システムは、セットされたフラグビットに対して、フラグアレイ200をスキャンする(ステップ502)。それぞれのセットされたフラグビットに対して、システムは、フラグアレイ200内のフラグビットに対応するカウントアレイ310内でカウントを増加させる(ステップ504)。カウントアレイ310内のすべての適正なカウントが、増加されたら、システムは、次の定期的間隔で、フラグアレイ200内のすべてのフラグビットを消去する(ステップ506)。カウントアレイを増加する一方で、システムが、カウントの1つにおいて、オーバーフローを検出するとき、システムは、上述のように、カウントアレイ310のビットをシフトすることによって、デケイを導入し得ることに留意する。
本発明の実施形態の上述が、例示および記載だけの目的のために示されてきた。それらは、完全であることは意図されておらず、また、開示されたフォームだけに本発明を制限することを意図されていない。従って、多くの改良および変形が、当業者にとってあきらかである。加えて、上述の開示は、本発明を制限することを意図されていない。本発明の範囲は、請求項によって定義される。
いくつかの態様を記載しておく。
〔態様1〕
バーチャルマシン内において、コンパイルされたメソッドの格納部内のコンパイルされたメソッドの実行の頻度を決定する、コンピュータによって実行される方法であって、
コンパイルされたメソッドが実行されることが判別手段によって判別されるとき、該コンパイルされたメソッドに対応するフラグをセットすることにより、該コンパイルされたメソッドが実行していることを示すことと、
スキャニング手段によって、該フラグを定期的にスキャンし、該フラグがセットされていれば対応するカウンターの値を増加させて、それから、該フラグをリセットすることと、
解析手段によって、該カウンターの該値を解析することによって、該コンパイルされたメソッドの実行の頻度を決定することと
を包含する、方法。
〔態様2〕
前記カウンターの増加の間の時間間隔を調整手段によって調整することをさらに包含する、態様1に記載の方法。
〔態様3〕
前記コンパイルされたメソッドが実行されることが判別され、該コンパイルされたメソッドに対応するフラグがセットされることは、該コンパイルされたメソッド内に位置されており、該コンパイルされたメソッドが第2のコンパイルされたメソッドを呼び出すときに実行される命令に従って行われる、
態様1に記載の方法。
〔態様4〕
前記コンパイルされたメソッドが実行されることが判別され、該コンパイルされたメソッドに対応するフラグがセットされることは、該コンパイルされたメソッド内に位置されており、該コンパイルされたメソッドが第2のコンパイルされたメソッドによって呼び出されたときに実行される命令に従って行われる、態様1に記載の方法。
〔態様5〕
前記コンパイルされたメソッドが実行されることが判別され、該コンパイルされたメソッドに対応するフラグがセットされることは、該コンパイルされたメソッド内に位置されており、該コンパイルされたメソッドから第2のコンパイルされたメソッドへ戻るときに実行される命令に従って行われる、態様1に記載の方法。
〔態様6〕
前記コンパイルされたメソッドが実行されることが判別され、該コンパイルされたメソッドに対応するフラグがセットされることは、第2のコンパイルされたメソッドから該コンパイルされたメソッドへ戻るときに実行される、第2のコンパイルされたメソッド内に位置されている命令に従って行われる、態様1に記載の方法。
〔態様7〕
前記コンパイルされたメソッドが実行されることが判別され、該コンパイルされたメソッドに対応するフラグがセットされることは、該コンパイルされたメソッド内に位置されており、該コンパイルされたメソッド内で前に戻る方向への分岐を開始するときに実行される命令に従って行われる、態様1に記載の方法。
〔態様8〕
前記コンパイルされたメソッドが実行されることが判別され、該コンパイルされたメソッドに対応するフラグがセットされることは、該コンパイルされたメソッド内で前に戻る方向への分岐のターゲットに位置された命令に従って行われる、態様1に記載の方法。
〔態様9〕
前記コンパイルされたメソッドの実行の頻度が、所定のしきい値を下回るとき、該コンパイルされたメソッドを前記コンパイルされたメソッドの格納部から削除し、その結果、前記方法は、該コンパイルされたメソッドが再び実行されるときリコンパイルもしくはインタープリットされなければならないことをさらに包含する、態様1に記載の方法。
〔態様10〕
所定のしきい値を調整手段によって調整することにより、前記コンパイルされたメソッドの数を制御することをさらに包含する、態様9に記載の方法。
〔態様11〕
フェード手段によって前記カウンターを定期的に減少させて、前記コンパイルされたメソッドの過去の実行の影響を減らすことをさらに包含する、態様1に記載の方法。
〔態様12〕
いずれかのメソッドに関連付けられたいずれかのカウンターが、所定のしきい値に達するとき、フェード手段によって前記カウンターを減少させて、前記コンパイルされたメソッドの過去の実行の影響を減らすことをさらに包含する、態様1に記載の方法。
〔態様13〕
フェード手段によって前記フラグに割り当てられた重み値を定期的に増加させ、その結果、前記コンパイルされたメソッドの後の実行は、該コンパイルされたメソッドの前の実行より大きな影響をもつようにすることをさらに包含する、態様1に記載の方法。
〔態様14〕
コンピュータによって実行されるとき、該コンピュータに方法を実行させる命令を格納するコンピュータ読み取り可能格納媒体であって、該命令がコンピュータによって実行されるとき、該命令が該コンピュータにバーチャルマシン内でコンパイルされたメソッドの格納部内のコンパイルされたメソッドの実行の頻度を決定させ、
該方法は、
コンパイルされたメソッドが実行されることが判別手段によって判別されるとき、該コンパイルされたメソッドに対応するフラグをセットすることにより、該コンパイルされたメソッドが実行していることを示すことと、
該フラグを定期的にスキャンし、該フラグがセットされていれば対応するカウンターの値を増加させて、それから、該フラグをリセットすることと、
該カウンターの該値を解析することによって、該コンパイルされたメソッドの実行の頻度を決定することと
を包含する、コンピュータ読み取り可能格納媒体。
〔態様15〕
前記方法は、前記カウンターの増加の間の時間間隔を調整することをさらに包含する、態様14に記載のコンピュータ読み取り可能格納媒体。
〔態様16〕
前記コンパイルされたメソッドが実行されることが判別され、該コンパイルされたメソッドに対応するフラグがセットされることは、該コンパイルされたメソッド内に位置されており、該コンパイルされたメソッドが第2のコンパイルされたメソッドを呼び出すときに実行される命令に従って行われる、態様14に記載のコンピュータ読み取り可能格納媒体。
〔態様17〕
前記コンパイルされたメソッドが実行されることが判別され、該コンパイルされたメソッドに対応するフラグがセットされることは、該コンパイルされたメソッド内に位置されており、該コンパイルされたメソッドが第2のコンパイルされたメソッドによって呼び出されたときに実行される命令に従って行われる、態様14に記載のコンピュータ読み取り可能格納媒体。
〔態様18〕
前記コンパイルされたメソッドが実行されることが判別され、該コンパイルされたメソッドに対応するフラグがセットされることは、該コンパイルされたメソッド内に位置されており、該コンパイルされたメソッドから第2のコンパイルされたメソッドへ戻るときに実行される命令に従って行われる、態様14に記載のコンピュータ読み取り可能格納媒体。
〔態様19〕
前記コンパイルされたメソッドが実行されることが判別され、該コンパイルされたメソッドに対応するフラグがセットされることは、第2のコンパイルされたメソッドから該コンパイルされたメソッドへ戻るときに実行される、第2のコンパイルされたメソッド内に位置されている命令に従って行われる、態様14に記載のコンピュータ読み取り可能格納媒体。
〔態様20〕
前記コンパイルされたメソッドが実行されることが判別され、該コンパイルされたメソッドに対応するフラグがセットされることは、該コンパイルされたメソッド内に位置されており、該コンパイルされたメソッド内で前に戻る方向への分岐を開始するときに実行される命令に従って行われる、態様14に記載のコンピュータ読み取り可能格納媒体。
〔態様21〕
前記コンパイルされたメソッドが実行されることが判別され、該コンパイルされたメソッドに対応するフラグがセットされることは、該コンパイルされたメソッド内で前に戻る方向への分岐のターゲットに位置された命令に従って行われる、態様14に記載のコンピュータ読み取り可能格納媒体。
〔態様22〕
前記方法は、前記コンパイルされたメソッドの実行の頻度が、所定のしきい値を下回るとき、該コンパイルされたメソッドを前記コンパイルされたメソッドの格納部から削除し、その結果、該方法は、該コンパイルされたメソッドが再び実行されるとき、リコンパイルもしくはインタープリットされなければならないことをさらに包含する、態様14に記載のコンピュータ読み取り可能格納媒体。
〔態様23〕
前記方法は、所定のしきい値を調整することにより、前記コンパイルされたメソッドの数を制御することをさらに包含する、態様22に記載のコンピュータ読み取り可能格納媒体。
〔態様24〕
前記方法は、前記カウンターを定期的に減少させて、前記コンパイルされたメソッドの過去の実行の影響を減らすことをさらに包含する、態様14に記載のコンピュータ読み取り可能格納媒体。
〔態様25〕
前記方法は、いずれかの方法に関連付けられたいずれかのカウンターが、所定のしきい値に達するとき、前記カウンターを減少させて、前記コンパイルされたメソッドの過去の実行の影響を減らすことをさらに包含する、態様14に記載のコンピュータ読み取り可能格納媒体。
〔態様26〕
前記方法は、前記フラグに割り当てられた重み値を定期的に増加させ、その結果、前記コンパイルされたメソッドの後の実行は、該コンパイルされたメソッドの前の実行より大きな影響をもつようにすることをさらに包含する、態様14に記載のコンピュータ読み取り可能格納媒体。
〔態様27〕
バーチャルマシン内でコンパイルされたメソッドの格納部内のコンパイルされたメソッドの実行の頻度を決定する装置であって、
コンパイルされたメソッドが実行されることを判別するように構成されている判別手段と、
該コンパイルされたメソッドが実行しているとき、該コンパイルされたメソッドに対応するフラグをセットして、該コンパイルされたメソッドが実行していることを示すフラグセッティング手段と、
該フラグを定期的にスキャンして、フラグがセットされていれば対応するカウンターの値を増加させて、該フラグをリセットするように構成されているスキャニング手段と、
該カウンターの該値を解析することにより、該コンパイルされたメソッドの実行の頻度を決定するように構成されている解析手段と
を備えた、装置。
〔態様28〕
前記カウンターの増加の間の時間間隔を調整するように構成されている調整手段をさらに備えた、態様27に記載の装置。
〔態様29〕
前記判別手段は、前記コンパイルされたメソッド内に位置されており、前記コンパイルされたメソッドが第2のコンパイルされたメソッドを呼び出すときに実行される命令に従って判別するようにさらに構成されている、態様27に記載の装置。
〔態様30〕
前記判別手段は、前記コンパイルされたメソッド内に位置されており、前記コンパイルされたメソッドが第2のコンパイルされたメソッドによって呼び出されたときに実行される命令に従って判別するようにさらに構成されている、態様27に記載の装置。
〔態様31〕
前記判別手段は、該コンパイルされたメソッド内に位置されており、前記コンパイルされたメソッドから第2のコンパイルされたメソッドに戻るときに実行される命令に従って判別するようにさらに構成されている、態様27に記載の装置。
〔態様32〕
前記判別手段は、第2のコンパイルされたメソッドから、前記コンパイルされたメソッドに戻るときに実行される、第2のコンパイルされたメソッド内に位置されている命令に従って判別するようにさらに構成されている、態様27に記載の装置。
〔態様33〕
前記判別手段は、前記コンパイルされたメソッド内に位置されており、前記コンパイルされたメソッドが該コンパイルされたメソッド内で前に戻る方向への分岐を開始するときに実行される命令に従って判別するようにさらに構成されている、態様27に記載の装置。
〔態様34〕
前記判別手段は、前記コンパイルされたメソッドが、該コンパイルされたメソッド内で前に戻る方向への分岐のターゲットに位置された命令に従って判別するようにさらに構成されている、態様27に記載の装置。
〔態様35〕
前記コンパイルされたメソッドの実行の頻度が、所定のしきい値を下回るとき、該コンパイルされたメソッドを前記コンパイルされたメソッドの格納部から削除し、その結果、該方法は、該コンパイルされたメソッドが再び実行されるとき、リコンパイルもしくはインタープリットされなければならないように構成されているイヴィクション手段をさらに備えた、態様27に記載の装置。
〔態様36〕
前記所定のしきい値を調整することによって、前記コンパイルされたメソッドの数を制御するように構成されている調整手段をさらに備えた、態様35に記載の装置。
〔態様37〕
前記カウンターを定期的に減少させて、前記コンパイルされたメソッドの過去の実行の影響を減らすように構成されているデケイ手段をさらに備えた、態様27に記載の装置。
〔態様38〕
前記デケイ手段は、いずれかのメソッドに関連付けられたいずれかのカウンターが所定のしきい値に達するとき、前記カウンターを減少させて、前記コンパイルされたメソッドの過去の実行の影響を減らすようにされに構成されている、態様27に記載の装置。
〔態様39〕
前記フラグに割り当てられた重み値を定期的に増加させて、その結果、前記コンパイルされたメソッドの後の実行は、該コンパイルされたメソッドの前の実行より大きな影響をもつようにさらに構成されているウエイティング手段である、態様27に記載の装置。
〔態様1〕
バーチャルマシン内において、コンパイルされたメソッドの格納部内のコンパイルされたメソッドの実行の頻度を決定する、コンピュータによって実行される方法であって、
コンパイルされたメソッドが実行されることが判別手段によって判別されるとき、該コンパイルされたメソッドに対応するフラグをセットすることにより、該コンパイルされたメソッドが実行していることを示すことと、
スキャニング手段によって、該フラグを定期的にスキャンし、該フラグがセットされていれば対応するカウンターの値を増加させて、それから、該フラグをリセットすることと、
解析手段によって、該カウンターの該値を解析することによって、該コンパイルされたメソッドの実行の頻度を決定することと
を包含する、方法。
〔態様2〕
前記カウンターの増加の間の時間間隔を調整手段によって調整することをさらに包含する、態様1に記載の方法。
〔態様3〕
前記コンパイルされたメソッドが実行されることが判別され、該コンパイルされたメソッドに対応するフラグがセットされることは、該コンパイルされたメソッド内に位置されており、該コンパイルされたメソッドが第2のコンパイルされたメソッドを呼び出すときに実行される命令に従って行われる、
態様1に記載の方法。
〔態様4〕
前記コンパイルされたメソッドが実行されることが判別され、該コンパイルされたメソッドに対応するフラグがセットされることは、該コンパイルされたメソッド内に位置されており、該コンパイルされたメソッドが第2のコンパイルされたメソッドによって呼び出されたときに実行される命令に従って行われる、態様1に記載の方法。
〔態様5〕
前記コンパイルされたメソッドが実行されることが判別され、該コンパイルされたメソッドに対応するフラグがセットされることは、該コンパイルされたメソッド内に位置されており、該コンパイルされたメソッドから第2のコンパイルされたメソッドへ戻るときに実行される命令に従って行われる、態様1に記載の方法。
〔態様6〕
前記コンパイルされたメソッドが実行されることが判別され、該コンパイルされたメソッドに対応するフラグがセットされることは、第2のコンパイルされたメソッドから該コンパイルされたメソッドへ戻るときに実行される、第2のコンパイルされたメソッド内に位置されている命令に従って行われる、態様1に記載の方法。
〔態様7〕
前記コンパイルされたメソッドが実行されることが判別され、該コンパイルされたメソッドに対応するフラグがセットされることは、該コンパイルされたメソッド内に位置されており、該コンパイルされたメソッド内で前に戻る方向への分岐を開始するときに実行される命令に従って行われる、態様1に記載の方法。
〔態様8〕
前記コンパイルされたメソッドが実行されることが判別され、該コンパイルされたメソッドに対応するフラグがセットされることは、該コンパイルされたメソッド内で前に戻る方向への分岐のターゲットに位置された命令に従って行われる、態様1に記載の方法。
〔態様9〕
前記コンパイルされたメソッドの実行の頻度が、所定のしきい値を下回るとき、該コンパイルされたメソッドを前記コンパイルされたメソッドの格納部から削除し、その結果、前記方法は、該コンパイルされたメソッドが再び実行されるときリコンパイルもしくはインタープリットされなければならないことをさらに包含する、態様1に記載の方法。
〔態様10〕
所定のしきい値を調整手段によって調整することにより、前記コンパイルされたメソッドの数を制御することをさらに包含する、態様9に記載の方法。
〔態様11〕
フェード手段によって前記カウンターを定期的に減少させて、前記コンパイルされたメソッドの過去の実行の影響を減らすことをさらに包含する、態様1に記載の方法。
〔態様12〕
いずれかのメソッドに関連付けられたいずれかのカウンターが、所定のしきい値に達するとき、フェード手段によって前記カウンターを減少させて、前記コンパイルされたメソッドの過去の実行の影響を減らすことをさらに包含する、態様1に記載の方法。
〔態様13〕
フェード手段によって前記フラグに割り当てられた重み値を定期的に増加させ、その結果、前記コンパイルされたメソッドの後の実行は、該コンパイルされたメソッドの前の実行より大きな影響をもつようにすることをさらに包含する、態様1に記載の方法。
〔態様14〕
コンピュータによって実行されるとき、該コンピュータに方法を実行させる命令を格納するコンピュータ読み取り可能格納媒体であって、該命令がコンピュータによって実行されるとき、該命令が該コンピュータにバーチャルマシン内でコンパイルされたメソッドの格納部内のコンパイルされたメソッドの実行の頻度を決定させ、
該方法は、
コンパイルされたメソッドが実行されることが判別手段によって判別されるとき、該コンパイルされたメソッドに対応するフラグをセットすることにより、該コンパイルされたメソッドが実行していることを示すことと、
該フラグを定期的にスキャンし、該フラグがセットされていれば対応するカウンターの値を増加させて、それから、該フラグをリセットすることと、
該カウンターの該値を解析することによって、該コンパイルされたメソッドの実行の頻度を決定することと
を包含する、コンピュータ読み取り可能格納媒体。
〔態様15〕
前記方法は、前記カウンターの増加の間の時間間隔を調整することをさらに包含する、態様14に記載のコンピュータ読み取り可能格納媒体。
〔態様16〕
前記コンパイルされたメソッドが実行されることが判別され、該コンパイルされたメソッドに対応するフラグがセットされることは、該コンパイルされたメソッド内に位置されており、該コンパイルされたメソッドが第2のコンパイルされたメソッドを呼び出すときに実行される命令に従って行われる、態様14に記載のコンピュータ読み取り可能格納媒体。
〔態様17〕
前記コンパイルされたメソッドが実行されることが判別され、該コンパイルされたメソッドに対応するフラグがセットされることは、該コンパイルされたメソッド内に位置されており、該コンパイルされたメソッドが第2のコンパイルされたメソッドによって呼び出されたときに実行される命令に従って行われる、態様14に記載のコンピュータ読み取り可能格納媒体。
〔態様18〕
前記コンパイルされたメソッドが実行されることが判別され、該コンパイルされたメソッドに対応するフラグがセットされることは、該コンパイルされたメソッド内に位置されており、該コンパイルされたメソッドから第2のコンパイルされたメソッドへ戻るときに実行される命令に従って行われる、態様14に記載のコンピュータ読み取り可能格納媒体。
〔態様19〕
前記コンパイルされたメソッドが実行されることが判別され、該コンパイルされたメソッドに対応するフラグがセットされることは、第2のコンパイルされたメソッドから該コンパイルされたメソッドへ戻るときに実行される、第2のコンパイルされたメソッド内に位置されている命令に従って行われる、態様14に記載のコンピュータ読み取り可能格納媒体。
〔態様20〕
前記コンパイルされたメソッドが実行されることが判別され、該コンパイルされたメソッドに対応するフラグがセットされることは、該コンパイルされたメソッド内に位置されており、該コンパイルされたメソッド内で前に戻る方向への分岐を開始するときに実行される命令に従って行われる、態様14に記載のコンピュータ読み取り可能格納媒体。
〔態様21〕
前記コンパイルされたメソッドが実行されることが判別され、該コンパイルされたメソッドに対応するフラグがセットされることは、該コンパイルされたメソッド内で前に戻る方向への分岐のターゲットに位置された命令に従って行われる、態様14に記載のコンピュータ読み取り可能格納媒体。
〔態様22〕
前記方法は、前記コンパイルされたメソッドの実行の頻度が、所定のしきい値を下回るとき、該コンパイルされたメソッドを前記コンパイルされたメソッドの格納部から削除し、その結果、該方法は、該コンパイルされたメソッドが再び実行されるとき、リコンパイルもしくはインタープリットされなければならないことをさらに包含する、態様14に記載のコンピュータ読み取り可能格納媒体。
〔態様23〕
前記方法は、所定のしきい値を調整することにより、前記コンパイルされたメソッドの数を制御することをさらに包含する、態様22に記載のコンピュータ読み取り可能格納媒体。
〔態様24〕
前記方法は、前記カウンターを定期的に減少させて、前記コンパイルされたメソッドの過去の実行の影響を減らすことをさらに包含する、態様14に記載のコンピュータ読み取り可能格納媒体。
〔態様25〕
前記方法は、いずれかの方法に関連付けられたいずれかのカウンターが、所定のしきい値に達するとき、前記カウンターを減少させて、前記コンパイルされたメソッドの過去の実行の影響を減らすことをさらに包含する、態様14に記載のコンピュータ読み取り可能格納媒体。
〔態様26〕
前記方法は、前記フラグに割り当てられた重み値を定期的に増加させ、その結果、前記コンパイルされたメソッドの後の実行は、該コンパイルされたメソッドの前の実行より大きな影響をもつようにすることをさらに包含する、態様14に記載のコンピュータ読み取り可能格納媒体。
〔態様27〕
バーチャルマシン内でコンパイルされたメソッドの格納部内のコンパイルされたメソッドの実行の頻度を決定する装置であって、
コンパイルされたメソッドが実行されることを判別するように構成されている判別手段と、
該コンパイルされたメソッドが実行しているとき、該コンパイルされたメソッドに対応するフラグをセットして、該コンパイルされたメソッドが実行していることを示すフラグセッティング手段と、
該フラグを定期的にスキャンして、フラグがセットされていれば対応するカウンターの値を増加させて、該フラグをリセットするように構成されているスキャニング手段と、
該カウンターの該値を解析することにより、該コンパイルされたメソッドの実行の頻度を決定するように構成されている解析手段と
を備えた、装置。
〔態様28〕
前記カウンターの増加の間の時間間隔を調整するように構成されている調整手段をさらに備えた、態様27に記載の装置。
〔態様29〕
前記判別手段は、前記コンパイルされたメソッド内に位置されており、前記コンパイルされたメソッドが第2のコンパイルされたメソッドを呼び出すときに実行される命令に従って判別するようにさらに構成されている、態様27に記載の装置。
〔態様30〕
前記判別手段は、前記コンパイルされたメソッド内に位置されており、前記コンパイルされたメソッドが第2のコンパイルされたメソッドによって呼び出されたときに実行される命令に従って判別するようにさらに構成されている、態様27に記載の装置。
〔態様31〕
前記判別手段は、該コンパイルされたメソッド内に位置されており、前記コンパイルされたメソッドから第2のコンパイルされたメソッドに戻るときに実行される命令に従って判別するようにさらに構成されている、態様27に記載の装置。
〔態様32〕
前記判別手段は、第2のコンパイルされたメソッドから、前記コンパイルされたメソッドに戻るときに実行される、第2のコンパイルされたメソッド内に位置されている命令に従って判別するようにさらに構成されている、態様27に記載の装置。
〔態様33〕
前記判別手段は、前記コンパイルされたメソッド内に位置されており、前記コンパイルされたメソッドが該コンパイルされたメソッド内で前に戻る方向への分岐を開始するときに実行される命令に従って判別するようにさらに構成されている、態様27に記載の装置。
〔態様34〕
前記判別手段は、前記コンパイルされたメソッドが、該コンパイルされたメソッド内で前に戻る方向への分岐のターゲットに位置された命令に従って判別するようにさらに構成されている、態様27に記載の装置。
〔態様35〕
前記コンパイルされたメソッドの実行の頻度が、所定のしきい値を下回るとき、該コンパイルされたメソッドを前記コンパイルされたメソッドの格納部から削除し、その結果、該方法は、該コンパイルされたメソッドが再び実行されるとき、リコンパイルもしくはインタープリットされなければならないように構成されているイヴィクション手段をさらに備えた、態様27に記載の装置。
〔態様36〕
前記所定のしきい値を調整することによって、前記コンパイルされたメソッドの数を制御するように構成されている調整手段をさらに備えた、態様35に記載の装置。
〔態様37〕
前記カウンターを定期的に減少させて、前記コンパイルされたメソッドの過去の実行の影響を減らすように構成されているデケイ手段をさらに備えた、態様27に記載の装置。
〔態様38〕
前記デケイ手段は、いずれかのメソッドに関連付けられたいずれかのカウンターが所定のしきい値に達するとき、前記カウンターを減少させて、前記コンパイルされたメソッドの過去の実行の影響を減らすようにされに構成されている、態様27に記載の装置。
〔態様39〕
前記フラグに割り当てられた重み値を定期的に増加させて、その結果、前記コンパイルされたメソッドの後の実行は、該コンパイルされたメソッドの前の実行より大きな影響をもつようにさらに構成されているウエイティング手段である、態様27に記載の装置。
100 メモリ制限があるコンピューティングデバイス
102 Java Virtual Machine(JVM)
110 コンパイルされたメソッドの格納装置
112、202、302、304 コンパイルされたメソッド
200 フラグアレイ
300 参照アレイ
310 カウントアレイ
102 Java Virtual Machine(JVM)
110 コンパイルされたメソッドの格納装置
112、202、302、304 コンパイルされたメソッド
200 フラグアレイ
300 参照アレイ
310 カウントアレイ
Claims (3)
- コンピュータのバーチャルマシン内において、該バーチャルマシン内のコンパイルされたメソッドの格納部内に格納されているコンパイルされたメソッドの実行の頻度を決定する、前記コンピュータによって実行される方法であって、
コンパイルされたメソッドが実行されることが前記コンピュータの判別手段によって判別されるとき、前記コンピュータのセット手段によって該コンパイルされたメソッドに対応するフラグをセットすることにより、該コンパイルされたメソッドが実行していることを示すことと、
前記コンピュータのスキャニング手段によって、該フラグを定期的にスキャンし、該フラグがセットされていれば対応するカウンターの値を増加させて、それから、該フラグをリセットすることと、
前記コンピュータの解析手段によって、該カウンターの該値を解析することによって、該コンパイルされたメソッドの実行の頻度を決定することと
を含み、
当該方法がさらに、
前記コンピュータのフェード手段によって前記カウンターの値をデケイにより定期的に減少させて、時間がたつにつれて前記コンパイルされたメソッドの過去の実行の影響を減らすことをさらに含む、
方法。 - コンピュータによって実行されるとき、該コンピュータに方法を実行させる命令を格納するコンピュータ読み取り可能記憶媒体であって、該命令がコンピュータによって実行されるとき、該命令が該コンピュータに、前記コンピュータのバーチャルマシン内のコンパイルされたメソッドの格納部内に格納されているコンパイルされたメソッドの実行の頻度を決定させ、
該方法は、
コンパイルされたメソッドが実行されることが前記コンピュータの判別手段によって判別されるとき、該コンパイルされたメソッドに対応するフラグをセットすることにより、該コンパイルされたメソッドが実行していることを示すことと、
該フラグを定期的にスキャンし、該フラグがセットされていれば対応するカウンターの値を増加させて、それから、該フラグをリセットすることと、
該カウンターの該値を解析することによって、該コンパイルされたメソッドの実行の頻度を決定することとを含み、
前記方法がさらに、
前記コンピュータのフェード手段によって前記カウンターの値をデケイにより定期的に減少させて、時間がたつにつれて前記コンパイルされたメソッドの過去の実行の影響を減らすことをさらに含む、
コンピュータ読み取り可能記憶媒体。 - コンピュータのバーチャルマシン内のコンパイルされたメソッドの格納部内に格納されているコンパイルされたメソッドの実行の頻度を決定する装置であって、
コンパイルされたメソッドが実行されることを判別するように構成されている判別手段と、
該コンパイルされたメソッドが実行しているとき、該コンパイルされたメソッドに対応するフラグをセットして、該コンパイルされたメソッドが実行していることを示すフラグセッティング手段と、
該フラグを定期的にスキャンして、フラグがセットされていれば対応するカウンターの値を増加させて、該フラグをリセットするように構成されているスキャニング手段と、
該カウンターの該値を解析することにより、該コンパイルされたメソッドの実行の頻度を決定するように構成されている解析手段と
前記カウンターの値をデケイにより定期的に減少させて、時間がたつにつれて前記コンパイルされたメソッドの過去の実行の影響を減らすフェード手段と
を備えた、装置。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US55080204P | 2004-03-05 | 2004-03-05 | |
US60/550,802 | 2004-03-05 | ||
US10/966,086 | 2004-10-15 | ||
US10/966,086 US7412693B2 (en) | 2004-03-05 | 2004-10-15 | Method and apparatus for determining frequency of execution for compiled methods within a virtual machine |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011257348A Division JP5422635B2 (ja) | 2004-03-05 | 2011-11-25 | バーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法、装置、記憶媒体 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2013257916A true JP2013257916A (ja) | 2013-12-26 |
Family
ID=34915703
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2005063167A Pending JP2005251208A (ja) | 2004-03-05 | 2005-03-07 | バーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法と装置 |
JP2011257348A Active JP5422635B2 (ja) | 2004-03-05 | 2011-11-25 | バーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法、装置、記憶媒体 |
JP2013208227A Pending JP2013257916A (ja) | 2004-03-05 | 2013-10-03 | バーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法と装置 |
Family Applications Before (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2005063167A Pending JP2005251208A (ja) | 2004-03-05 | 2005-03-07 | バーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法と装置 |
JP2011257348A Active JP5422635B2 (ja) | 2004-03-05 | 2011-11-25 | バーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法、装置、記憶媒体 |
Country Status (3)
Country | Link |
---|---|
US (1) | US7412693B2 (ja) |
EP (1) | EP1589425B1 (ja) |
JP (3) | JP2005251208A (ja) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7568190B2 (en) * | 2005-03-08 | 2009-07-28 | International Business Machines Corporation | Late binding of optimization information for just in time compilation |
DE102005021986A1 (de) * | 2005-05-09 | 2006-11-16 | Robert Bosch Gmbh | Verfahren zur Steuergeräte-Überwachung |
US8875114B2 (en) * | 2007-09-21 | 2014-10-28 | International Business Machines Corporation | Employing identifiers provided by an operating system of a processing environment to optimize the processing environment |
US20090217246A1 (en) * | 2008-02-27 | 2009-08-27 | Nce Technologies, Inc. | Evaluating Software Programming Skills |
JP2010160622A (ja) * | 2009-01-07 | 2010-07-22 | Toshiba Corp | シミュレータ |
US8719797B2 (en) * | 2010-05-18 | 2014-05-06 | Blackberry Limited | System and method for debugging dynamically generated code of an application |
CN102693181A (zh) * | 2011-03-25 | 2012-09-26 | 鸿富锦精密工业(深圳)有限公司 | 分位刷写系统及方法 |
US9021421B1 (en) * | 2012-05-07 | 2015-04-28 | Google Inc. | Read and write barriers for flexible and efficient garbage collection |
CN105511942B (zh) * | 2015-12-02 | 2019-02-19 | 华为技术有限公司 | 语言虚拟机中热点中间代码的识别方法以及装置 |
CN111045779B (zh) * | 2019-11-01 | 2024-03-01 | 福建天泉教育科技有限公司 | 系统内存回收配置方法、存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6421647A (en) * | 1987-07-17 | 1989-01-25 | Toshiba Corp | Maintenance management method for peripheral equipment for electronic computer |
WO2002065284A1 (en) * | 2001-02-12 | 2002-08-22 | Trimedia Technologies, Inc. | An optimized dynamic bytecode interpreter |
JP2003316584A (ja) * | 2002-04-24 | 2003-11-07 | Matsushita Electric Ind Co Ltd | プレロードクラスの生成/更新装置、及び方法 |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5313616A (en) * | 1990-09-18 | 1994-05-17 | 88Open Consortium, Ltd. | Method for analyzing calls of application program by inserting monitoring routines into the executable version and redirecting calls to the monitoring routines |
US6126329A (en) * | 1993-06-08 | 2000-10-03 | Rational Software Coporation | Method and apparatus for accurate profiling of computer programs |
JP3301359B2 (ja) | 1997-09-30 | 2002-07-15 | 日本電気株式会社 | リスト管理システム、方法及び記憶媒体 |
US5995754A (en) * | 1997-10-06 | 1999-11-30 | Sun Microsystems, Inc. | Method and apparatus for dynamically optimizing byte-coded programs |
US6513155B1 (en) * | 1997-12-12 | 2003-01-28 | International Business Machines Corporation | Method and system for merging event-based data and sampled data into postprocessed trace output |
JP3376906B2 (ja) * | 1998-02-18 | 2003-02-17 | トヨタ自動車株式会社 | 計算機の負荷率計測システム |
US6321375B1 (en) * | 1998-05-14 | 2001-11-20 | International Business Machines Corporation | Method and apparatus for determining most recently used method |
JP2000022873A (ja) * | 1998-07-01 | 2000-01-21 | Ricoh Co Ltd | 複合機能装置 |
US6668372B1 (en) * | 1999-10-13 | 2003-12-23 | Intel Corporation | Software profiling method and apparatus |
US6681387B1 (en) * | 1999-12-01 | 2004-01-20 | Board Of Trustees Of The University Of Illinois | Method and apparatus for instruction execution hot spot detection and monitoring in a data processing unit |
US7350200B2 (en) * | 2001-03-29 | 2008-03-25 | Intel Corporation | Method and system of controlling dynamically compiled native code size |
JP3808755B2 (ja) * | 2001-11-07 | 2006-08-16 | 富士通株式会社 | Jitコンパイラを備えた仮想計算機 |
US20030110357A1 (en) * | 2001-11-14 | 2003-06-12 | Nguyen Phillip V. | Weight based disk cache replacement method |
JP2003337711A (ja) * | 2002-05-21 | 2003-11-28 | Hitachi Ltd | 情報処理装置および方法 |
US7062684B2 (en) * | 2002-12-19 | 2006-06-13 | International Business Machines Corporation | Enabling tracing of a repeat instruction |
US20050050524A1 (en) * | 2003-08-25 | 2005-03-03 | Arm Limited | Generating software test information |
-
2004
- 2004-10-15 US US10/966,086 patent/US7412693B2/en active Active
-
2005
- 2005-02-28 EP EP05251157A patent/EP1589425B1/en active Active
- 2005-03-07 JP JP2005063167A patent/JP2005251208A/ja active Pending
-
2011
- 2011-11-25 JP JP2011257348A patent/JP5422635B2/ja active Active
-
2013
- 2013-10-03 JP JP2013208227A patent/JP2013257916A/ja active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6421647A (en) * | 1987-07-17 | 1989-01-25 | Toshiba Corp | Maintenance management method for peripheral equipment for electronic computer |
WO2002065284A1 (en) * | 2001-02-12 | 2002-08-22 | Trimedia Technologies, Inc. | An optimized dynamic bytecode interpreter |
JP2003316584A (ja) * | 2002-04-24 | 2003-11-07 | Matsushita Electric Ind Co Ltd | プレロードクラスの生成/更新装置、及び方法 |
Also Published As
Publication number | Publication date |
---|---|
JP2012038359A (ja) | 2012-02-23 |
US7412693B2 (en) | 2008-08-12 |
JP2005251208A (ja) | 2005-09-15 |
US20050198620A1 (en) | 2005-09-08 |
EP1589425A2 (en) | 2005-10-26 |
EP1589425A3 (en) | 2008-07-23 |
JP5422635B2 (ja) | 2014-02-19 |
EP1589425B1 (en) | 2012-08-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5422635B2 (ja) | バーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法、装置、記憶媒体 | |
US7765527B2 (en) | Per thread buffering for storing profiling data | |
JP3808755B2 (ja) | Jitコンパイラを備えた仮想計算機 | |
EP1635258B1 (en) | Program execution control device | |
US5995754A (en) | Method and apparatus for dynamically optimizing byte-coded programs | |
US6308319B1 (en) | Thread suspension system and method using trapping instructions in delay slots | |
US8296745B2 (en) | Method and apparatus for portable stub generation | |
US7818722B2 (en) | Computer implemented method and system for accurate, efficient and adaptive calling context profiling | |
EP3577567B1 (en) | Multiple stage garbage collector | |
US7716449B2 (en) | Efficient chunked java object heaps | |
US20200125364A1 (en) | Conditional Branch Frame Barrier | |
EP2115600A1 (en) | Database management methodology | |
KR19990037015A (ko) | 객체-지향 시스템에서 수신기 타입을 위한 인-라인데이터베이스 | |
US9027011B1 (en) | Using method-profiling to dynamically tune a virtual machine for responsiveness | |
US6317876B1 (en) | Method and apparatus for determining a maximum number of live registers | |
US6581077B2 (en) | Method and apparatus for storing short-lived objects in a virtual machine | |
US8533710B1 (en) | Using observed thread activity to dynamically tune a virtual machine for responsiveness | |
US6738969B2 (en) | Non-intrusive gathering of code usage information to facilitate removing unused compiled code | |
JP2006164294A (ja) | Jitコンパイラを備えた仮想計算機 | |
JP2006202317A (ja) | Jitコンパイラを備えた仮想計算機 | |
JP2006134351A (ja) | Jitコンパイラを備えた仮想計算機 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20131003 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20140819 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20150203 |