JP2004005650A - 実行中のコンピュータプログラムの性能を向上させる方法 - Google Patents
実行中のコンピュータプログラムの性能を向上させる方法 Download PDFInfo
- Publication number
- JP2004005650A JP2004005650A JP2003133970A JP2003133970A JP2004005650A JP 2004005650 A JP2004005650 A JP 2004005650A JP 2003133970 A JP2003133970 A JP 2003133970A JP 2003133970 A JP2003133970 A JP 2003133970A JP 2004005650 A JP2004005650 A JP 2004005650A
- Authority
- JP
- Japan
- Prior art keywords
- program
- virtual machine
- jvm
- control panel
- performance
- 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.)
- Withdrawn
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/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
Abstract
【課題】コンピュータプログラムの性能向上を解決するためには非常にコストがかかる。
【解決手段】あらゆる実施形態において、プログラムの性能を向上させる技法を提供する。一実施形態では、プログラムは、Java言語で書かれ、コンフィギュレーションを有するJava仮想マシン(JVM)を含むJava実行環境(JRE)で実行する。JVMにアクセスすることができる制御パネルが呼出される。制御パネルを介して、ユーザは、Javaプログラムの実行を観察し、実行の結果を分析し、JVMのコンフィギュレーションを変更し、実行中のプログラムのクリティカル部分の再最適化を強制する。プログラム実行を観察し、結果を分析し、Javaマシンのコンフィギュレーションを変更し、プログラムのクリティカル部分の再最適化を強制する上記ステップを繰返すことにより、ユーザは、プログラムの性能全体を向上させる。
【選択図】図1
【解決手段】あらゆる実施形態において、プログラムの性能を向上させる技法を提供する。一実施形態では、プログラムは、Java言語で書かれ、コンフィギュレーションを有するJava仮想マシン(JVM)を含むJava実行環境(JRE)で実行する。JVMにアクセスすることができる制御パネルが呼出される。制御パネルを介して、ユーザは、Javaプログラムの実行を観察し、実行の結果を分析し、JVMのコンフィギュレーションを変更し、実行中のプログラムのクリティカル部分の再最適化を強制する。プログラム実行を観察し、結果を分析し、Javaマシンのコンフィギュレーションを変更し、プログラムのクリティカル部分の再最適化を強制する上記ステップを繰返すことにより、ユーザは、プログラムの性能全体を向上させる。
【選択図】図1
Description
【0001】
【発明の属する技術分野】
本発明は、概してコンピュータプログラムに関し、特に実行中のかかるプログラムの性能を向上させることに関する。
【0002】
【従来の技術】
最初許容可能に実行中のアプリケーションプログラムは、長い間実行された後、プログラムの作業負荷特性の変化を含むあらゆる理由により、性能が低下する可能性がある。たとえば、Java実行環境(Java Runtime Environment(JRE))において、Java仮想マシン(Java Virtual Machine(JVM))は、Javaアプリケーションの実行速度を上げるために動的最適化コンパイラに頼る。アプリケーションが実行している間、JVMは、最も頻繁に呼出されるメソッド、すなわち「ホット(hot)」メソッドを識別し、それらを最適化し、最適化したメソッドをコードキャッシュに配置することにより、これらのメソッドの後続する呼出しが、それらメソッドのキャッシュバージョンを使用することでより効率的になるようにする。コードキャッシュは、ホットメソッドの最適化コードを格納するメモリ内の指定領域である。ホットメソッドのセットは、通常、プログラムが実行する特定のタイプの負荷かまたは動作のセットに関連付けられる。2つの異なる負荷を実行しているプログラムは、ホットメソッドの2つの異なるセットを提供する。たとえば、税金プログラムは、個人に対して税金を決める場合、法人に対して税金を決める同じ税金プログラムに関連するホットメソッドのセットとは異なるホットメソッドのセットに関連する。それは、個人に対して税金を決めるメソッドは、法人に対して税金を決めるメソッドとは異なるためである。したがって、ホットメソッドは、通常、プログラム負荷が変化した場合に識別される。さらにホットメソッドが識別され最適化されるにしたがい、アプリケーションはより効率的に実行する。しかしながら、アプリケーションがある期間実行した後、ホットメソッドは安定状態に達し、すなわち、いかなる新たなホットメソッドも識別することができなくなる。アプリケーション性能は、安定状態メソッドがいかに適切に最適化されるかによって決まる。
【0003】
アプリケーション最適化のレベルおよび範囲に影響を与える閾値は、通常、Java環境が顧客に出荷される前に事前設定される。積極的な(aggressive)閾値も保守的な(conservative)閾値もともに、性能を低下させる可能性がある。たとえば、コンパイル中にインライン化すべきメソッドのコードの量が多い積極的な閾値は、過度の命令キャッシュ(I−cache)ミスをもたらす可能性があり、保守的な閾値は、コードの大部分を最適化されないままにする。両方の状況により、アプリケーション性能が低下する。
【0004】
一般に、ユーザは、性能が低下しているアプリケーションを認識すると、そのアプリケーションを検査し、アプリケーション性能に影響を与えるJVMのパラメータを識別し、これらのパラメータに対してより適切な値を再割当てする。しかしながら、新たな変化が有効であるために、変更されたパラメータに基づく新たな環境をインストールしなければならず、このためには既存のアプリケーションを停止させる必要がある。アプリケーションが停止されている間、そのアプリケーションを使用することができず、業務の混乱がもたらされる。あらゆる状況において、問題を補正するために、ユーザはJava環境を提供する事業機関と連係する必要がある。これらの状況において、ユーザは、その機関の現場に物理的に出向かなければならず、そこで、アプリケーションのソフトウェアおよびハードウェア環境と性能低下をもたらしている状況とを再現する必要があり、それらはすべて非常にコストがかかる可能性がある。多くの状況では、性能低下をもたらす状況を作り出すことは容易ではない。さらに、アプリケーションがデバグされた後、一般的に新たなJava環境は変更され、その後、ユーザは、ユーザのマシンにおける変更を含めて新たなJava環境をインストールしなければならない。これには、また、アプリケーションを停止させる必要があり、上述したような混乱をもたらす。
【0005】
【発明が解決しようとする課題】
上述したことに基づき、上記欠点および関連する問題を解決するメカニズムへのニーズが高まっている。
【0006】
【課題を解決するための手段】
本発明は、あらゆる実施形態において、プログラムの性能を向上させる技法を提供する。一実施形態では、プログラムは、Java言語で書かれ、コンフィギュレーションを有するJava仮想マシン(JVM)を含むJava実行環境(JRE)で実行する。JVMにアクセスすることができる制御パネルが呼出される。制御パネルを介して、ユーザは、Javaプログラムの実行を観察し、実行の結果を分析し、JVMのコンフィギュレーションを変更し、実行中のプログラムのクリティカル部分の再最適化を強制する。プログラム実行を観察し、結果を分析し、Javaマシンのコンフィギュレーションを変更し、プログラムのクリティカル部分の再最適化を強制する上記ステップを繰返すことにより、ユーザは、プログラムの性能全体を向上させる。
【0007】
本発明を、添付図面の各図において実施例として例示する。図面において、同じ参照符号は同様の要素を参照する。
【0008】
【発明の実施の形態】
以下の説明では、説明の目的で、本発明の完全な理解を提供するために多くの具体的な詳細を示す。しかしながら、当業者には、本発明がこれらの具体的な詳細無しに実施されてよい、ということが明らかとなろう。すなわち、周知の構造および装置は、発明を不明確にするのを回避するためにブロック図形態で示す。
【0009】
図1は、本発明の実施形態を実施することができるシステム100を示す。システム100は、第1のコンピュータ110と第2のコンピュータ120とを含み、それらを、例示の目的のために、それぞれアプリケーションサーバ110と性能デバッギングマシン120と呼ぶ。サーバ110とマシン120とは、通信リンク130を介して接続される。
【0010】
サーバ110は、あらゆるアプリケーションプログラムを実行する。それらのうちの1つを、プログラム1110として示す。一実施形態では、プログラム1110は、Java仮想マシン(JVM)1120を含むJava実行環境(JRE)内で作動するJavaプログラムである。通常、プログラム1110は、JVM1120の制御下で最適化され実行される。そして、プログラム1110は、通常通信リンク130、インターネット等のネットワークを介してユーザにサービスを提供する。これらサービスには、たとえば、ウェブ、データベース、電子メール、セキュリティ、通信等が含まれる。
【0011】
Java仮想マシン1120は、JVM1120が動作するコンピュータプラットフォームから独立した、Javaバイトコードを実行する環境を提供する。概して、JVM1120は、ハードウェアで実行しているソフトウェアとサーバ110のオペレーティングシステムとで実現される。このため、JVM1120は、バイトコードの形式での汎用プログラム表現がサーバ110で実行されるのを可能にする環境を提供する。JVM1120は、Javaプログラムを最適化しJavaバイトコードをサーバ110によって実行される動作に翻訳する責任を有する。JVM1120は、アプリケーションプログラム、たとえばプログラム1110の性能に影響を与えるあらゆるパラメータを含む。
【0012】
マシン120は、制御パネル1220を表示することができるモニタまたは画面を含む。この図1の実施例では、制御パネル1220はサーバ110からリモートであり、すなわち、制御パネル1220は通信リンク130を介してサーバ110と通信する。しかしながら、制御パネル1220は、ローカルであってよく、たとえば、サーバ110に対してローカルであるモニタに表示されてよい。一実施形態では、制御パネル1220は、ユーザがJVM1120にアクセスしそれを変更するのを可能にする、JVM1120から呼出されるソフトウェアパッケージである。さらに、Java環境を提供している機関に関連する顧客サポート技術者は、グラフィカルユーザインタフェース(GUI)の形態の制御パネル1220を介して、リモートにプログラム1110の性能を分析し向上させる。
【0013】
通信リンク130は、サーバ110がマシン120と通信するためのメカニズムである。通信リンク130は、伝送制御プロトコル/インターネットプロトコル(Transmission Control Protocol/Internet Protocol(TCP/IP))、公衆交換電話網(Public Switched Telephone Network(PSTN))、デジタル加入者線(Digital Subscriber Line(DSL))、ケーブルネットワーク、衛星対応、無線対応等の通信プロトコルのうちの1つまたは組合せを利用する単一ネットワークかまたはネットワークの組合せであってよい。一実施形態では、通信リンク130はインターネットである。
【0014】
Java仮想マシンのコンフィギュレーション
Java仮想マシン1120は、あらゆる機能を実行し、あらゆるパラメータを含み、それらはともにプログラム1110の性能に影響を与える。たとえば、JVM1120は、実行中のJavaプログラムがメモリを使い尽さないようにサーバ110のメモリのデータを管理する、ガーベジコレクション(garbage collection)を実行する。メモリの管理は時間と資源とを費やし、そのためプログラム1110の性能に影響を与える可能性がある。ガーベジコレクションの頻度を変更することにより、プログラム1110の性能が変化する。一実施形態では、JVM1120は、ガーベジコレクションがどれくらいの頻度で実行されるべきかを示す閾値と、メモリブロックに対しガーベジコレクションが実行される優先度を示すメカニズムと、を含む。ヒープは、ガーベジコレクションが行われるオブジェクトが配置されるメモリロケーションである。ヒープが充填されると、ガーベジコレクタが始動する。ヒープが小さいほど、ガーベジコレクションが頻繁に発生し、そのためシステム性能が劣化する可能性がある。JVM1120は、ヒープサイズを調整するパラメータを含む。
【0015】
「ホットな」Javaプログラムメソッドは、極めてしばしば呼出され、インタプリタ型ではなくコンパイル型で実行される。それは、コンパイル型メソッドの実行はインタプリタ型メソッドの実行より高速であるためである。一実施形態では、JVM1120は、メソッドがホットであるか否かを判断する閾値を含む。たとえば、5000という閾値は、メソッドが少なくとも5000回呼出されるまではホットメソッドとみなされないことを示す。同様に、10000という閾値は、メソッドが少なくとも10000回呼出されるまではホットメソッドとみなされないことを示す。ホットメソッドはしばしばプログラムにおいて呼出されるため、ホットメソッドのセットは、プログラムのクリティカル部分といえる。
【0016】
Javaメソッドを、異なるレベルの積極性(aggressiveness)でコンパイルすることができる。積極的にコンパイルされるメソッドほど、それほど積極的にコンパイルされないメソッドより最適化のために考慮されるコードの範囲または領域が広く、そのためコンパイルするコードが多い可能性がある。この結果、多くのコードを有する、より積極的にコンパイルされるメソッドが、コードの少ないメソッドと同程度の頻度ではキャッシュに格納することができないため、コンパイルにより長い時間がかかり、かつ/または命令キャッシュミス率が高くなる可能性がある。一実施形態では、JVM1120は、ユーザがメソッドをコンパイルする積極性を設定するためのあらゆるフラグを含む。また、JVM1120は、要求時にメソッドが強制的にコンパイルされるようにするメカニズムも可能とする。一実施形態では、コンパイラは「最適化コンパイラ」であるため、再コンパイルを強制することは、最適化を強制することを意味してよく、何をおよび/またはどの程度最適化するかは、最適化コンパイラによって使用されるパラメータおよび/または閾値に基づく。さらに、ホットメソッドはプログラムのクリティカル部分と言えるため、ホットメソッドの再コンパイルを強制することは、プログラムの最適化を強制することであると言える。
【0017】
また、JVM1120は、実行中のプログラムの一部を通常その部分かまたはメソッドのよりよく最適化されたバージョンよって置換することを言う、オンスタックリプレースメント(on−stack replacement)を強制するメカニズムも含む。
【0018】
JVM1120は、最初にサーバ110にインストールされた時、パラメータのセットに合せて構成され、そのため何らかの所定の機能を実行することになっている。しかしながら、ユーザは、たとえば制御パネル1220を介して、アプリケーションプログラム1110およびJVM1120が実行している間にこれらパラメータを調整することができる。
【0019】
Java仮想マシンのコンフィギュレーションの変更
本発明の実施形態により、ユーザは、JVM1120のコンフィギュレーションをリアルタイムに、すなわち「オンザフライ(on the fly)」で(これは通常、プログラム1110が実行中であるまたは実行されているという事実を言う)変更することができる。JVM1120のコンフィギュレーションを変更することは、あらゆるパラメータおよび閾値を調整することを含み、アプリケーション1110および/またはJVM1120のチューニング、デバッギングおよび/または性能の向上が望ましい場合に適用可能である。例示の目的のために、この文書では、性能の向上という用語を使用する。しかしながら、例示的な概念は、向上、チューニング、デバッギングおよびそれらの等価に適用可能である。JVM1120のチューニングは、一般に、新しい機能がアプリケーション1110に追加される、アプリケーション1110の負荷が変化する、JVM1120の新しいバージョンが導入される、JVM1120により新しいアプリケーションが最初に実行される等の場合に発生する。
【0020】
制御パネル1220を介して、ユーザは、たとえばJVM1120内部のトレース特性をその「オン」状態に設定することにより、JVM1120のトレースを起動することができる。トレースを通して、ユーザは、性能の低下の原因を識別するために有用な情報を獲得する。そして、ユーザは、獲得した情報を分析し、必要に応じてJVM1120のコンフィギュレーションを変更する。JVM1120のコンフィギュレーションを変更することは、JVM1120が実行するあらゆる動作の頻度および持続時間を制御するか、またはプログラムのいずれの部分をJVM1120の最適化コンパイラを通して処理するべきか等の、プログラム1110の最適化レベルに直接影響を与える、あらゆる閾値を調整することを含む。たとえば、ユーザは、ガーベジコレクションの頻度を変更して新たな頻度を即座に起動する、コードキャッシュのコードを再生成する、等行ってよい。
【0021】
パラメータおよび実施態様次第で、JVM1120の各パラメータは、制御パネル1220に表示されるオン/オフボタン、スライディングバー、選択リスト等の制御メカニズムに対応する。ユーザは、対応する制御メカニズムを調整することによりパラメータを調整する。たとえば、強制されたコンパイルまたは強制されたオンスタックリプレースメントの場合、メソッドはオン/オフボタンに対応し、このボタンをクリックすることにより、対応する強制されたコンパイルまたは強制されたオンスタックリプレースメントが可能になりまたは不能になる。別の例では、ガーベジコレクションをトリガする閾値か、またはメソッドがホットであるものと示す閾値等の閾値を設定するパラメータが、閾値の範囲に対応するスライディングバーによって表現される。スライディングバーを調整することにより、対応する閾値が調整される。
【0022】
一実施形態では、プログラム1110が実行している間に調整可能であることが望ましいパラメータは、サーバ110の共有メモリに格納される。このメモリは、複数のプロセスによって変更することができるメモリの領域を言う。制御パネル1220とJVM1120とはともに、この共有メモリにアクセスすることができる2つのプロセスであるとみなされる。プロセスとしての制御パネル1220を介して、ユーザは、共有メモリのパラメータ値を変更し、それにより、アプリケーションプログラム1110が新たに変更されたパラメータによって即座に実行されることを可能にし、その結果アプリケーション1110の性能がリアルタイムに向上する。代替実施形態では、パラメータはJVM1120のデータ空間に格納され、制御パネル1220およびJVM1120は2つのプロセスのままである。そして、ユーザは、プロセス間通信(InterProcess Communication(IPC))プロトコルを使用して、JVM1220のデータ空間のパラメータを直接調整する。代替実施形態では、制御パネル1120はJVM1120の一部であり、ユーザは制御パネル1220を介してJVM1120のデータ空間からのパラメータを変更する。プロセスは、実行プログラムまたはタスクとして定義することができ、それは、プログラムとオペレーティングシステムによって使用される情報を保持するブックとの組合せを言う。タスクは、プログラムをタスク番号で識別する。プロセスは、プロセスの他の部分から独立して実行することができるスレッド内に生成することができる。
【0023】
ユーザは、制御パネル1220を介して、プログラム1110の性能をリアルタイムに観察し、かかる性能を向上させる適当な動作を行うことができる。たとえば、ユーザは、プログラム1110およびJVM1120がいかに実行しているかをユーザが見るのを可能にするJVM1120のトレース機能を起動することにより、プログラム1110の何のメソッドがインタプリタ型ではなくコンパイル型になるか、キャッシュミス率は何か、あらゆるパラメータの閾値がいかなる値に設定されるか、等を識別する。観察とリアルタイムに獲得されるデータとに基づいて、ユーザは、既存のデータを分析する、JVM1120の新たなデータの各種セットと新たなコンフィギュレーションとを有するプログラム1110を実行することにより実験を行う等により、問題を解決する。望ましい場合、ユーザは、利用可能な性能ツールを使用することにより、データ、プログラム1110、JVM1120等を分析する。性能分析ツールの例には、カリフォルニア州、Santa Claraのインテル(Intel)によるProspect、Gprof、Vtune、カリフォルニア州、Palo Altoのヒューレット・パッカード・カンパニー(Hewlett−Packard Company)によるHPJmeterおよびGlance等が含まれる。たとえば、ユーザは、メソッドが極めてしばしば呼出されるが、その対応するホットメソッド閾値は非常に高い値に設定されている、ということを観察することにより、この値を低下させることによって、このメソッドがホットメソッドとみなされそれによりインタプリタ型ではなくコンパイル型で実行されるようにする。対照的に、メソッドが非常に積極的にコンパイルされているために非常に多くのキャッシュミスをもたらす場合、ユーザは、そのメソッドをより積極的でないオプションで再コンパイルする。デバッギングプロセスを支援するために、ユーザは、メソッドAのコンパイルを強制し、かつ/またはメソッドBのオンスタックリプレースメントを強制する等を行う。
【0024】
一実施形態では、各デバッギングセッション後に、JVM1120のコンフィギュレーションテンプレートが生成され、たとえばJVM1120のあらゆるパラメータの新しい値を保持するファイルに格納される。このように、各テンプレートは、通常、アプリケーション1110がデバグされ実行される、特定のかつ明確なプログラム負荷および環境に関連付けられる。コンフィギュレーションテンプレートは、顧客に対し、JVM1120を再構成して、同様の状況で使用できるようにする迅速な方法を提供する。たとえば、アプリケーション1110がデータベース要求を高負荷で実行している場合、テンプレートT1が生成され、アプリケーション1110がウェブサービスを実行している場合、テンプレートT2が生成され、等である。データベースまたはウェブサービスを実行しているアプリケーションが発生すると、ユーザは、迅速にテンプレートT1またはT2をそれぞれロードすることができる。
【0025】
プログラム性能を向上させる方法を示すステップ
図2は、一実施形態によるプログラム性能を向上させる方法を示すフローチャートである。
【0026】
ステップ204において、ユーザは、制御パネル1220を使用してアプリケーション1110およびJava仮想マシン1120にアクセスする。
【0027】
ステップ208において、ユーザは、アプリケーション1110の性能を検査する。
【0028】
ステップ212において、ユーザは、アプリケーション1110の性能が満足のいくものであるか否かを判断する。性能が不満足なものである場合、ユーザは、ステップ216において、JVM1120のトレースを起動する。
【0029】
ステップ220において、ユーザはトレースされたデータを分析する。
【0030】
ステップ224において、ユーザは、たとえば各種閾値および/またはパラメータを変更することにより、JVM1120を再構成する。
【0031】
ステップ228において、ユーザは、必要な場合、ホットメソッドの再コンパイルを強制し、かつ/またはいくつかの目下実行中のメソッドのオンスタックリプレースメントを強制する、等を行う。
【0032】
そして、ユーザは、ステップ212においてアプリケーション1110の性能が満足のいくものであると判断するまで、上記ステップ208、212、216、220、224および228を繰返す。性能が満足のいくものである場合、ユーザは、ステップ232において、JVM1120のコンフィギュレーションが変更されたか否かを判断し、変更された場合、ユーザは、ステップ236において、新たなコンフィギュレーションを保存する。本方法は、ステップ240において完了する。しかしながら、JVM1120のコンフィギュレーションが変更されなかった場合、ユーザは、ステップ236におけるコンフィギュレーションの保存のステップをスキップし、方法はステップ240で完了する。
【0033】
本発明の実施形態はいくつかの利点を提供する。例示の目的のために、チューニングという用語を使用するが、これら利点は、性能の向上、パラメータの調整等、他の同様な状況において適用可能である。アプリケーション1110のチューニングを、リアルタイムに、アプリケーション1110が実行している場所からリモートに、実負荷下で実行することができる。別のチューニング環境を構築する必要はない。チューニングが単純で容易で安価となるため、チューニングをより頻繁に実行することができる。
【0034】
コンピュータシステム概観
図3は、本発明の一実施形態を実施することができるコンピュータシステム300を示すブロック図である。たとえば、コンピュータシステム300を、サーバ110またはデバッギングマシン120等として動作するようにように実施することができる。一実施形態では、コンピュータシステム300は、すべてバス324に接続される、中央演算処理装置(CPU)304と、ランダムアクセスメモリ(RAM)308と、リードオンリメモリ(ROM)312と、記憶装置316と、通信インタフェース320とを含む。
【0035】
CPU304は、ロジックを制御し、情報を処理し、コンピュータシステム300内のアクティビティを調整する。一実施形態では、CPU304は、たとえば入力装置328から表示装置332へのデータの移動を調整することにより、RAM308およびROM312に格納された命令を実行する。CPU304は、1つまたは複数のプロセッサを含んでよい。
【0036】
RAM308は、通常メインメモリと呼ばれ、CPU304によって実行すべき情報および命令を一時的に格納する。RAM308内の情報は、入力装置328から取得されるか、またはCPU304によって実行される命令によって要求されるアルゴリズム的プロセスの一部としてCPU304によって生成されてよい。
【0037】
ROM312は、一旦ROMチップに書込まれると読取専用であり変更または除去されない、情報および命令を格納する。一実施形態では、ROM312は、コンピュータシステム300のコンフィギュレーションおよび初期動作に対するコマンドを格納する。
【0038】
フロッピディスク、ディスクドライブまたはテープドライブ等の記憶装置316は、コンピュータシステム300が使用する情報を永続的に格納する。
【0039】
通信インタフェース320により、コンピュータシステム300は他のコンピュータまたは機器とインタフェースすることができる。通信インタフェース320は、たとえば、モデム、サービス統合デジタル網(ISDN)カード、ローカルエリアネットワーク(LAN)ポート等であってよい。当業者は、モデムまたはISDNカードが電話回線を介してデータ通信を提供し、LANポートがLANを介してデータ通信を提供することを認めるであろう。また、通信インタフェース320は、無線通信を可能としてもよい。
【0040】
バス324は、コンピュータシステム300が使用する情報を通信するいかなる通信メカニズムとすることも可能である。図3の実施例では、バス324は、CPU304、RAM308、ROM312、記憶装置316、通信インタフェース320等の間でデータを転送する媒体である。
【0041】
コンピュータシステム300は、一般に、入力装置328と表示装置332とカーソル制御336とに結合される。英数字キーおよび他のキーを含むキーボード等の入力装置328は、情報およびコマンドをCPU304に通信する。ブラウン管(CRT)等の表示装置332は、コンピュータシステム300のユーザに対して情報を表示する。マウス、トラックボールまたはカーソル方向キー等のカーソル制御336は、方向情報およびコマンドをCPU304に通信し、表示装置332上でのカーソル移動を制御する。
【0042】
コンピュータシステム300は、1つまたは複数のネットワークを通して他のコンピュータまたは機器と通信することができる。たとえば、コンピュータシステム300は、通信インタフェース320を使用することにより、ネットワーク340を通して、プリンタ348に接続された別のコンピュータ344と、またはワールドワイドウェブ352を通してサーバ356と通信する。ワールドワイドウェブ352は、一般に「インターネット」と呼ばれる。代替的に、コンピュータシステム300は、ネットワーク340を介してインターネット352にアクセスすることができる。
【0043】
コンピュータシステム300を使用して、上述した技法を実施してよい。各種実施形態において、CPU304は、RAM308にもたらされる命令を実行することにより本技法のステップを実施する。代替実施形態では、上述した技法を実施するために、ソフトウェア命令の代りにまたはそれと組合せてハードワイヤード回路を使用してよい。したがって、本発明の実施形態は、ソフトウェア、ファームウェア、ハードウェアまたは回路のうちの任意の1つまたは組合せに限定されない。
【0044】
CPU304によって実行される命令は、1つまたは複数のコンピュータ読取可能媒体に格納され、かつ/またはそれによって達成されてよい。コンピュータ読取可能媒体とは、コンピュータがそこから情報を読出す任意の媒体を言う。コンピュータ読取可能媒体は、例えば,フロッピディスク、ハードディスク、ジップ(zip)ドライブカートリッジ、磁気テープまたは他の任意の磁気媒体、CD−ROM、CD−RAM、DVD−ROM、DVD−RAMまたは他の任意の光媒体、紙テープ、パンチカードまたは孔のパターンを有する他の任意の物理媒体、RAM、ROM、EPROMまたは他の任意のメモリチップまたはカートリッジであってよい。また、コンピュータ読取可能媒体は、同軸ケーブル、銅線、光ファイバ、音波または電磁波、容量結合または誘導結合等であってもよい。例として、CPU304が実行すべき命令は、1つまたは複数のソフトウェアプログラムの形式であり、バス324を介してコンピュータシステム300とインタフェースするCD−ROMに最初に格納される。コンピュータシステム300は、これらの命令をRAM308にロードし、いくつかの命令を実行し、いくつかの命令を通信インタフェース320、モデムおよび電話線を介してネットワーク、たとえばネットワーク340、インターネット352等に送信する。ネットワークケーブルを介してデータを受取るリモートコンピュータは、受取った命令を実行し、そのデータを、記憶装置316に格納されるようにコンピュータシステム300に送信する。
【0045】
上述した明細書において、本発明を、特定の実施形態を参照して説明した。しかしながら、本発明のより広い精神および範囲から逸脱することなく、あらゆる変更および変形を行ってよい、ということが明らかとなろう。したがって、明細書および図面は、限定的ではなく例示的であるとみなされなければならない。
【図面の簡単な説明】
【図1】本発明の実施形態を実施することができるシステムの図。
【図2】一実施形態によるプログラムの性能を向上させる方法を示すフローチャート。
【図3】本発明の実施形態を実施することができるコンピュータシステムを示す図。
【符号の説明】
1110 Javaアプリケーション
1120 Java仮想マシン
130 通信リンク
1220 制御パネル
【発明の属する技術分野】
本発明は、概してコンピュータプログラムに関し、特に実行中のかかるプログラムの性能を向上させることに関する。
【0002】
【従来の技術】
最初許容可能に実行中のアプリケーションプログラムは、長い間実行された後、プログラムの作業負荷特性の変化を含むあらゆる理由により、性能が低下する可能性がある。たとえば、Java実行環境(Java Runtime Environment(JRE))において、Java仮想マシン(Java Virtual Machine(JVM))は、Javaアプリケーションの実行速度を上げるために動的最適化コンパイラに頼る。アプリケーションが実行している間、JVMは、最も頻繁に呼出されるメソッド、すなわち「ホット(hot)」メソッドを識別し、それらを最適化し、最適化したメソッドをコードキャッシュに配置することにより、これらのメソッドの後続する呼出しが、それらメソッドのキャッシュバージョンを使用することでより効率的になるようにする。コードキャッシュは、ホットメソッドの最適化コードを格納するメモリ内の指定領域である。ホットメソッドのセットは、通常、プログラムが実行する特定のタイプの負荷かまたは動作のセットに関連付けられる。2つの異なる負荷を実行しているプログラムは、ホットメソッドの2つの異なるセットを提供する。たとえば、税金プログラムは、個人に対して税金を決める場合、法人に対して税金を決める同じ税金プログラムに関連するホットメソッドのセットとは異なるホットメソッドのセットに関連する。それは、個人に対して税金を決めるメソッドは、法人に対して税金を決めるメソッドとは異なるためである。したがって、ホットメソッドは、通常、プログラム負荷が変化した場合に識別される。さらにホットメソッドが識別され最適化されるにしたがい、アプリケーションはより効率的に実行する。しかしながら、アプリケーションがある期間実行した後、ホットメソッドは安定状態に達し、すなわち、いかなる新たなホットメソッドも識別することができなくなる。アプリケーション性能は、安定状態メソッドがいかに適切に最適化されるかによって決まる。
【0003】
アプリケーション最適化のレベルおよび範囲に影響を与える閾値は、通常、Java環境が顧客に出荷される前に事前設定される。積極的な(aggressive)閾値も保守的な(conservative)閾値もともに、性能を低下させる可能性がある。たとえば、コンパイル中にインライン化すべきメソッドのコードの量が多い積極的な閾値は、過度の命令キャッシュ(I−cache)ミスをもたらす可能性があり、保守的な閾値は、コードの大部分を最適化されないままにする。両方の状況により、アプリケーション性能が低下する。
【0004】
一般に、ユーザは、性能が低下しているアプリケーションを認識すると、そのアプリケーションを検査し、アプリケーション性能に影響を与えるJVMのパラメータを識別し、これらのパラメータに対してより適切な値を再割当てする。しかしながら、新たな変化が有効であるために、変更されたパラメータに基づく新たな環境をインストールしなければならず、このためには既存のアプリケーションを停止させる必要がある。アプリケーションが停止されている間、そのアプリケーションを使用することができず、業務の混乱がもたらされる。あらゆる状況において、問題を補正するために、ユーザはJava環境を提供する事業機関と連係する必要がある。これらの状況において、ユーザは、その機関の現場に物理的に出向かなければならず、そこで、アプリケーションのソフトウェアおよびハードウェア環境と性能低下をもたらしている状況とを再現する必要があり、それらはすべて非常にコストがかかる可能性がある。多くの状況では、性能低下をもたらす状況を作り出すことは容易ではない。さらに、アプリケーションがデバグされた後、一般的に新たなJava環境は変更され、その後、ユーザは、ユーザのマシンにおける変更を含めて新たなJava環境をインストールしなければならない。これには、また、アプリケーションを停止させる必要があり、上述したような混乱をもたらす。
【0005】
【発明が解決しようとする課題】
上述したことに基づき、上記欠点および関連する問題を解決するメカニズムへのニーズが高まっている。
【0006】
【課題を解決するための手段】
本発明は、あらゆる実施形態において、プログラムの性能を向上させる技法を提供する。一実施形態では、プログラムは、Java言語で書かれ、コンフィギュレーションを有するJava仮想マシン(JVM)を含むJava実行環境(JRE)で実行する。JVMにアクセスすることができる制御パネルが呼出される。制御パネルを介して、ユーザは、Javaプログラムの実行を観察し、実行の結果を分析し、JVMのコンフィギュレーションを変更し、実行中のプログラムのクリティカル部分の再最適化を強制する。プログラム実行を観察し、結果を分析し、Javaマシンのコンフィギュレーションを変更し、プログラムのクリティカル部分の再最適化を強制する上記ステップを繰返すことにより、ユーザは、プログラムの性能全体を向上させる。
【0007】
本発明を、添付図面の各図において実施例として例示する。図面において、同じ参照符号は同様の要素を参照する。
【0008】
【発明の実施の形態】
以下の説明では、説明の目的で、本発明の完全な理解を提供するために多くの具体的な詳細を示す。しかしながら、当業者には、本発明がこれらの具体的な詳細無しに実施されてよい、ということが明らかとなろう。すなわち、周知の構造および装置は、発明を不明確にするのを回避するためにブロック図形態で示す。
【0009】
図1は、本発明の実施形態を実施することができるシステム100を示す。システム100は、第1のコンピュータ110と第2のコンピュータ120とを含み、それらを、例示の目的のために、それぞれアプリケーションサーバ110と性能デバッギングマシン120と呼ぶ。サーバ110とマシン120とは、通信リンク130を介して接続される。
【0010】
サーバ110は、あらゆるアプリケーションプログラムを実行する。それらのうちの1つを、プログラム1110として示す。一実施形態では、プログラム1110は、Java仮想マシン(JVM)1120を含むJava実行環境(JRE)内で作動するJavaプログラムである。通常、プログラム1110は、JVM1120の制御下で最適化され実行される。そして、プログラム1110は、通常通信リンク130、インターネット等のネットワークを介してユーザにサービスを提供する。これらサービスには、たとえば、ウェブ、データベース、電子メール、セキュリティ、通信等が含まれる。
【0011】
Java仮想マシン1120は、JVM1120が動作するコンピュータプラットフォームから独立した、Javaバイトコードを実行する環境を提供する。概して、JVM1120は、ハードウェアで実行しているソフトウェアとサーバ110のオペレーティングシステムとで実現される。このため、JVM1120は、バイトコードの形式での汎用プログラム表現がサーバ110で実行されるのを可能にする環境を提供する。JVM1120は、Javaプログラムを最適化しJavaバイトコードをサーバ110によって実行される動作に翻訳する責任を有する。JVM1120は、アプリケーションプログラム、たとえばプログラム1110の性能に影響を与えるあらゆるパラメータを含む。
【0012】
マシン120は、制御パネル1220を表示することができるモニタまたは画面を含む。この図1の実施例では、制御パネル1220はサーバ110からリモートであり、すなわち、制御パネル1220は通信リンク130を介してサーバ110と通信する。しかしながら、制御パネル1220は、ローカルであってよく、たとえば、サーバ110に対してローカルであるモニタに表示されてよい。一実施形態では、制御パネル1220は、ユーザがJVM1120にアクセスしそれを変更するのを可能にする、JVM1120から呼出されるソフトウェアパッケージである。さらに、Java環境を提供している機関に関連する顧客サポート技術者は、グラフィカルユーザインタフェース(GUI)の形態の制御パネル1220を介して、リモートにプログラム1110の性能を分析し向上させる。
【0013】
通信リンク130は、サーバ110がマシン120と通信するためのメカニズムである。通信リンク130は、伝送制御プロトコル/インターネットプロトコル(Transmission Control Protocol/Internet Protocol(TCP/IP))、公衆交換電話網(Public Switched Telephone Network(PSTN))、デジタル加入者線(Digital Subscriber Line(DSL))、ケーブルネットワーク、衛星対応、無線対応等の通信プロトコルのうちの1つまたは組合せを利用する単一ネットワークかまたはネットワークの組合せであってよい。一実施形態では、通信リンク130はインターネットである。
【0014】
Java仮想マシンのコンフィギュレーション
Java仮想マシン1120は、あらゆる機能を実行し、あらゆるパラメータを含み、それらはともにプログラム1110の性能に影響を与える。たとえば、JVM1120は、実行中のJavaプログラムがメモリを使い尽さないようにサーバ110のメモリのデータを管理する、ガーベジコレクション(garbage collection)を実行する。メモリの管理は時間と資源とを費やし、そのためプログラム1110の性能に影響を与える可能性がある。ガーベジコレクションの頻度を変更することにより、プログラム1110の性能が変化する。一実施形態では、JVM1120は、ガーベジコレクションがどれくらいの頻度で実行されるべきかを示す閾値と、メモリブロックに対しガーベジコレクションが実行される優先度を示すメカニズムと、を含む。ヒープは、ガーベジコレクションが行われるオブジェクトが配置されるメモリロケーションである。ヒープが充填されると、ガーベジコレクタが始動する。ヒープが小さいほど、ガーベジコレクションが頻繁に発生し、そのためシステム性能が劣化する可能性がある。JVM1120は、ヒープサイズを調整するパラメータを含む。
【0015】
「ホットな」Javaプログラムメソッドは、極めてしばしば呼出され、インタプリタ型ではなくコンパイル型で実行される。それは、コンパイル型メソッドの実行はインタプリタ型メソッドの実行より高速であるためである。一実施形態では、JVM1120は、メソッドがホットであるか否かを判断する閾値を含む。たとえば、5000という閾値は、メソッドが少なくとも5000回呼出されるまではホットメソッドとみなされないことを示す。同様に、10000という閾値は、メソッドが少なくとも10000回呼出されるまではホットメソッドとみなされないことを示す。ホットメソッドはしばしばプログラムにおいて呼出されるため、ホットメソッドのセットは、プログラムのクリティカル部分といえる。
【0016】
Javaメソッドを、異なるレベルの積極性(aggressiveness)でコンパイルすることができる。積極的にコンパイルされるメソッドほど、それほど積極的にコンパイルされないメソッドより最適化のために考慮されるコードの範囲または領域が広く、そのためコンパイルするコードが多い可能性がある。この結果、多くのコードを有する、より積極的にコンパイルされるメソッドが、コードの少ないメソッドと同程度の頻度ではキャッシュに格納することができないため、コンパイルにより長い時間がかかり、かつ/または命令キャッシュミス率が高くなる可能性がある。一実施形態では、JVM1120は、ユーザがメソッドをコンパイルする積極性を設定するためのあらゆるフラグを含む。また、JVM1120は、要求時にメソッドが強制的にコンパイルされるようにするメカニズムも可能とする。一実施形態では、コンパイラは「最適化コンパイラ」であるため、再コンパイルを強制することは、最適化を強制することを意味してよく、何をおよび/またはどの程度最適化するかは、最適化コンパイラによって使用されるパラメータおよび/または閾値に基づく。さらに、ホットメソッドはプログラムのクリティカル部分と言えるため、ホットメソッドの再コンパイルを強制することは、プログラムの最適化を強制することであると言える。
【0017】
また、JVM1120は、実行中のプログラムの一部を通常その部分かまたはメソッドのよりよく最適化されたバージョンよって置換することを言う、オンスタックリプレースメント(on−stack replacement)を強制するメカニズムも含む。
【0018】
JVM1120は、最初にサーバ110にインストールされた時、パラメータのセットに合せて構成され、そのため何らかの所定の機能を実行することになっている。しかしながら、ユーザは、たとえば制御パネル1220を介して、アプリケーションプログラム1110およびJVM1120が実行している間にこれらパラメータを調整することができる。
【0019】
Java仮想マシンのコンフィギュレーションの変更
本発明の実施形態により、ユーザは、JVM1120のコンフィギュレーションをリアルタイムに、すなわち「オンザフライ(on the fly)」で(これは通常、プログラム1110が実行中であるまたは実行されているという事実を言う)変更することができる。JVM1120のコンフィギュレーションを変更することは、あらゆるパラメータおよび閾値を調整することを含み、アプリケーション1110および/またはJVM1120のチューニング、デバッギングおよび/または性能の向上が望ましい場合に適用可能である。例示の目的のために、この文書では、性能の向上という用語を使用する。しかしながら、例示的な概念は、向上、チューニング、デバッギングおよびそれらの等価に適用可能である。JVM1120のチューニングは、一般に、新しい機能がアプリケーション1110に追加される、アプリケーション1110の負荷が変化する、JVM1120の新しいバージョンが導入される、JVM1120により新しいアプリケーションが最初に実行される等の場合に発生する。
【0020】
制御パネル1220を介して、ユーザは、たとえばJVM1120内部のトレース特性をその「オン」状態に設定することにより、JVM1120のトレースを起動することができる。トレースを通して、ユーザは、性能の低下の原因を識別するために有用な情報を獲得する。そして、ユーザは、獲得した情報を分析し、必要に応じてJVM1120のコンフィギュレーションを変更する。JVM1120のコンフィギュレーションを変更することは、JVM1120が実行するあらゆる動作の頻度および持続時間を制御するか、またはプログラムのいずれの部分をJVM1120の最適化コンパイラを通して処理するべきか等の、プログラム1110の最適化レベルに直接影響を与える、あらゆる閾値を調整することを含む。たとえば、ユーザは、ガーベジコレクションの頻度を変更して新たな頻度を即座に起動する、コードキャッシュのコードを再生成する、等行ってよい。
【0021】
パラメータおよび実施態様次第で、JVM1120の各パラメータは、制御パネル1220に表示されるオン/オフボタン、スライディングバー、選択リスト等の制御メカニズムに対応する。ユーザは、対応する制御メカニズムを調整することによりパラメータを調整する。たとえば、強制されたコンパイルまたは強制されたオンスタックリプレースメントの場合、メソッドはオン/オフボタンに対応し、このボタンをクリックすることにより、対応する強制されたコンパイルまたは強制されたオンスタックリプレースメントが可能になりまたは不能になる。別の例では、ガーベジコレクションをトリガする閾値か、またはメソッドがホットであるものと示す閾値等の閾値を設定するパラメータが、閾値の範囲に対応するスライディングバーによって表現される。スライディングバーを調整することにより、対応する閾値が調整される。
【0022】
一実施形態では、プログラム1110が実行している間に調整可能であることが望ましいパラメータは、サーバ110の共有メモリに格納される。このメモリは、複数のプロセスによって変更することができるメモリの領域を言う。制御パネル1220とJVM1120とはともに、この共有メモリにアクセスすることができる2つのプロセスであるとみなされる。プロセスとしての制御パネル1220を介して、ユーザは、共有メモリのパラメータ値を変更し、それにより、アプリケーションプログラム1110が新たに変更されたパラメータによって即座に実行されることを可能にし、その結果アプリケーション1110の性能がリアルタイムに向上する。代替実施形態では、パラメータはJVM1120のデータ空間に格納され、制御パネル1220およびJVM1120は2つのプロセスのままである。そして、ユーザは、プロセス間通信(InterProcess Communication(IPC))プロトコルを使用して、JVM1220のデータ空間のパラメータを直接調整する。代替実施形態では、制御パネル1120はJVM1120の一部であり、ユーザは制御パネル1220を介してJVM1120のデータ空間からのパラメータを変更する。プロセスは、実行プログラムまたはタスクとして定義することができ、それは、プログラムとオペレーティングシステムによって使用される情報を保持するブックとの組合せを言う。タスクは、プログラムをタスク番号で識別する。プロセスは、プロセスの他の部分から独立して実行することができるスレッド内に生成することができる。
【0023】
ユーザは、制御パネル1220を介して、プログラム1110の性能をリアルタイムに観察し、かかる性能を向上させる適当な動作を行うことができる。たとえば、ユーザは、プログラム1110およびJVM1120がいかに実行しているかをユーザが見るのを可能にするJVM1120のトレース機能を起動することにより、プログラム1110の何のメソッドがインタプリタ型ではなくコンパイル型になるか、キャッシュミス率は何か、あらゆるパラメータの閾値がいかなる値に設定されるか、等を識別する。観察とリアルタイムに獲得されるデータとに基づいて、ユーザは、既存のデータを分析する、JVM1120の新たなデータの各種セットと新たなコンフィギュレーションとを有するプログラム1110を実行することにより実験を行う等により、問題を解決する。望ましい場合、ユーザは、利用可能な性能ツールを使用することにより、データ、プログラム1110、JVM1120等を分析する。性能分析ツールの例には、カリフォルニア州、Santa Claraのインテル(Intel)によるProspect、Gprof、Vtune、カリフォルニア州、Palo Altoのヒューレット・パッカード・カンパニー(Hewlett−Packard Company)によるHPJmeterおよびGlance等が含まれる。たとえば、ユーザは、メソッドが極めてしばしば呼出されるが、その対応するホットメソッド閾値は非常に高い値に設定されている、ということを観察することにより、この値を低下させることによって、このメソッドがホットメソッドとみなされそれによりインタプリタ型ではなくコンパイル型で実行されるようにする。対照的に、メソッドが非常に積極的にコンパイルされているために非常に多くのキャッシュミスをもたらす場合、ユーザは、そのメソッドをより積極的でないオプションで再コンパイルする。デバッギングプロセスを支援するために、ユーザは、メソッドAのコンパイルを強制し、かつ/またはメソッドBのオンスタックリプレースメントを強制する等を行う。
【0024】
一実施形態では、各デバッギングセッション後に、JVM1120のコンフィギュレーションテンプレートが生成され、たとえばJVM1120のあらゆるパラメータの新しい値を保持するファイルに格納される。このように、各テンプレートは、通常、アプリケーション1110がデバグされ実行される、特定のかつ明確なプログラム負荷および環境に関連付けられる。コンフィギュレーションテンプレートは、顧客に対し、JVM1120を再構成して、同様の状況で使用できるようにする迅速な方法を提供する。たとえば、アプリケーション1110がデータベース要求を高負荷で実行している場合、テンプレートT1が生成され、アプリケーション1110がウェブサービスを実行している場合、テンプレートT2が生成され、等である。データベースまたはウェブサービスを実行しているアプリケーションが発生すると、ユーザは、迅速にテンプレートT1またはT2をそれぞれロードすることができる。
【0025】
プログラム性能を向上させる方法を示すステップ
図2は、一実施形態によるプログラム性能を向上させる方法を示すフローチャートである。
【0026】
ステップ204において、ユーザは、制御パネル1220を使用してアプリケーション1110およびJava仮想マシン1120にアクセスする。
【0027】
ステップ208において、ユーザは、アプリケーション1110の性能を検査する。
【0028】
ステップ212において、ユーザは、アプリケーション1110の性能が満足のいくものであるか否かを判断する。性能が不満足なものである場合、ユーザは、ステップ216において、JVM1120のトレースを起動する。
【0029】
ステップ220において、ユーザはトレースされたデータを分析する。
【0030】
ステップ224において、ユーザは、たとえば各種閾値および/またはパラメータを変更することにより、JVM1120を再構成する。
【0031】
ステップ228において、ユーザは、必要な場合、ホットメソッドの再コンパイルを強制し、かつ/またはいくつかの目下実行中のメソッドのオンスタックリプレースメントを強制する、等を行う。
【0032】
そして、ユーザは、ステップ212においてアプリケーション1110の性能が満足のいくものであると判断するまで、上記ステップ208、212、216、220、224および228を繰返す。性能が満足のいくものである場合、ユーザは、ステップ232において、JVM1120のコンフィギュレーションが変更されたか否かを判断し、変更された場合、ユーザは、ステップ236において、新たなコンフィギュレーションを保存する。本方法は、ステップ240において完了する。しかしながら、JVM1120のコンフィギュレーションが変更されなかった場合、ユーザは、ステップ236におけるコンフィギュレーションの保存のステップをスキップし、方法はステップ240で完了する。
【0033】
本発明の実施形態はいくつかの利点を提供する。例示の目的のために、チューニングという用語を使用するが、これら利点は、性能の向上、パラメータの調整等、他の同様な状況において適用可能である。アプリケーション1110のチューニングを、リアルタイムに、アプリケーション1110が実行している場所からリモートに、実負荷下で実行することができる。別のチューニング環境を構築する必要はない。チューニングが単純で容易で安価となるため、チューニングをより頻繁に実行することができる。
【0034】
コンピュータシステム概観
図3は、本発明の一実施形態を実施することができるコンピュータシステム300を示すブロック図である。たとえば、コンピュータシステム300を、サーバ110またはデバッギングマシン120等として動作するようにように実施することができる。一実施形態では、コンピュータシステム300は、すべてバス324に接続される、中央演算処理装置(CPU)304と、ランダムアクセスメモリ(RAM)308と、リードオンリメモリ(ROM)312と、記憶装置316と、通信インタフェース320とを含む。
【0035】
CPU304は、ロジックを制御し、情報を処理し、コンピュータシステム300内のアクティビティを調整する。一実施形態では、CPU304は、たとえば入力装置328から表示装置332へのデータの移動を調整することにより、RAM308およびROM312に格納された命令を実行する。CPU304は、1つまたは複数のプロセッサを含んでよい。
【0036】
RAM308は、通常メインメモリと呼ばれ、CPU304によって実行すべき情報および命令を一時的に格納する。RAM308内の情報は、入力装置328から取得されるか、またはCPU304によって実行される命令によって要求されるアルゴリズム的プロセスの一部としてCPU304によって生成されてよい。
【0037】
ROM312は、一旦ROMチップに書込まれると読取専用であり変更または除去されない、情報および命令を格納する。一実施形態では、ROM312は、コンピュータシステム300のコンフィギュレーションおよび初期動作に対するコマンドを格納する。
【0038】
フロッピディスク、ディスクドライブまたはテープドライブ等の記憶装置316は、コンピュータシステム300が使用する情報を永続的に格納する。
【0039】
通信インタフェース320により、コンピュータシステム300は他のコンピュータまたは機器とインタフェースすることができる。通信インタフェース320は、たとえば、モデム、サービス統合デジタル網(ISDN)カード、ローカルエリアネットワーク(LAN)ポート等であってよい。当業者は、モデムまたはISDNカードが電話回線を介してデータ通信を提供し、LANポートがLANを介してデータ通信を提供することを認めるであろう。また、通信インタフェース320は、無線通信を可能としてもよい。
【0040】
バス324は、コンピュータシステム300が使用する情報を通信するいかなる通信メカニズムとすることも可能である。図3の実施例では、バス324は、CPU304、RAM308、ROM312、記憶装置316、通信インタフェース320等の間でデータを転送する媒体である。
【0041】
コンピュータシステム300は、一般に、入力装置328と表示装置332とカーソル制御336とに結合される。英数字キーおよび他のキーを含むキーボード等の入力装置328は、情報およびコマンドをCPU304に通信する。ブラウン管(CRT)等の表示装置332は、コンピュータシステム300のユーザに対して情報を表示する。マウス、トラックボールまたはカーソル方向キー等のカーソル制御336は、方向情報およびコマンドをCPU304に通信し、表示装置332上でのカーソル移動を制御する。
【0042】
コンピュータシステム300は、1つまたは複数のネットワークを通して他のコンピュータまたは機器と通信することができる。たとえば、コンピュータシステム300は、通信インタフェース320を使用することにより、ネットワーク340を通して、プリンタ348に接続された別のコンピュータ344と、またはワールドワイドウェブ352を通してサーバ356と通信する。ワールドワイドウェブ352は、一般に「インターネット」と呼ばれる。代替的に、コンピュータシステム300は、ネットワーク340を介してインターネット352にアクセスすることができる。
【0043】
コンピュータシステム300を使用して、上述した技法を実施してよい。各種実施形態において、CPU304は、RAM308にもたらされる命令を実行することにより本技法のステップを実施する。代替実施形態では、上述した技法を実施するために、ソフトウェア命令の代りにまたはそれと組合せてハードワイヤード回路を使用してよい。したがって、本発明の実施形態は、ソフトウェア、ファームウェア、ハードウェアまたは回路のうちの任意の1つまたは組合せに限定されない。
【0044】
CPU304によって実行される命令は、1つまたは複数のコンピュータ読取可能媒体に格納され、かつ/またはそれによって達成されてよい。コンピュータ読取可能媒体とは、コンピュータがそこから情報を読出す任意の媒体を言う。コンピュータ読取可能媒体は、例えば,フロッピディスク、ハードディスク、ジップ(zip)ドライブカートリッジ、磁気テープまたは他の任意の磁気媒体、CD−ROM、CD−RAM、DVD−ROM、DVD−RAMまたは他の任意の光媒体、紙テープ、パンチカードまたは孔のパターンを有する他の任意の物理媒体、RAM、ROM、EPROMまたは他の任意のメモリチップまたはカートリッジであってよい。また、コンピュータ読取可能媒体は、同軸ケーブル、銅線、光ファイバ、音波または電磁波、容量結合または誘導結合等であってもよい。例として、CPU304が実行すべき命令は、1つまたは複数のソフトウェアプログラムの形式であり、バス324を介してコンピュータシステム300とインタフェースするCD−ROMに最初に格納される。コンピュータシステム300は、これらの命令をRAM308にロードし、いくつかの命令を実行し、いくつかの命令を通信インタフェース320、モデムおよび電話線を介してネットワーク、たとえばネットワーク340、インターネット352等に送信する。ネットワークケーブルを介してデータを受取るリモートコンピュータは、受取った命令を実行し、そのデータを、記憶装置316に格納されるようにコンピュータシステム300に送信する。
【0045】
上述した明細書において、本発明を、特定の実施形態を参照して説明した。しかしながら、本発明のより広い精神および範囲から逸脱することなく、あらゆる変更および変形を行ってよい、ということが明らかとなろう。したがって、明細書および図面は、限定的ではなく例示的であるとみなされなければならない。
【図面の簡単な説明】
【図1】本発明の実施形態を実施することができるシステムの図。
【図2】一実施形態によるプログラムの性能を向上させる方法を示すフローチャート。
【図3】本発明の実施形態を実施することができるコンピュータシステムを示す図。
【符号の説明】
1110 Javaアプリケーション
1120 Java仮想マシン
130 通信リンク
1220 制御パネル
Claims (11)
- コンピュータプログラムの性能を向上させる方法であって、
前記プログラムを実行し、それにより、該プログラムの性能に影響を与える、値を有するパラメータを含む仮想マシンを実行するステップと、
前記プログラム実行、前記仮想マシンおよび前記パラメータにアクセスすることができる制御パネルを呼出すステップと、
前記制御パネルを介し、前記プログラムおよび前記仮想マシンが実行している間に、
前記パラメータの前記値を新たな値になるように調整するステップと、
前記新たな値を有する前記パラメータにより前記プログラムを実行するステップと、
前記実行するステップの結果を分析するステップと、
前記分析するステップの結果に基づいてアクションを取るステップと、
を含む方法。 - 前記プログラムは、Java言語で書かれたものであり、前記仮想マシンはJava仮想マシンである請求項1記載の方法。
- 前記アクションを取るステップは、前記調整するステップと、前記実行するステップと、前記分析するステップと、前記アクションを取るステップとを繰返すことを含む請求項1記載の方法。
- 前記アクションを取るステップは、前記プログラムのメソッドのコンパイルを強制することと、該プログラムのメソッドのオンスタックリプレースメント(on−stack replacement)を強制することと、該プログラムを実行する前記コンピュータのメモリヒープを再構成することと、該コンピュータのメモリに対しガーベジコレクションを実行することと、前記仮想マシンを再構成することとのうちの1つまたは組合せから選択される請求項1記載の方法。
- 前記パラメータの前記値は、前記制御パネルと前記仮想マシンとがアクセス可能な共有メモリに格納される請求項1記載の方法。
- 前記調整するステップは、プロセス間通信(InterProcess Communication)プロトコルを使用する請求項1記載の方法。
- 前記パラメータは、前記仮想マシンのコンフィギュレーションの一部である請求項1記載の方法。
- ネットワークを介して、前記プログラムを実行している前記コンピュータに接続された表示装置に、前記制御パネルを表示するステップをさらに含む請求項1記載の方法。
- 後の使用のために前記新たな値を保存するステップをさらに含む請求項1記載の方法。
- 前記仮想マシンのトレース機能を起動するステップをさらに含む請求項1記載の方法。
- 仮想マシンをチューニングする方法であって、
プログラムを実行し、それにより、該プログラムの性能に影響を与えるコンフィギュレーションを有する前記仮想マシンを呼出すステップと、
前記プログラム実行および前記仮想マシンの前記コンフィギュレーションにアクセスすることができる制御パネルを呼出すステップと、
前記制御パネルを介し、前記プログラムおよび前記仮想マシンが実行している間に、
前記プログラムの実行からもたらされるデータを分析するステップと、
前記分析するステップの結果に基づいて前記仮想マシンの前記コンフィギュレーションを調整するステップと、
前記プログラムを前記仮想マシンの前記調整されたコンフィギュレーションで実行するステップと、
を含み、
前記仮想マシンは、前記プログラムのプログラムコードを実行する環境を提供する方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/159,528 US7577951B2 (en) | 2002-05-30 | 2002-05-30 | Performance of computer programs while they are running |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004005650A true JP2004005650A (ja) | 2004-01-08 |
JP2004005650A5 JP2004005650A5 (ja) | 2006-06-22 |
Family
ID=29582935
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003133970A Withdrawn JP2004005650A (ja) | 2002-05-30 | 2003-05-13 | 実行中のコンピュータプログラムの性能を向上させる方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US7577951B2 (ja) |
EP (1) | EP1376351A3 (ja) |
JP (1) | JP2004005650A (ja) |
CN (1) | CN1461991A (ja) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006092532A (ja) * | 2004-09-10 | 2006-04-06 | Microsoft Corp | 最近アクセスしたリソースのデータ局所性の増加 |
JP2007226589A (ja) * | 2006-02-24 | 2007-09-06 | Oki Electric Ind Co Ltd | プログラム変換システム |
US8108855B2 (en) | 2007-01-02 | 2012-01-31 | International Business Machines Corporation | Method and apparatus for deploying a set of virtual software resource templates to a set of nodes |
JP2012198657A (ja) * | 2011-03-18 | 2012-10-18 | Fujitsu Ltd | 命令処理方法、命令処理装置、及び命令処理プログラム |
US8327350B2 (en) | 2007-01-02 | 2012-12-04 | International Business Machines Corporation | Virtual resource templates |
US8370802B2 (en) | 2007-09-18 | 2013-02-05 | International Business Machines Corporation | Specifying an order for changing an operational state of software application components |
KR20190059890A (ko) * | 2017-10-26 | 2019-05-31 | 후아웨이 테크놀러지 컴퍼니 리미티드 | 정보를 수집하는 방법 및 장치, 그리고 메모리를 해제하는 방법 및 장치 |
Families Citing this family (64)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005506630A (ja) * | 2001-10-25 | 2005-03-03 | コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ | 低オーバヘッドの例外チェック |
US7150012B2 (en) * | 2002-10-15 | 2006-12-12 | Nokia Corporation | Method and apparatus for accelerating program execution in platform-independent virtual machines |
US7395527B2 (en) | 2003-09-30 | 2008-07-01 | International Business Machines Corporation | Method and apparatus for counting instruction execution and data accesses |
US7373637B2 (en) | 2003-09-30 | 2008-05-13 | International Business Machines Corporation | Method and apparatus for counting instruction and memory location ranges |
US20050071516A1 (en) * | 2003-09-30 | 2005-03-31 | International Business Machines Corporation | Method and apparatus to autonomically profile applications |
US7937691B2 (en) | 2003-09-30 | 2011-05-03 | International Business Machines Corporation | Method and apparatus for counting execution of specific instructions and accesses to specific data locations |
US8381037B2 (en) | 2003-10-09 | 2013-02-19 | International Business Machines Corporation | Method and system for autonomic execution path selection in an application |
US7421681B2 (en) | 2003-10-09 | 2008-09-02 | International Business Machines Corporation | Method and system for autonomic monitoring of semaphore operation in an application |
US7827535B2 (en) * | 2003-12-10 | 2010-11-02 | Oracle International Corporation | Application performance tuning server-side component |
US7526757B2 (en) | 2004-01-14 | 2009-04-28 | International Business Machines Corporation | Method and apparatus for maintaining performance monitoring structures in a page table for use in monitoring performance of a computer program |
US7392370B2 (en) * | 2004-01-14 | 2008-06-24 | International Business Machines Corporation | Method and apparatus for autonomically initiating measurement of secondary metrics based on hardware counter values for primary metrics |
US7415705B2 (en) | 2004-01-14 | 2008-08-19 | International Business Machines Corporation | Autonomic method and apparatus for hardware assist for patching code |
US7895382B2 (en) | 2004-01-14 | 2011-02-22 | International Business Machines Corporation | Method and apparatus for qualifying collection of performance monitoring events by types of interrupt when interrupt occurs |
US7526616B2 (en) * | 2004-03-22 | 2009-04-28 | International Business Machines Corporation | Method and apparatus for prefetching data from a data structure |
US8135915B2 (en) * | 2004-03-22 | 2012-03-13 | International Business Machines Corporation | Method and apparatus for hardware assistance for prefetching a pointer to a data structure identified by a prefetch indicator |
US7421684B2 (en) | 2004-03-22 | 2008-09-02 | International Business Machines Corporation | Method and apparatus for autonomic test case feedback using hardware assistance for data coverage |
US7600223B2 (en) * | 2004-10-25 | 2009-10-06 | Microsoft Corporation | Abstracted managed code execution |
US20060136877A1 (en) * | 2004-12-22 | 2006-06-22 | International Business Machines Corporation | Method, system and program product for capturing a semantic level state of a program |
US20090178032A1 (en) * | 2005-03-03 | 2009-07-09 | Rongzhen Yang | Mining for performance data for systems with dynamic compilers |
US7797690B2 (en) * | 2005-03-15 | 2010-09-14 | International Business Machines Corporation | System, method and program product to optimize code during run time |
US8713524B2 (en) * | 2005-04-06 | 2014-04-29 | Microsoft Corporation | Memory management configuration |
US7464303B2 (en) * | 2005-06-09 | 2008-12-09 | International Business Machines Corporation | Autonomically adjusting configuration parameters for a server when a different server fails |
US8701095B2 (en) * | 2005-07-25 | 2014-04-15 | Microsoft Corporation | Add/remove memory pressure per object |
KR100750834B1 (ko) | 2005-10-06 | 2007-08-22 | (주)아이피엠에스 | 자바 바이트 코드의 데이터 모니터링 시 모니터링된 데이터의 호출관계 규명 방법 및 이 방법을 이용한 알고리즘을 통해 자바 어플리케이션의 각종 성능 데이터를 추출하기 위한 컴퓨터 판독 가능한 기록 매체 |
US8566820B1 (en) | 2005-12-30 | 2013-10-22 | United Services Automobile Association (Usaa) | Method and system for installing software |
US7802247B1 (en) | 2005-12-30 | 2010-09-21 | United Services Automobile Association (Usaa) | Method and system for restoring software |
US8726271B1 (en) | 2005-12-30 | 2014-05-13 | United Services Automobile Association (Usaa) | Method and system for installing software |
US7831968B1 (en) * | 2005-12-30 | 2010-11-09 | United Services Automobile Association (Usaa) | Method and system for restoring software |
US7840955B1 (en) | 2005-12-30 | 2010-11-23 | United Services Automobile Association (Usaa) | Method and system for restoring software |
US8533710B1 (en) * | 2006-08-31 | 2013-09-10 | Oracle America, Inc. | Using observed thread activity to dynamically tune a virtual machine for responsiveness |
US8286238B2 (en) * | 2006-09-29 | 2012-10-09 | Intel Corporation | Method and apparatus for run-time in-memory patching of code from a service processor |
US8458670B2 (en) * | 2007-09-27 | 2013-06-04 | Symantec Corporation | Automatically adding bytecode to a software application to determine network communication information |
US8181174B2 (en) * | 2007-12-28 | 2012-05-15 | Accenture Global Services Limited | Virtual machine configuration system |
US9306796B1 (en) * | 2008-03-18 | 2016-04-05 | Mcafee, Inc. | System, method, and computer program product for dynamically configuring a virtual environment for identifying unwanted data |
US20090293051A1 (en) * | 2008-05-22 | 2009-11-26 | Fortinet, Inc., A Delaware Corporation | Monitoring and dynamic tuning of target system performance |
US8645922B2 (en) * | 2008-11-25 | 2014-02-04 | Sap Ag | System and method of implementing a concurrency profiler |
US8375377B2 (en) * | 2009-03-06 | 2013-02-12 | International Business Machines Corporation | Controlling java virtual machine component behavior on a per-classloader basis |
US8776028B1 (en) * | 2009-04-04 | 2014-07-08 | Parallels IP Holdings GmbH | Virtual execution environment for software delivery and feedback |
US8627298B2 (en) * | 2009-12-14 | 2014-01-07 | International Business Machines Corporation | Using appropriate level of code to be executed in runtime environment using metadata describing versions of resources being used by code |
CN101853206A (zh) * | 2010-06-18 | 2010-10-06 | 北京九合创胜网络科技有限公司 | 一种软件性能的检测方法及装置 |
US9183021B2 (en) * | 2011-05-31 | 2015-11-10 | Red Hat, Inc. | Runtime optimization of application bytecode via call transformations |
CN103186412B (zh) * | 2011-12-31 | 2016-01-06 | 北京新媒传信科技有限公司 | 基于jvm服务器的性能优化方法 |
US9275377B2 (en) | 2012-06-15 | 2016-03-01 | Nvidia Corporation | System, method, and computer program product for determining a monotonic set of presets |
US10509658B2 (en) | 2012-07-06 | 2019-12-17 | Nvidia Corporation | System, method, and computer program product for simultaneously determining settings for a plurality of parameter variations |
US9092573B2 (en) | 2012-07-06 | 2015-07-28 | Nvidia Corporation | System, method, and computer program product for testing device parameters |
US9201670B2 (en) | 2012-07-06 | 2015-12-01 | Nvidia Corporation | System, method, and computer program product for determining whether parameter configurations meet predetermined criteria |
US9286247B2 (en) | 2012-07-06 | 2016-03-15 | Nvidia Corporation | System, method, and computer program product for determining settings for a device by utilizing a directed acyclic graph containing a plurality of directed nodes each with an associated speed and image quality |
US9250931B2 (en) | 2012-07-06 | 2016-02-02 | Nvidia Corporation | System, method, and computer program product for calculating settings for a device, utilizing one or more constraints |
US10668386B2 (en) | 2012-07-06 | 2020-06-02 | Nvidia Corporation | System, method, and computer program product for simultaneously determining settings for a plurality of parameter variations |
US8966462B2 (en) | 2012-08-10 | 2015-02-24 | Concurix Corporation | Memory management parameters derived from system modeling |
US9043788B2 (en) * | 2012-08-10 | 2015-05-26 | Concurix Corporation | Experiment manager for manycore systems |
US9135034B2 (en) * | 2012-08-16 | 2015-09-15 | Microsoft Technology Licensing, Llc | Imperative attribution for elements in managed runtimes |
US8789030B2 (en) | 2012-09-18 | 2014-07-22 | Concurix Corporation | Memoization from offline analysis |
US8752034B2 (en) | 2012-11-08 | 2014-06-10 | Concurix Corporation | Memoization configuration file consumed at runtime |
US8752021B2 (en) | 2012-11-08 | 2014-06-10 | Concurix Corporation | Input vector analysis for memoization estimation |
US8826254B2 (en) * | 2012-11-08 | 2014-09-02 | Concurix Corporation | Memoizing with read only side effects |
US8839204B2 (en) | 2012-11-08 | 2014-09-16 | Concurix Corporation | Determination of function purity for memoization |
US9262416B2 (en) | 2012-11-08 | 2016-02-16 | Microsoft Technology Licensing, Llc | Purity analysis using white list/black list analysis |
US20130219372A1 (en) | 2013-03-15 | 2013-08-22 | Concurix Corporation | Runtime Settings Derived from Relationships Identified in Tracer Data |
US9459849B2 (en) * | 2014-01-17 | 2016-10-04 | International Business Machines Corporation | Adaptive cloud aware just-in-time (JIT) compilation |
US9727356B2 (en) * | 2015-08-24 | 2017-08-08 | International Business Machines Corporation | Scaling past the java virtual machine thread limit |
CN105824687B (zh) * | 2016-03-15 | 2019-03-22 | 四川长虹电器股份有限公司 | 一种Java虚拟机性能自动调优的方法及装置 |
US10360128B2 (en) * | 2017-01-23 | 2019-07-23 | American Express Travel Related Services Company, Inc. | System and method for dynamic scaling of concurrent processing threads |
US20190220294A1 (en) * | 2018-01-17 | 2019-07-18 | International Business Machines Corporation | Using lightweight jit compilation for short-lived jvms on parallel distributing computing framework |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4849880A (en) * | 1985-11-18 | 1989-07-18 | John Fluke Mfg. Co., Inc. | Virtual machine programming system |
JP3910701B2 (ja) * | 1997-10-30 | 2007-04-25 | 富士通株式会社 | コンパイル処理装置及びコンピュータ読み取り可能なプログラム記録媒体 |
US6041172A (en) * | 1997-11-26 | 2000-03-21 | Voyan Technology | Multiple scale signal processing and control system |
US6289506B1 (en) | 1998-06-30 | 2001-09-11 | Intel Corporation | Method for optimizing Java performance using precompiled code |
US6842897B1 (en) * | 1998-07-31 | 2005-01-11 | International Business Machines Corporation | Method and apparatus for selecting classes using a browser for use by a virtual machine in a data processing system |
US6202208B1 (en) * | 1998-09-29 | 2001-03-13 | Nortel Networks Limited | Patching environment for modifying a Java virtual machine and method |
AU2158900A (en) * | 1998-11-25 | 2000-06-19 | Sun Microsystems, Inc. | A method for enabling comprehensive profiling of garbage-collected memory systems |
US6295643B1 (en) * | 1998-12-10 | 2001-09-25 | International Business Machines Corporation | Method and apparatus for improving java virtual machine performance using persistent execution information |
US6629113B1 (en) * | 1999-06-30 | 2003-09-30 | International Business Machines Corporation | Method and system for dynamically adjustable and configurable garbage collector |
US6865732B1 (en) * | 1999-11-01 | 2005-03-08 | Hewlett-Packard Development Company, L.P. | Providing an embedded application specific web server |
US7017151B1 (en) * | 2001-12-26 | 2006-03-21 | Bellsouth Intellectual Property Corp. | System and method for real-time applications modification |
US7870244B2 (en) * | 2002-06-25 | 2011-01-11 | International Business Machines Corporation | Monitoring performance of applications in a distributed environment |
GB0220282D0 (en) * | 2002-08-31 | 2002-10-09 | Ibm | Improved just in time compilation of java software methods |
-
2002
- 2002-05-30 US US10/159,528 patent/US7577951B2/en not_active Expired - Lifetime
-
2003
- 2003-04-18 CN CN03122642A patent/CN1461991A/zh active Pending
- 2003-05-13 JP JP2003133970A patent/JP2004005650A/ja not_active Withdrawn
- 2003-05-27 EP EP03253288A patent/EP1376351A3/en not_active Withdrawn
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006092532A (ja) * | 2004-09-10 | 2006-04-06 | Microsoft Corp | 最近アクセスしたリソースのデータ局所性の増加 |
JP2007226589A (ja) * | 2006-02-24 | 2007-09-06 | Oki Electric Ind Co Ltd | プログラム変換システム |
US8108855B2 (en) | 2007-01-02 | 2012-01-31 | International Business Machines Corporation | Method and apparatus for deploying a set of virtual software resource templates to a set of nodes |
US8327350B2 (en) | 2007-01-02 | 2012-12-04 | International Business Machines Corporation | Virtual resource templates |
US8370802B2 (en) | 2007-09-18 | 2013-02-05 | International Business Machines Corporation | Specifying an order for changing an operational state of software application components |
JP2012198657A (ja) * | 2011-03-18 | 2012-10-18 | Fujitsu Ltd | 命令処理方法、命令処理装置、及び命令処理プログラム |
KR20190059890A (ko) * | 2017-10-26 | 2019-05-31 | 후아웨이 테크놀러지 컴퍼니 리미티드 | 정보를 수집하는 방법 및 장치, 그리고 메모리를 해제하는 방법 및 장치 |
KR102205090B1 (ko) | 2017-10-26 | 2021-01-19 | 후아웨이 테크놀러지 컴퍼니 리미티드 | 정보를 수집하는 방법 및 장치, 그리고 메모리를 해제하는 방법 및 장치 |
US11138034B2 (en) | 2017-10-26 | 2021-10-05 | Huawei Technologies Co., Ltd. | Method and apparatus for collecting information, and method and apparatus for releasing memory |
Also Published As
Publication number | Publication date |
---|---|
US20030225917A1 (en) | 2003-12-04 |
US7577951B2 (en) | 2009-08-18 |
EP1376351A2 (en) | 2004-01-02 |
CN1461991A (zh) | 2003-12-17 |
EP1376351A3 (en) | 2004-06-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2004005650A (ja) | 実行中のコンピュータプログラムの性能を向上させる方法 | |
US11915018B2 (en) | Method and apparatus for user interface modification | |
US6694507B2 (en) | Method and apparatus for analyzing performance of object oriented programming code | |
EP1398697A2 (en) | Extending operating system functionality for an application | |
US7194732B2 (en) | System and method for facilitating profiling an application | |
Tatsubori et al. | A bytecode translator for distributed execution of “legacy” Java software | |
US6691302B1 (en) | Interfacing a service component to a native API | |
KR101942518B1 (ko) | 2 패스 자동화된 애플리케이션 인스트루먼테이션 | |
US7844960B2 (en) | Optimizing software program execution during class loading phase | |
US20020144240A1 (en) | Method and system of controlling dynamically compiled native code size | |
US7765527B2 (en) | Per thread buffering for storing profiling data | |
EP1316882A2 (en) | System and method for emulating code | |
EP1316887A2 (en) | System and method for dynamically patching code | |
US6317796B1 (en) | Inline database for receiver types in object-oriented systems | |
KR20110124732A (ko) | 특정된 트랜젝션 콘텍스트에서의 소프트웨어의 조건부의 동적 인스트루먼테이션 | |
WO1993016437A1 (en) | A programming model for a coprocessor on a computer system | |
EP1283465A2 (en) | Transforming & caching computer programs | |
GB2348304A (en) | Optimising device driver debug tracing | |
US20080189692A1 (en) | System and program product for implementing single threaded optimizations in a potentially multi-threaded environment | |
US8533710B1 (en) | Using observed thread activity to dynamically tune a virtual machine for responsiveness | |
WO2019168693A1 (en) | Compiler-generated asynchronous enumerable object | |
US20040168156A1 (en) | Dynamic instrumentation of related programming functions | |
US8020155B2 (en) | Mechanism for optimizing function execution | |
US20080235503A1 (en) | Event-based dynamic tunables | |
JP5165234B2 (ja) | ジャバ言語におけるメソッド参照のサポート |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060508 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20060508 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20060522 |