JP2012038359A - バーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法と装置 - Google Patents

バーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法と装置 Download PDF

Info

Publication number
JP2012038359A
JP2012038359A JP2011257348A JP2011257348A JP2012038359A JP 2012038359 A JP2012038359 A JP 2012038359A JP 2011257348 A JP2011257348 A JP 2011257348A JP 2011257348 A JP2011257348 A JP 2011257348A JP 2012038359 A JP2012038359 A JP 2012038359A
Authority
JP
Japan
Prior art keywords
compiled
compiled method
instruction
flag
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.)
Granted
Application number
JP2011257348A
Other languages
English (en)
Other versions
JP5422635B2 (ja
Inventor
J W Masisuke Barnd
ジェイ.ダブリュー.マシスケ バーンド
J Priss Oleg
エー.プリス オレグー
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.)
Oracle America Inc
Original Assignee
Oracle America 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 Oracle America Inc filed Critical Oracle America Inc
Publication of JP2012038359A publication Critical patent/JP2012038359A/ja
Application granted granted Critical
Publication of JP5422635B2 publication Critical patent/JP5422635B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation 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/5016Allocation 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording 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/3466Performance evaluation by tracing or monitoring
    • 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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • G06F9/4552Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/88Monitoring involving counting

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (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

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)の優先権主張をする。
本発明は、コンピュータシステム内におけるバーチャルマシンに関する。特に、本発明は、バーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法と装置に関する。
(関連技術)
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間隔は一般的に既に長すぎるので、この問題を解決しない。)
従って、前述した欠点なしにバーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法が必要とされる。
バーチャルマシン内でコンパイルされたメソッドの実行の頻度を決定することを容易にするシステムを提供する。
(概要)
本発明の1つの実施形態は、バーチャルマシン内でコンパイルされたメソッドの実行の頻度を決定することを容易にするシステムを提供する。システムは、コンパイルされたメソッドが実行されるとき、決定することによって始まる。その場合、システムは、コンパイルされたメソッドに対応するコンパイルされたフラグをセットすることにより、コンパイルされたメソッドが実行していることを示す。システムは、フラグを定期的にスキャンし、フラグがセットされているとき、対応するカウンターの値を増加させて、それから、フラグをリセットする。最終的に、システムは、カウンターの値を解析することにより、コンパイルされたメソッド実行の頻度を決定する。
この実施形態の1つの変形において、システムは、カウンターの増加の間の時間間隔を調整する。
この実施形態の1つの変形において、システムは、コンパイルされたメソッドが、第2のコンパイルされたメソッドを呼び出すとき、命令を実行することによって実行されるとき、決定し、命令が、コンパイルされたメソッドに対応するフラグをセットする。
この実施形態の1つの変形において、システムは、コンパイルされたメソッドが、第2のコンパイルされたメソッドによって呼び出されるとき、命令を実行することによって実行されるとき、決定し、命令が、コンパイルされたメソッドに対応するフラグをセットする。
この実施形態の1つの変形において、システムは、コンパイルされたメソッドが、そのコンパイルされたメソッドから第2のコンパイルされたメソッドへ戻るとき、命令を実行することによって実行されるとき、決定し、命令が、コンパイルされたメソッドに対応するフラグをセットする。
この実施形態の1つの変形において、システムは、コンパイルされたメソッドが、第2のコンパイルされたメソッドからコンパイルされたメソッドへ戻るとき、命令を実行することによって実行されるとき、決定し、命令が、コンパイルされたメソッドに対応するフラグをセットする。
この実施形態の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に限られるものと意図されていない。
JVM102は、コンパイルされたメソッドの格納装置110を備える。JVM102内でのパフォーマンスを向上させるために、いくつかのメソッドはコンパイルされて、コンパイルされたメソッドの格納装置110に加えられる。これにより、これらのメソッドはインタープリットされたメソッドよりも早く実行することができる。しかし、コンパイルされたメソッドは、コンパイルされたコードの質によって、一般的にインタープリットされたメソッドよりも多くのスペースを要する。さらに、多くのシステムにおいて、インタープリットされたコードを、コンパイルの後に破棄することができない。従って、JVM102は、より高い頻度で使用されるメソッドのみを動的にコンパイルし、それらをコンパイルされたメソッドの格納装置110に置く。加えて、JVM102は、後に続くメソッドの実行がインタープリットモードで行われるように、より低い頻度で使用されるコンパイルされたメソッドをコンパイルされたメソッドの格納装置110からイヴィクトすることにより、スペースを節約する。このようなイヴィクションは、ガーベージコレクションオペレーションの外で作動する他のイヴィクションオペレーション中と同様に、ガーベージコレクションオペレーション中に行われ得る。
(フラグアレイ)
図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によって、もしくは、各メソッドに付加的なフィールドを置くことによって、関連付けられる。前記のデータ構造を用いることで、システムは、コンパイルされたルーチン全てを反復し、フラグがセットされているフィールドに従って「カウント」のフィールドを更新する。カウントフィールドが更新される後に、全てのフラグはリセットされる。
本発明の1つの実施形態において、カウントフィールドを更新するプロセスは2つの段階を伴う。第1の段階では、全てのカウントが下げられることにより、メソッドの使用の関連性を自然にフェードする。そして、第2の段階では、(必要に応じていくらかの重量要素を要する)フラグは、所定の間隔でフラグのセットを有するそれらのルーチンのみに加えられる。
本発明のもう1つの実施形態では、段階がたった1つだけであり、そこで、セットされたフラグを有するメソッドのための全てのカウントが更新されるが、セットされたフラグのための重量要素は間隔毎に増加する。カウントの低下は、従って、フラグの重量がリセットされた後に、GCの時まで遅らせることができる。ここで留意すべきは、このスキームはミューテーターへの影響をさらに減らすことである。
本発明の第3の実施形態では、カウントのデケイがコンパイルされた任意のメソッドのためのあるカウントしきい値に到達することによって、トリガーされる。このデケイの処理は、典型的なプログラム実行をモデリングすることを助け、そしてそれは、一般的に小規模のコンパイルされたワーキングセットのメソッドへの高頻度のアクセスを伴う。ここでのワーキングセットは自然に発達する。通常のプログラム実行中、あるメソッドは、特定の時間内で、他のメソッドよりもはるかに高い頻度で実行される。自然に、最も頻繁に実行されるメソッドのセット(ワーキングセット)は、プログラムが実行するにつれて変化する。この実施形態において、カウントのデケイの処理は、最近あまり実行されていないメソッドの重要性を減らすので、重要であり、そしてそれは、ワーキングセット内のメソッドのカウントの価値をより強くすることを助ける。
より多くのメソッドが実行されるよりもインタープリットされている場合を考慮することもまた重要である。全体のパフォーマンスを上げるために、本発明の1つの実施形態では、仕事量をインタープリットへシフトすることにより、デケイラウンドが誘発される。例えば、これは、特定の時間間隔の間、コンパイルされる実行に対するインタープリットされる実行の割合を観察することによって求められ得る。事実上、本発明のこの実施形態により、デケイの処理に実質的に無関係な間隔の長さが選択される。このデケイの「タイムフロー」は柱時計の時間とは分離されている。
さらに、ガーベージコレクション時に、すべての方法は、累積されたカウントによって、ランク付けされる。システムは、まず、カウントを方法によってソートし、もしくはあるカウントのしきい値より低い犠牲を繰り返し検索し、所定のイヴィクションターゲット(eviction target)が満たされるまでしきい値を増加させることを保つ。サマリゼーション間隔が、フラグアレイ200内のセットされたフラグの関連性を維持するために十分に短い必要があることに留意する。サマリゼーション間隔は、またミューテーターの負担を広げるために十分に長い必要がある。これらの要求のバランスをとることにおいて、システムは、ミューテータスピードを考慮する必要がある。(例えば、フラグセッティングフックが、ヒットされる速度)
システムは、またインデックスのオーバーフローを処理する必要がある。各インデックスが、コンパイルされる前に、メソッドに割り当てられる。利用可能なインデックスがない場合、システムは、インデックスがあくまでコンパイルを止めるか、もしくは現在ランキングの低いルーチンのインデックスを取得しようとし得る。最初のインデックスの所有者が、まれにフラグをセットしたとき、不正確が起こる。しかしながら、これはまれであり、十分大きいアレイを選択することによってこの上なく保証されているので、インデックスのオーバーフローは、起こり得そうもない。このことを達成するために、アレイのサイズは、ヒープのサイズに比例し得る。(例えば、1メガバイト(MB)のヒープに対して、500の要素を有するアレイが用いられ得る。)
(フラグビットのセット)
図4は、本発明の実施形態に従って、フラグアレイ200内のフラグビットをセットするプロセスを示すフローチャートを示す。システムは、コンパイルされたメソッド(例えば、コンパイルされたメソッド112)が実行されるときを決定することによって始まる(ステップ402)。これは、上述の実行フックを用いることによって達成され得る。最終的に、システムは、フラグビットをフラグアレイ200内にセットすることにより、コンパイルされたメソッドが実行したことを示す(ステップ406)。
(セットされたフラグビットを累積する)
図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に記載の装置。
100 メモリ制限があるコンピューティングデバイス
102 Java Virtual Machine(JVM)
110 コンパイルされたメソッドの格納装置
112、202、302、304 コンパイルされたメソッド
200 フラグアレイ
300 参照アレイ
310 カウントアレイ
メソッドが使用されている時、決定するために、メソッドの特定場所にソフトウェアフックを挿入することは一般的なやり方である。これらのフックは、プログラムの実行中に出会うとき、データを収集し、様々な計算を行うことができる。
メソッドの使い方を決定する別の方法は、統計的なサンプリングを使用することである。統計的なサンプリングは、現行のスタックを定期的に分析することによって動作することにより、ルーチンが実行しているときを決定する。(統計的なサンプリング方法は、また、一般的に比較的低頻度で実行するので、軽量でカウントする。)
しかし、前述した全ての技術は欠点を有する。それら技術は、顕著にミューテーターを減速させるか、またはよい犠牲選択のための十分な情報を収集しない。さらに、GC間の間隔は、一般的に大き過ぎて、多数のメソッドから有益なランキングを確立することができない。(CLDC HIのように複数ビットにおける複数のGC間隔を反映することは、1つのGC間隔は一般的に既に長すぎるので、この問題を解決しない。)
従って、前述した欠点なしにバーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法が必要とされる。
この詳細な説明の中で記載されるデータ構造とコードとは、一般的にコンピュータの読み取り可能格納媒体に格納され、このコンピュータの読み取り可能格納媒体は、コンピュータシステムによって使用するためのコードおよび/またはデータを格納することができる任意のデバイスまたは媒体であり得る。これには、この限りではないが、ディスクドライブ、磁気テープ、CD(コンパクトディスク)とDVD(デジタル多用途ディスクまたはデジタルビデオディスク)といった磁気および光学の記憶デバイスが含まれる
(フラグアレイ)
図2は、本発明の実施形態に従ったフラグアレイ200を示す。フラグアレイ200は、前述したように、重量フックの犠牲選択の質と軽量フックの全体コストとの近くに到達する形で、犠牲選択を容易にするために用いられる。本発明の1つの実施形態では、JVM102における動的なコンパイラーは、(1)呼ばれるのプロローグ、(2)呼び出し直後、(3)バックワードブランチ〔前に戻る方向への分岐〕の直前に、おいて、付加的なコードを生成する。前記の3つの場所を用いて、最も適切なメソッドのアクセス(結局インタープリットより実行されるより良い、長いループのないコードストレッチを除いて)をキャッチすることができる。また、その他のフックの場所(または前記の場所のサブセット)は、恐らく正確性が欠けるのでメソッドランキングの質が低くなるが、これもまた使用され得る。
(セットされたフラグビットを累積する)
図5は、本発明の実施形態に従って、フラブアレイ200からカウントアレイ310に、セットされたフラグビットを累積するプロセスを示すフローチャートを示す。ある定期的間隔で、システムは、セットされたフラグビットに対して、フラグアレイ200をスキャンする(ステップ502)。それぞれのセットされたフラグビットに対して、システムは、フラグアレイ200内のフラグビットに対応するカウントアレイ310内でカウントを増加させる(ステップ504)。カウントアレイ310内のすべての適正なカウントが、増加されたら、システムは、次の定期的間隔で、フラグアレイ200内のすべてのフラグビットを消去する(ステップ506)。カウントアレイを増加する一方で、システムが、カウントの1つにおいて、オーバーフローを検出するとき、システムは、上述のように、カウントアレイ310のビットをシフトすることによって、デケイを導入し得ることに留意する。カウントを増加させる間の時間間隔を調整してもよい。

Claims (39)

  1. バーチャルマシン内でコンパイルされたメソッドの実行の頻度を決定する方法であって、
    コンパイルされたメソッドが実行されるとき、該コンパイルされたメソッドに対応するコンパイルされたフラグをセットすることにより、該コンパイルされたメソッドが実行していることを示すことと、
    該フラグを定期的にスキャンし、該フラグがセットされているとき、対応するカウンターの値を増加させて、それから、該フラグをリセットすることと、
    該カウンターの該値を解析することによって、該コンパイルされたメソッドの実行の頻度を決定することと
    を包含する、方法。
  2. 前記カウンターの増加の間の時間間隔を調整することをさらに包含する、請求項1に記載の方法。
  3. 前記コンパイルされたメソッドが実行されるとき、決定することは、該コンパイルされたメソッドが、第2のコンパイルされたメソッドを呼び出すとき、命令を実行することをさらに伴い、該命令が、該コンパイルされたメソッドに対応する前記フラグをセットする、
    請求項1に記載の方法。
  4. 前記コンパイルされたメソッドが実行されるとき、決定することは、該コンパイルされたメソッドが、第2のコンパイルされたメソッドによって呼び出されるとき、命令を実行することをさらに伴い、該命令が、該コンパイルされたメソッドに対応する前記フラグをセットする、請求項1に記載の方法。
  5. 前記コンパイルされたメソッドが実行されるとき、決定することは、該コンパイルされたメソッドから第2のコンパイルされたメソッドへ戻るとき、命令を実行することをさらに伴い、該命令が、該コンパイルされたメソッドに対応する前記フラグをセットする、請求項1に記載の方法。
  6. 前記コンパイルされたメソッドが実行されるとき、決定することは、第2のコンパイルされたメソッドから該コンパイルされたメソッドへ戻るとき、命令を実行することをさらに伴い、該命令が、該コンパイルされたメソッドに対応する前記フラグをセットする、請求項1に記載の方法。
  7. 前記コンパイルされたメソッドが実行されるとき、決定することは、該コンパイルされたメソッド内でバックワードブランチを開始するとき、命令を実行することをさらに伴い、該命令が、該コンパイルされたメソッドに対応する前記フラグをセットする、請求項1に記載の方法。
  8. 前記コンパイルされたメソッドが実行されるとき、決定することは、該コンパイルされたメソッド内でバックワードブランチに対してターゲットで、命令を実行することをさらに伴い、該命令が、該コンパイルされたメソッドに対応する前記フラグをセットする、請求項1に記載の方法。
  9. 前記コンパイルされたメソッドの実行の頻度が、所定のしきい値を下回るとき、該コンパイルされたメソッドをイヴィクトし、その結果、前記方法は、該コンパイルされたメソッドが再び実行されるとき、続いてリコンパイルもしくはインタープリットされなければならないことをさらに包含する、請求項1に記載の方法。
  10. 所定のしきい値を調整することにより、前記コンパイルされたメソッドの数を制御することをさらに包含する、請求項9に記載の方法。
  11. 前記カウンターを定期的に減少させることにより、デケイを導入して、それによって、前記コンパイルされたメソッドの過去の実行の関連性を自然にフェードすることをさらに包含する、請求項1に記載の方法。
  12. いずれかのメソッドに関連付けられたいずれかのカウンターが、所定のしきい値に達するとき、前記カウンターを定期的に減少させることをさらに包含する、請求項11に記載の方法。
  13. 前記フラグに割り当てられた重量値を定期的に増加させ、その結果、前記コンパイルされたメソッドの後の実行は、該コンパイルされたメソッドの前の実行より多くカウントすることをさらに包含する、請求項1に記載の方法。
  14. コンピュータによって実行されるとき、該コンピュータに方法を実行させる命令を格納するコンピュータ読み取り可能格納媒体であって、該命令がコンピュータによって実行されるとき、該命令が該コンピュータにバーチャルマシン内でコンパイルされたメソッドの実行の頻度を決定させ、
    該方法は、
    コンパイルされたメソッドが実行されるとき、該コンパイルされたメソッドに対応するフラグをセットすることにより、該コンパイルされたメソッドが実行していることを示すことと、
    該フラグを定期的にスキャンし、該フラグがセットされているとき、対応するカウンターの値を増加させて、それから、該フラグをリセットすることと、
    該カウンターの該値を解析することによって、該コンパイルされたメソッドの実行の頻度を決定することと
    を包含する、コンピュータ読み取り可能格納媒体。
  15. 前記方法は、前記カウンターの増加の間の時間間隔を調整することをさらに包含する、請求項14に記載のコンピュータ読み取り可能格納媒体。
  16. 前記コンパイルされたメソッドが実行されるとき、決定することは、該コンパイルされたメソッドが、第2のコンパイルされたメソッドを呼び出すとき、命令を実行することをさらに伴い、該命令が、該コンパイルされたメソッドに対応する前記フラグをセットする、請求項14に記載のコンピュータ読み取り可能格納媒体。
  17. 前記コンパイルされたメソッドが実行されるとき、決定することは、該コンパイルされたメソッドが、第2のコンパイルされたメソッドによって呼び出されるとき、命令を実行することをさらに伴い、該命令が、該コンパイルされたメソッドに対応する前記フラグをセットする、請求項14に記載のコンピュータ読み取り可能格納媒体。
  18. 前記コンパイルされたメソッドが実行されるとき、決定することは、該コンパイルされたメソッドから第2のコンパイルされたメソッドへ戻るとき、命令を実行することをさらに伴い、該命令が、該コンパイルされたメソッドに対応する前記フラグをセットする、請求項14に記載のコンピュータ読み取り可能格納媒体。
  19. 前記コンパイルされたメソッドが実行されるとき、決定することは、第2のコンパイルされたメソッドから該コンパイルされたメソッドへ戻るとき、命令を実行することをさらに伴い、該命令が、該コンパイルされたメソッドに対応する前記フラグをセットする、請求項14に記載のコンピュータ読み取り可能格納媒体。
  20. 前記コンパイルされたメソッドが実行されるとき、決定することは、該コンパイルされたメソッド内でバックワードブランチを開始するとき、命令を実行することをさらに伴い、該命令が、該コンパイルされたメソッドに対応する前記フラグをセットする、請求項14に記載のコンピュータ読み取り可能格納媒体。
  21. 前記コンパイルされたメソッドが実行されるとき、決定することは、該コンパイルされたメソッド内でバックワードブランチに対して、ターゲットで命令を実行することをさらに伴い、該命令が、該コンパイルされたメソッドに対応する前記フラグをセットする、請求項14に記載のコンピュータ読み取り可能格納媒体。
  22. 前記方法は、前記コンパイルされたメソッドの実行の頻度が、所定のしきい値を下回るとき、該コンパイルされたメソッドをイヴィクトし、その結果、該方法は、該コンパイルされたメソッドが再び実行されるとき、続いてリコンパイルもしくはインタープリットされなければならないことをさらに包含する、請求項14に記載のコンピュータ読み取り可能格納媒体。
  23. 前記方法は、所定のしきい値を調整することにより、前記コンパイルされたメソッドの数を制御することをさらに包含する、請求項22に記載のコンピュータ読み取り可能格納媒体。
  24. 前記カウンターを定期的に減少させることにより、デケイを導入して、それによって、前記コンパイルされたメソッドの過去の実行の関連性を自然にフェードすることをさらに包含する、請求項14に記載のコンピュータ読み取り可能格納媒体。
  25. 前記方法は、いずれかの方法に関連付けられたいずれかのカウンターが、所定のしきい値に達するとき、前記カウンターを定期的に減少させることをさらに包含する、請求項24に記載のコンピュータ読み取り可能格納媒体。
  26. 前記方法は、前記フラグに割り当てられた重量値を定期的に増加させ、その結果、前記コンパイルされたメソッドの後の実行は、該コンパイルされたメソッドの前の実行より多くカウントすることをさらに包含する、請求項14に記載のコンピュータ読み取り可能格納媒体。
  27. バーチャルマシン内でコンパイルされたメソッドの実行の頻度を決定する装置であって、
    コンパイルされたメソッドが実行されるとき、決定するように構成されている決定メカニズムと、
    該コンパイルされたメソッドに対応しているフラグをセットするように構成されているフラグセッティングメカニズムであって、該コンパイルされたメソッドが実行しているとき、該コンパイルされたメソッドが実行していることを示すフラグセッティングメカニズムと、
    該フラグを定期的にスキャンして、フラグがセットされているとき、対応するカウンターの値を増加させて、該フラグをリセットするように構成されているスキャニングメカニズムと、
    該カウンターの該値を解析することにより、該コンパイルされたメソッドの実行の頻度を決定するように構成されている解析メカニズムと
    を備えた、装置。
  28. 前記カウンターの増加の間の時間間隔を調整するように構成されている調整メカニズムをさらに備えた、請求項27に記載の装置。
  29. 前記決定メカニズムは、前記コンパイルされたメソッドが、第2のコンパイルされたメソッドを呼び出すとき、該コンパイルされたメソッドが、命令を実行することによって実行されるとき、決定するようにさらに構成されており、該命令が、該コンパイルされたメソッドに対応する前記フラグをセットする、請求項27に記載の装置。
  30. 前記決定メカニズムは、前記コンパイルされたメソッドが、第2のコンパイルされたメソッドによって呼び出されるとき、該コンパイルされたメソッドが、命令を実行することによって、実行されるとき、決定するようにさらに構成されており、該命令が、該コンパイルされたメソッドに対応する前記フラグをセットする、請求項27に記載の装置。
  31. 前記決定メカニズムは、前記コンパイルされたメソッドから、第2のコンパイルされたメソッドに戻るとき、該コンパイルされたメソッドが、命令を実行することによって、実行されるとき、決定するようにさらに構成されており、該命令が、該コンパイルされたメソッドに対応する前記フラグをセットする、請求項27に記載の装置。
  32. 前記決定メカニズムは、第2のコンパイルされたメソッドから、前記コンパイルされたメソッドに戻るとき、該コンパイルされたメソッドが、命令を実行することによって、実行されるとき、決定するようにさらに構成されており、該命令が、該コンパイルされたメソッドに対応する前記フラグをセットする、請求項27に記載の装置。
  33. 前記決定メカニズムは、前記コンパイルされたメソッドが、該コンパイルされたメソッド内でバックワードブランチを開始するとき、命令を実行することによって、実行されるとき、決定するようにさらに構成されており、該命令が、該コンパイルされたメソッドに対応する前記フラグをセットする、請求項27に記載の装置。
  34. 前記決定メカニズムは、前記コンパイルされたメソッドが、該コンパイルされたメソッド内でバックワードブランチに対して、ターゲットで命令を実行することによって、実行されるとき、決定するようにさらに構成されており、該命令が、該コンパイルされたメソッドに対応する前記フラグをセットする、請求項27に記載の装置。
  35. 前記コンパイルされたメソッドの実行の頻度が、所定のしきい値を下回るとき、該コンパイルされたメソッドをイヴィクトし、その結果、該方法は、該コンパイルされたメソッドが再び実行されるとき、続いてリコンパイルもしくはインタープリットされなければならないように構成されているイヴィクションメカニズムをさらに備えた、請求項27に記載の装置。
  36. 前記所定のしきい値を調整することによって、前記コンパイルされたメソッドの数を制御するように構成されている調整メカニズムをさらに備えた、請求項35に記載の装置。
  37. 前記カウンターを定期的に減少させることにより、デケイを導入して、それによって、前記コンパイルされたメソッドの過去の実行の関連性を自然にフェードするように構成されているデケイメカニズムをさらに備えた、請求項27に記載の装置。
  38. 前記デケイメカニズムは、いずれかの方法に関連付けられたいずれかのカウンターが、所定のしきい値に達するとき、前記カウンターを定期的に減少させるようにされに構成されている、請求項37に記載の装置。
  39. 前記フラグに割り当てられた重量値を定期的に増加させて、その結果、前記コンパイルされたメソッドの後の実行は、該コンパイルされたメソッドの前の実行より多くカウントするようにさらに構成されているウエイティングメカニズムである、請求項27に記載の装置。
JP2011257348A 2004-03-05 2011-11-25 バーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法、装置、記憶媒体 Active JP5422635B2 (ja)

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
JP2005063167A Division JP2005251208A (ja) 2004-03-05 2005-03-07 バーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法と装置

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2013208227A Division JP2013257916A (ja) 2004-03-05 2013-10-03 バーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法と装置

Publications (2)

Publication Number Publication Date
JP2012038359A true JP2012038359A (ja) 2012-02-23
JP5422635B2 JP5422635B2 (ja) 2014-02-19

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 (1)

Application Number Title Priority Date Filing Date
JP2005063167A Pending JP2005251208A (ja) 2004-03-05 2005-03-07 バーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法と装置

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2013208227A Pending JP2013257916A (ja) 2004-03-05 2013-10-03 バーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法と装置

Country Status (3)

Country Link
US (1) US7412693B2 (ja)
EP (1) EP1589425B1 (ja)
JP (3) JP2005251208A (ja)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
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 (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11232148A (ja) * 1998-02-18 1999-08-27 Toyota Motor Corp 計算機の負荷率計測方法及び計測システム
JP2000022873A (ja) * 1998-07-01 2000-01-21 Ricoh Co Ltd 複合機能装置
JP2003140909A (ja) * 2001-11-07 2003-05-16 Fujitsu Ltd Jitコンパイラを備えた仮想計算機
JP2003337711A (ja) * 2002-05-21 2003-11-28 Hitachi Ltd 情報処理装置および方法

Family Cites Families (15)

* Cited by examiner, † Cited by third party
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
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
US6321375B1 (en) * 1998-05-14 2001-11-20 International Business Machines Corporation Method and apparatus for determining most recently used method
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
JP2004529413A (ja) * 2001-02-12 2004-09-24 トリメディア テクノロジーズ インコーポレイテッド 最適化された動的バイトコードインタプリタ
US7350200B2 (en) * 2001-03-29 2008-03-25 Intel Corporation Method and system of controlling dynamically compiled native code size
US20030110357A1 (en) * 2001-11-14 2003-06-12 Nguyen Phillip V. Weight based disk cache replacement method
JP2003316584A (ja) * 2002-04-24 2003-11-07 Matsushita Electric Ind Co 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

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11232148A (ja) * 1998-02-18 1999-08-27 Toyota Motor Corp 計算機の負荷率計測方法及び計測システム
JP2000022873A (ja) * 1998-07-01 2000-01-21 Ricoh Co Ltd 複合機能装置
JP2003140909A (ja) * 2001-11-07 2003-05-16 Fujitsu Ltd Jitコンパイラを備えた仮想計算機
JP2003337711A (ja) * 2002-05-21 2003-11-28 Hitachi Ltd 情報処理装置および方法

Also Published As

Publication number Publication date
US7412693B2 (en) 2008-08-12
US20050198620A1 (en) 2005-09-08
JP5422635B2 (ja) 2014-02-19
EP1589425A3 (en) 2008-07-23
EP1589425A2 (en) 2005-10-26
EP1589425B1 (en) 2012-08-08
JP2013257916A (ja) 2013-12-26
JP2005251208A (ja) 2005-09-15

Similar Documents

Publication Publication Date Title
JP5422635B2 (ja) バーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法、装置、記憶媒体
US7765527B2 (en) Per thread buffering for storing profiling data
US5995754A (en) Method and apparatus for dynamically optimizing byte-coded programs
EP1635258B1 (en) Program execution control device
US5970249A (en) Method and apparatus for performing byte-code optimization during pauses
US7818722B2 (en) Computer implemented method and system for accurate, efficient and adaptive calling context profiling
US10572181B2 (en) Multiple stage garbage collector
US7181588B2 (en) Computer apparatus and method for autonomic adjustment of block transfer size
JP2003140909A (ja) Jitコンパイラを備えた仮想計算機
WO2021056389A1 (en) Methods and apparatus to process machine learning model in web-browser environment
US6249912B1 (en) Method and apparatus for determining most recently used methods
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
WO2012041600A1 (en) Virtual machine stage detection
US8327122B2 (en) Method and system for providing context switch using multiple register file
US8566812B1 (en) Using observed object patterns to dynamically tune a virtual machine for responsiveness
US6738969B2 (en) Non-intrusive gathering of code usage information to facilitate removing unused compiled code
JP2006134351A (ja) Jitコンパイラを備えた仮想計算機

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111219

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20111219

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130305

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130409

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20130611

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131003

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20131010

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131029

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131125

R150 Certificate of patent or registration of utility model

Ref document number: 5422635

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250