"プログラムの実行に際して動的コンパイルを行うアプリケーションサーバであって、該プログラムをインタプリタによって実行する際、該プログラムの実行性能に関する情報を取得する実行性能情報取得部と、該実行性能に関する情報に基づいて、該プログラムに含まれる各メソッドについて、それぞれコンパイルタイミングを指定する情報を設定するコンパイルタイミング情報設定部と、該コンパイルタイミングを指定する情報に基づいて、該メソッドをネイティブコードにコンパイルする動的コンパイル部と、を備えることを特徴とするアプリケーションサーバ。前記実行性能情報取得部は、前記プログラムの実行性能の安定前と実行性能の安定後の性能差、および、実行性能が安定するまでの期間についての情報を取得する安定前後情報取得部と、コンパイル処理の集中期間、および、コンパイル処理の集中度についての情報を取得する集中情報取得部と、各メソッドの実行頻度、および、各メソッドの重要度の情報を取得するメソッド情報取得部と、を備えることを特徴とする請求項1に記載のアプリケーションサーバ。前記実行性能の安定前の時点は、前記プログラムの起動完了時点であり、前記実行性能の安定後の時点は、動的コンパイルによるコンパイル数の揺らぎが所定値以下となる時点であることを特徴とする請求項2に記載のアプリケーションサーバ。前記実行性能の安定前と実行性能の安定後の性能差は、前記プログラムの平均レスポンス時間の差であることを特徴とする請求項2に記載のアプリケーションサーバ。前記コンパイル処理の集中度は、単位時間当たりに行なわれたコンパイル処理の数に基づいたメソッドの分類を示すことを特徴とする請求項2に記載のアプリケーションサーバ。前記コンパイル処理の集中期間は、コンパイル処理数の計測の開始から、前記単位時間当たりに行なわれたコンパイル処理の数の変動の割合が所定値以下となるまでの期間であることを特徴とする請求項5に記載のアプリケーションサーバ。前記各メソッドの実行頻度は、単位時間当たりにそれぞれのメソッドを実行した回数であり、前記各メソッドの重要度は、該メソッドを実行した回数に基づいた各メソッドの分類を示すことを特徴とする請求項2に記載のアプリケーションサーバ。前記コンパイルタイミング情報設定部は、実行性能の安定前と実行性能の安定後の性能差、コンパイル処理の集中度、各メソッドの重要度、実行性能が安定するまでの期間÷コンパイル処理の集中期間によって求められるコンパイル集中期間影響率を基に、メソッドごとにコンパイルタイミング調整係数を決定し、所定値に該コンパイルタイミング調整係数を乗算して、前記コンパイルタイミングを指定する情報を設定することを特徴とする請求項2に記載のアプリケーションサーバ。前記実行性能の安定前と実行性能の安定後の性能差が大きいほど、前記コンパイルタイミング調整係数を小さくすることを特徴とする請求項8に記載のアプリケーションサーバ。前記コンパイル処理の集中度が小さいほど、前記コンパイルタイミング調整係数を小さくすることを特徴とする請求項8に記載のアプリケーションサーバ。前記各メソッドの重要度が重要なほど、前記コンパイルタイミング調整係数を小さくすることを特徴とする請求項8に記載のアプリケーションサーバ。前記コンパイル集中期間影響率が大きいほど、前記コンパイルタイミング調整係数を小さくすることを特徴とする請求項8に記載のアプリケーションサーバ。プログラムの実行に際して動的コンパイルを行うアプリケーションサーバの処理方法であって、該アプリケーションサーバは、該プログラムをインタプリタによって実行する際、該プログラムの実行性能に関する情報を取得し、該実行性能に関する情報に基づいて、該プログラムに含まれる各メソッドについて、それぞれコンパイルタイミングを指定する情報を設定し、該コンパイルタイミングを指定する情報に基づいて、該メソッドをネイティブコードにコンパイルする、ことを特徴とする処理方法。アプリケーションプログラムの実行に際して動的コンパイルをコンピュータに行わせるプログラムであって、該コンピュータに、該アプリケーションプログラムをインタプリタによって実行する際、該アプリケーションプログラムの実行性能に関する情報を取得させ、該実行性能に関する情報に基づいて、該アプリケーションプログラムに含まれる各メソッドについて、それぞれコンパイルタイミングを指定する情報を設定させ、該コンパイルタイミングを指定する情報に基づいて、該メソッドをネイティブコードにコンパイルさせる、ことを特徴とするプログラム。前述したように、仮想マシンでアプリケーションプログラムを実行する環境では、アプリケーションプログラムの起動後に、動的コンパイラ、あるいは、ジャストインタイムコンパイラとよばれるコンパイラによって、一般的にネイティブコードに変換してから実行するのが一般的である。ネイティブコードへの変換コンパイルは、アプリケーションプログラムの実行時に行われるため、アプリケーションプログラムの実行時間には、コンパイル処理の時間が含まれるという避けられない問題がある。特に、アプリケーションの起動直後には、多くのコンパイル処理が動作するため、起動直後のアプリケーションの実行性能が安定しないという問題がある。図1は、起動直後のアプリケーションの実行性能が安定しない例を示す図である。グラフの横軸は、仮想マシンが起動してからの経過時間、右側縦軸は、アプリケーションプログラムが処理要求を処理するのに要した時間レスポンス時間、左縦軸は、コンパイラがネイティブコードに変換したプログラムメソッドの総数を示す。処理要求の開始直後は、ネイティブコードがそろっていないことと、コンパイル処理が多く動作することで、処理時間が安定していない。この問題に対して、1つ目の従来技術では、コンパイラの最適化の程度を妥協して、コンパイル処理を軽くする方式を使用した。この方式では、クライアントマシンのような特定の実行環境では有効である。しかし、最大性能を求められるアプリケーションサーバ向けの仮想マシンを使用した環境では、コンパイラの最適化が弱いため、アプリケーションプログラムの最大性能を犠牲にすることになる。例えば、毎朝の9時に業務を開始するアプリケーションサーバで動作するアプリケーションプログラムがあり、開始直後から大量の処理をこなさなければならないような場合には不向きである例えば、インタネートによるチケット販売。2つ目の従来技術では、ボトルネックとなる実行頻度の高いメソッドだけをコンパイルする方式を使用した。この方式は、すべてのプログラムをコンパイルする方式と比べると、アプリケーション起動時の性能に効果があった。しかし、起動後、インタプリタによる実行とプログラムの実行頻度の解析をどのくらいの期間するのが適切か、また、いつコンパイル処理を実施してネイティブコードによる実行に変えたら効果が得られるかは、いろいろな要因ハードウェアの性能、アプリケーションプログラムの特性、アプリケーションプログラムが扱う処理量などに依存する。プログラムのボトルネック実行頻度の高いメソッドを見つける方式としては、プログラムメソッドの呼び出し回数やループ回転数によって判断する方式が知られている。しかし、インタプリタ実行とネイティブコードによる実行の最適なバランスを見つけるのは非常に難しく、従来は、プログラムメソッドの実行が特定の回数に到達したらコンパイルを行う方式を採用しており、バランス調整は行っていない。したがって、2つ目の従来技術による仮想マシンを使用しても、アプリケーションプログラムの起動時の性能が運用要件を満たさない例があるのが現状である。3つ目の従来技術では、アプリケーションを起動後、アプリケーションプログラムへの入力を受け付ける業務を開始する前に、予め、使用頻度の高いプログラムメソッドを事前に読み込み、コンパイルを済ませておく方式を使用した。しかし、この方式は、アプリケーションプログラムの実行中にインターネットを通してプログラムを読み込んだり、実行時以後にプログラムが生成されるようなアプリケーションに対しては不向きであった。Java言語のように、動的にプログラムを読み込む必要になったときに読み込むという仕様の場合、あるメソッドから別のメソッドを参照しているときに、参照されるメソッドがまだ読み込まれていような場合は、コンパイラが生成するコードには余分なコードが増える。これは、プログラムが読み込まれていなかったら、プログラムを読み込んで参照を解決するというコードをコンパイラが生成するコードの中に組み込まなければいけないためである。3つ目の従来技術では、このようなコードが増えるため、アプリケーションの実行中にインターネットを通してプログラムを読み込んだり、実行時以後にプログラムが生成されるようなアプリケーションに対しては不向きである。また、コンパイラの最適化処理の面で不利になる。すなわち、コンパイラはプログラムの実行を予測することで、より強力な最適化を行うことができる。動的にプログラムを読み込んで実行する場合、コンパイル前のインタプリタ実行中にプログラムの動的な情報を収集してプロファイルして、コンパイラの最適化に利用するのが一般的である。しかし、3つ目の従来技術のようにプログラムの実行前にコンパイルすると、このような最適化ができなくなるため不利である。以下の実施形態においては、アプリケーション実行性能の状況に応じて、動的コンパイルのタイミングを調整するアプリケーションサーバを提供する。以下の実施形態の一側面におけるアプリケーションサーバは、プログラムの実行に際して動的コンパイルを行うアプリケーションサーバであって、該プログラムをインタプリタによって実行する際、該プログラムの実行性能に関する情報を取得する実行性能情報取得部と、該実行性能に関する情報に基づいて、該プログラムに含まれる各メソッドについて、それぞれコンパイルタイミングを指定する情報を設定するコンパイルタイミング情報設定部と、該コンパイルタイミングを指定する情報に基づいて、該メソッドをネイティブコードにコンパイルする動的コンパイル部とを備える。以下の実施形態によれば、アプリケーション実行性能の状況に応じて、動的コンパイルのタイミングを調整するアプリケーションサーバを提供することができる。本実施形態では、アプリケーションプログラムの起動時に、多数のコンパイル処理が動作することで、アプリケーションプログラムの実行に使えるCPU時間が奪われるオーバヘッドことを回避するように、コンパイルを行うタイミングを調整することで、インタプリタによる実行とネイティブコードによる実行のバランスを最適にする各々のプログラムのコンパイルを行うタイミングを遅らせた方がアプリケーションプログラムの実行性能がよくなるのか、早めた方がよいのかを判断することで、アプリケーションプログラムの起動直後の実行性能を安定させる。これは、1アプリケーションプログラムの起動直後の性能が安定しない期間は、コンパイルの処理量を減らす、2しかし、実行性能に大きく影響するプログラムのコンパイル処理の集中期間は、コンパイル処理の集中度を計測した時間である。5のプログラムは同じことが多い。アプリケーションプログラムの作成者と利用者が同じ場合は、コンパイルタイミング調整の判断基準情報の収集時をテスト時に行うか、アプリケーションプログラムの運用時に行うかは、利用者の判断になる。アプリケーションプログラムを製品として第三者利用者に提供する場合は、テスト時に一般的な利用形態にもとづいてコンパイルタイミング調整値を決定して、製品に同梱するという形態が考えられる製品にコンパイルタイミング調整値の決定と利用を行う仕組みを持たせるという形態も可能である。図10及び図11は、コンパイルタイミング調整の判断基準情報からコンパイルのタイミングを調整する方法を説明する図である。コンパイルを行うタイミングは、プログラムの実行頻度がどこまで到達したかによって決定する。本実施形態では、状況に応じてそれぞれのプログラムメソッドごとに、実行頻度の到達に応じてコンパイルを行うタイミングを調整する。従来技術では、メソッドの実行回数をカウントして、回数が事前に設定した閾値に到達したらコンパイルする。どのメソッドも、実行回数が固定の閾値に到達したときにコンパイルする。本実施形態では、特徴aのメソッドはアプリケーションプログラムの起動が完了する前に、コンパイルが完了するように調整する。特徴b、cのメソッドは、コンパイルタイミング調整の判断基準情報1実行性能の安定前と安定後の性能差、2実行性能が安定するまでの期間、3コンパイル処理の集中度、4コンパイル処理の集中期間、5プログラムメソッドごとの実行頻度重要度から求めたコンパイルタイミング調整値によって、コンパイルするタイミングを決定する。特徴aのプログラムメソッドは、アプリケーションプログラムの起動が完了する前にコンパイルが完了するように調整する。アプリケーションプログラムの起動完了時点で測定したプログラムメソッドごとの実行頻度を参照して、そのプログラムメソッドがコンパイルされるタイミングをアプリケーションプログラムの起動完了時点での実行頻度により規定されるコンパイルタイミングよりも少し早いタイミングで予め決めた特定の割合だけ小さく見積もった実行頻度の到達で、コンパイルが行われるようにする。これにより、アプリケーションプログラムの起動完了前に実行されたプログラムメソッドが、アプリケーションプログラムの運用開始後にコンパイルされることはなくなる。特徴b、cのプログラムメソッドのコンパイルタイミングの調整方法を説明する。コンパイルタイミング調整の判断基準情報の1つであるプログラムメソッドごとの実行頻度重要度は、実行頻度が高いものほどアプリケーションプログラムの実行性能への影響が大きいと考え、実行頻度に応じて、重要度1極めて重要、重要度2重要、重要度3通常、重要度4重要度は低いに分類する。また、コンパイル処理の集中度は、集中度の程度に応じて、集中度大、集中度中、集中度小に分類する。集中度と各プログラムメソッドの重要度に応じてコンパイルのタイミングを早めるのか遅らせるのかの基本的な方向性を決める。これに、実際のアプリケーションプログラムの運用状況、つまり、コンパイルタイミング調整の判断基準情報の、実行性能の安定前と安定後の性能差、実行性能が安定するまでの期間、および、コンパイル処理の集中期間を加味した最適化をして、コンパイルを行うタイミングを決定する。特徴b、cのプログラムメソッドについて、コンパイルタイミング調整の判断基準情報により、コンパイルのタイミングをどのように調整するのかの方針を示したものが図10である。また、実際にどの程度の調整を行うかを数値で表したものが図11である。図11に示した調整の係数は、コンパイルを実施する標準の実行頻度コンパイルタイミングの標準実行頻度;予め決定された値に、この係数を掛けた値に、プログラムメソッドの実行が到達したときにコンパイルを行うことを示す。この係数の値は、仮想マシン起動時点で予め決められた値を設定するか、またはプログラムの作成者あるいは、利用者が適宜設定する。特徴aのプログラムメソッドについては、前述の調整方法でも説明したとおり、コンパイルを行うタイミングは、プログラムの実行頻度がどこまで到達したかによって決定する。図10において、各メソッドは重要度にしたがって分類される。重要度は、メソッドの実行頻度を3つの異なる閾値閾値1>閾値2>閾値3と比較し、決定する。重要度1は、最も実行頻度が高いメソッドで、閾値1より大きな実行頻度を持つメソッドが分類される。重要度2は、閾値1よりは小さいが閾値2より大きな実行頻度を持つメソッドが分類される。重要度3は、閾値2よりは小さいが閾値3より大きな実行頻度を持つメソッドが分類される。重要度4は、閾値3よりは小さい実行頻度を持つメソッドが分類される。集中度についても、2つの閾値を設け、コンパイル処理の集中度の値を分類する。重要度1のメソッドは実行頻度が大きいので、集中度が大、中、小のいずれでも、コンパイルタイミングを早める。特に、実行性能の安定前と安定後の性能差が大きいほど大きく早めるようにする。重要度2のメソッドは、集中度が大のときであって、実行性能が安定するまでの期間がコンパイル処理の集中期間と一致する場合に、コンパイルタイミングを遅らせる。集中度が中の場合には、何もしない。集中度が小のときは、コンパイルタイミングを早める。重要度3のメソッドは、集中度が大のときは、コンパイルタイミングを遅らせ、集中度が中のときは何もせず、集中度が小のときは、実行性能が安定するまでの期間がコンパイルの集中期間に比べて長い場合に、コンパイルタイミングを早める。重要度4のメソッドは、いずれの集中度のときも、コンパイルタイミングを遅らせる。特に、実行性能の安定前と安定後の性能差が大きいほど大きく遅らせるようにする。ただし、集中度が大のときは、実行性能が安定するまでの期間がコンパイルの集中期間に比べて長い場合には、小さく遅らせる。図11は、図10の定性的処理分類を、数値例を入れて具体的にしたものである。図11において、具体的な数値は一例であり、実際の数値は仮想マシン起動時点で予め決められた値、またはプログラムの作成者あるいは利用者が適宜設定する。ここで説明した、特徴b、cのプログラムメソッドに対するコンパイルタイミングの調整方法を、図8に示したアプリケーションの3つのケースに当てはめて、その作用を説明する。ケース1不安定安定時の性能差が大きく、不安定な期間実行性能が安定するまでの期間が短い場合になるのは、短期間にコンパイルが集中するケース集中度大が通常である。コンパイルの集中が性能を不安定にしている主原因であるかは、集中期間と不安定期間がほぼ一致するかどうかで判断できる数値で判断するには、不安定期間÷集中期間が1.0に近い場合なので、例えば、この値が1.2以下であればコンパイル集中が主原因であると判断する。重要度1のプログラムメソッドに対しては、コンパイルのタイミングを早めるが、重要度2~4のプログラムメソッドに対してはコンパイルのタイミングを遅らせる。このとき重要度が低い4に近いものほど、大きく遅らせる。また、不安定安定の性能差も考慮するが、性能差が大きい場合ほどコンパイルの集中の影響を受けているので、重要度が低いプログラム重要度4に対しては、性能差が大きい場合はコンパイルのタイミングをより遅らせる。その分、逆に、極めて重要なプログラムは、性能差が大きい場合ほどコンパイルのタイミングを早めて、ネイティブコードへの切り替えを早く行う。ケース2不安定安定時の性能差が小さく、不安定な期間実行性能が安定するまでの期間が長い場合になるのは、コンパイルが徐々に進むケースが通常である。この状況は、コンパイル集中期間に対して不安定期間が長いかどうかで判断できる数値で判断するには、不安定期間÷集中期間が大きい場合なので、例えば、この値が1.5より大きいと判断する。重要度が通常より高い重要度1~3場合は、コンパイルのタイミングを早めてネイティブコードによる実行への切り替えが早く行われるようにする。このとき、重要度が高いものほどコンパイルのタイミングを早める。また、不安定安定の性能差も考慮するが、重要度1極めて重要なプログラムに対しては、性能差が大きいほどネイティブコードへの切り替えタイミングの遅れに影響するため、性能差が大きいほどコンパイルのタイミングを早める。重要度1~3のプログラムのタイミングを早めた分、逆に、重要度4のプログラムのタイミングを遅らせることで、コンパイル時間の影響のバランスを取ることができる重要度1のプログラムに対して、性能差大の場合はコンパイルのタイミングをより早めたので、重要度4では性能差大の場合にコンパイルのタイミングを遅らせる。ケース3不安定安定時の性能差が大きく、不安定な期間実行性能が安定するまでの期間が長い場合は特殊なケースと考えられるが、コンパイルの集中が長く続く、あるいは、インタプリタによる実行とネイティブコードによる実行の性能差が大きいことまたは、その複合が考えられる。この場合、不安定安定時の性能差が大きく、不安定な期間が長いことから、集中度大に判定される可能性があるが、ケース1同じく集中度大に分類される可能性の高いの場合と係数の決め方を変える。ケース1とケース3の識別は、ケース1は、コンパイルの短期集中が主要因であるため、集中期間と不安定期間がほぼ一致するかどうかで判断した数値では、不安定期間÷集中期間が1.2以下。ケース3は、コンパイルの長期集中が要因とは限らないので、不安定期間が集中期間より長くなっているかで判断する数値では、不安定期間÷集中期間が1.2より大きい;なお、この値は後にコンパイル集中期間影響率と呼ぶ。その場合、ケース1と比べてケース3は、ネイティブコードへの切り替えの遅れが発生しているプログラムの割合が高いため、コンパイルのタイミングを早める場合重要度1、遅らせる場合重要度4のどちらも、コンパイルのタイミングをケース1より少し早める。集中度が中の場合は、集中度が小と集中度が大の中間の状況に対応できるように係数を設定する。なお、自動的に集中度に応じた調整を行う形態を説明したが、人の判断で、どのケースの調整方法を行うのかを指定できるようにしてもよい。図12は、本実施形態が適用されるシステムの構成例を示す図である。本実施形態は、サーバマシンアプリケーションサーバ10-1、10-2に実装されるアプリケーションサーバプログラム14、アプリケーションサーバプログラムに組み込まれる仮想マシン12、仮想マシン上で動作する動的コンパイラ13において実施される。アプリケーションサーバプログラム14上では、アプリケーションプログラム15が動作する。Webサーバプログラム16は、アプリケーションプログラムやデータの受け渡しの仲介を行い、OSOperatingSystem17上で動作する。サーバマシン10-2は、上記のようなWebサーバプログラム16とOS17を実装し、ネットワークを介して、クライアントマシン11と通信したり、他のサーバマシン10-1と通信する。サーバマシン10-2は、クライアントマシン11からの、アプリケーションプログラムの実行リクエストを受け取ったり、該リクエストに対するレスポンスをクライアントマシン11に返送したりする。また、他のサーバマシン10-1からは、ネットワークを介して、アプリケーションプログラム15aを受け取り、自サーバマシン10-2にインストールしたりする。他のサーバマシン10-1からアプリケーションプログラム15aを受信できるようにすることにより、自サーバマシン10-2には実装されていなかったアプリケーションプログラム15の実行をクライアントマシン11からリクエストされた場合にも対応することができるようになる。また、本実施形態のプロセスを実現するプログラムは、仮想マシン12に組み込まれて実行されるが、これは、他のサーバマシン10-1から自サーバマシン10-2に、ネットワークを介してダウンロードされ、自サーバマシン10-2にインストールされるようにしても良い。あるいは、本実施形態のプロセスを実現するプログラムは、CD-ROM,DVD、ICメモリ、フレキシブルディスク、Blu-ray等の可搬記録媒体19に格納されていてもよい。この場合、可搬記録媒体19に格納されている当該プログラムを媒体ドライバ18で読み取り、サーバマシン10-2にインストールするようにして使用する。図13は、アプリケーションサーバ上で動作する各機能のブロック構成を示す図である。アプリケーションサーバ20には、仮想マシン起動部21、リクエストの送付部22、アプリケーションの実行性能レスポンス性能計測通知部23を持つ。仮想マシン起動部21は、1仮想マシン12を起動して、運用対象のアプリケーションプログラム15を仮想マシン12上で実行できるように、アプリケーションプログラム15の起動を開始する。また、仮想マシン起動部21は、2アプリケーションプログラム15の起動が完了して、アプリケーションプログラム15の運用のリクエストを受け付ける準備が整ったら、アプリケーションプログラム15の起動完了通知を、仮想マシン12に送付する。次に、リクエストの送付部22は、3リクエストを仮想マシン12上で動作するアプリケーションプログラム15に送付する。アプリケーションの実行性能計測通知部23は、4アプリケーションの実行性能を測定して、実行性能が安定する前と安定した後の性能差、および、安定した性能になるまでの期間を計測して、性能が安定したと判断した時に、仮想マシン12に通知する。図14及び図15は、仮想マシン上、および、仮想マシンの動的コンパイラでの動作を説明する図である。仮想マシン12は、動的コンパイラ13に加え、コンパイル集中度の計測部30、プログラムメソッド実行頻度の計測部31、コンパイルのタイミング調整決定部32、コンパイルタイミング制御情報の計算と出力部33以上図14、コンパイルタイミング情報の入力判断部34を持つ。コンパイル集中度の計測部30は、動的コンパイラ13で行われているコンパイル処理を測定して、コンパイル集中度を求めるために、定められた期間、定められた時間単位にコンパイルされるプログラム数メソッド数を記録する。定められた期間とは、図9で示した、2回のコンパイルタイミング調整の判断基準情報の取得タイミングの間の時間である。プログラムメソッド実行頻度の計測部31は、プログラムメソッドが呼び出されたときに、そのプログラムの実行頻度を記録する。コンパイルのタイミング調整決定部32は、コンパイル集中度の計測部30、および、プログラム実行頻度の計測部31を起動することで、あるいは、アプリケーションサーバ20からの通知で、コンパイルタイミング調整の判断基準情報を収集して、これらの情報から、各プログラムメソッドのコンパイルタイミングを決定する。コンパイルのタイミング調整決定部32の手順は、1アプリケーションサーバ20からアプリケーションプログラムの起動完了通知を受け取ったら、2プログラムメソッド実行頻度の計測部31が記録した実行頻度を参照して、その時点アプリケーションプログラムの起動が完了した時点のプログラムメソッドごとの実行頻度を保存する。また、3コンパイル集中度の計測部30に、コンパイルの集中度の記録の開始を指示する。4アプリケーション性能が安定した時点で、アプリケーションサーバ20からアプリケーション実行性能の通知を受けたら、5プログラムメソッド実行頻度の計測部31が記録した実行頻度を参照する。そして、その時点アプリケーション性能が安定した時点で、プログラムメソッドごとの実行頻度を保存する。また、6コンパイル集中度の計測部30に、コンパイルの集中度の記録の終了を指示する。以上の1~6のプロセスで取得した情報がコンパイルのタイミング調整の判断基準情報になる。コンパイルタイミング制御情報の計算と出力部33は、コンパイルのタイミング調整の判断基準情報から、各プログラムメソッドのコンパイルのタイミングを決定して、コンパイルタイミング制御情報を出力する。コンパイルタイミング制御情報は、コンパイルのタイミング調整を行う1つのプログラムメソッドに対して、プログラムメソッド識別情報とコンパイルタイミング調整値を持つ。コンパイルタイミング調整値は、プログラムごとに調整された値コンパイルタイミング制御情報のコンパイル調整値に実行頻度が到達していれば、動的コンパイラ13に、そのプログラムメソッドのコンパイルを依頼する。該当するプログラムがコンパイルタイミング情報にない場合は、仮想マシン12の起動時点で予め決められた標準値に到達した場合にコンパイルを依頼する。図16は、仮想マシン起動部の動作フローチャートである。ステップS10において、コンパイルタイミング制御情報が存在し、かつ、この情報を使用した起動であるか否かを判断する。ステップS10の判断がYesの場合には、ステップS11に進み、Noの場合には、ステップS12に進む。ステップS11では、仮想マシンを起動すると共に、実行するアプリケーションプログラムと、コンパイルタイミング制御情報を仮想マシンに通知する。ステップS12では、仮想マシンを起動すると共に、実行するアプリケーションプログラムと、コンパイル制御情報を使用しないことを仮想マシンに通知する。ステップS13において、アプリケーションプログラムの運用が開始可能になったら、アプリケーションプログラムの起動完了通知を仮想マシンに通知して、処理を終了する。図17は、アプリケーションプログラムの実行性能計測通知部の動作フローチャートである。また、図18は、アプリケーションの実行性能計測通知部が使用するデータを示す図である。図18のデータ124は、アプリケーションサーバが使用するメモリ上に置かれ、データ3は仮想マシンが使用するメモリ上に置かれる。1の平均実行性能の記録では、アプリケーションプログラムについて、平均実行性能の測定を行なうたびに記録番号をつけ、平均実行性能、すなわち、平均レスポンス時間をミリ秒の単位で記録する。2の平均実行性能の記録回数は、1の平均実行性能の記録番号の最大値であり、予め設定される。3のアプリケーションサーバから通知された実行性能情報は、実行性能の安定前と安定後の性能差と、実行性能が安定するまでの時間からなる。4のデータの平均実行性能の最大記録回数、実行性能の安定判断の変動率、実行性能決定のサンプリング数は、仮想マシン起動時点で予め決められた値を使用する。図17において、ステップS15では、アプリケーションプログラムの実行性能レスポンス時間を実行性能決定のサンプリング数だけ測定して、その平均実行性能を求め、平均実行性能の記録に設定する。このサンプリング数は、予め決定しておく。ステップS16において、平均実行性能の変動の割合が、前回記録した平均実行性能に比べて、実行性能の安定判断の変動率より小さいか否かを判断する。ステップS16の判断がYesの場合には、ステップS18に進む。ステップS16の判断がNoの場合には、ステップS17に進む。ステップS17では、平均の実行性能の記録回数が、平均実行性能の最大記録回数より大きいか否かを判断する。ステップS17の判断がYesの場合には、ステップS18に進む。ステップS17の判断がNoの場合には、ステップS15に戻る。ステップS18では、最初に記録した平均の実行性能と最後に記録した平均の実行性能の割合から、実行性能の安定前と安定後の性能差実行性能の安定前と安定後の性能比=安定前に記録した平均実行性能÷安定後に記録した平均実行性能を求め、仮想マシンに通知する。また、平均実行性能を最初に記録した時刻と最後に記録した時刻の差から、実行性能が安定するまでの期間を求め、仮想マシンに通知する。図19A、Bは、コンパイル集中度の計測部の動作フローチャートである。また、図20は、コンパイル集中度の計測部が使用するデータを示す図である。図20のデータは、仮想マシンが使用するメモリ上に置かれる。1のコンパイル集中度の記録は、測定ごとに付けられる、コンパイル集中度の記録番号と、各測定が行なわれた時刻である、コンパイル集中度の測定時期例えば、単位は秒と、測定時に検出された実行中のコンパイル処理の数である、コンパイル集中度例えば、単位は、個/秒とからなる。2のデータは、コンパイル集中度の記録回数と、前回の計測時までに完了したコンパイルの総数とからなる。3のデータは、コンパイル処理の集中期間と、コンパイル処理の集中度例えば、単位は、個/秒とからなる。4のデータは、コンパイル集中度測定のサンプリング間隔、コンパイル集中度測定の最小サンプリング期間、コンパイル集中度測定の最大サンプリング期間、コンパイル集中度判定の変動率からなり、これらは、仮想マシン起動時点で予め決められた値を使用する。図19A、Bにおいて、コンパイル集中度の計測部は、ステップS20で、コンパイル集中度測定の測定終了の指示をコンパイルのタイミング調整決定部から受けているか否かを判断する。ステップS20の判断がYesの場合には、ステップS28に進む。ステップS20の判断がNoの場合には、ステップS21において、コンパイル集中度測定の総期間が、コンパイル集中測定の最大サンプリング期間を超えているか否かを判断する。ステップS21の判断がYesの場合には、ステップS28に進む。ステップS21の判断がNoの場合には、ステップS22において、コンパイル集中度測定の測定開始の指示をコンパイルのタイミング調整決定部から受けているか否かを判断する。ステップS22の判断がNoの場合には、ステップS27に進む。ステップS22の判断がYesの場合には、ステップS23において、コンパイル集中情報のコンパイル処理の集中度を設定済みか否かを判断する。ステップS23の判断がYesの場合には、ステップS27に進む。ステップS23の判断がNoの場合には、ステップS24において、動的コンパイル部後述から、プログラムメソッドのコンパイル総数を受け取る。そして、コンパイル処理の集中度=今回計測時のコンパイル総数-前回計測時のコンパイル総数÷コンパイル集中度測定のサンプリング間隔実行頻度の計測部の動作フローチャートである。図22は、プログラム実行頻度の計測部が使用するデータを示す図である。図22のデータは、仮想マシンが使用するメモリ上に置かれる。図22のプログラムメソッド実行頻度の記録は、プログラムメソッドの識別情報として、メソッド名とそのシグネチャが格納される。そして、この識別情報に対応して、プログラムメソッドの実行頻度、コンパイル状態が格納される。実行頻度は、実行頻度の計測を始めてから現在の記録時点までのメソッドの実行回数を記録する。プログラム実行頻度の記録には、プログラムメソッドがコンパイルされたかどうかの状態を記録する項目があり、この項目の初期値はfalseで、動的コンパイラがプログラムメソッドをコンパイルしたときに、対象のプログラムメソッドのコンパイル状態をtrueにする。図21において、プログラム実行頻度の計測部の処理は、仮想マシンによって、プログラムの呼び出しが行われたときに実行される。ステップS35において、測定対象のプログラムメソッドが、プログラムメソッド実行頻度の記録に登録されているか否かを判断する。ステップS35の判断がNoの場合には、ステップS36において、プログラムメソッド実行頻度の記録に、測定対象のプログラムメソッドを追加し、追加したプログラムメソッドの記録に、そのプログラムメソッドの識別情報を設定し、実行頻度を1に設定して、処理を終了する。ステップS35の判断がYesの場合には、ステップS37において、プログラムメソッド実行頻度の記録から、測定対象のプログラムメソッドの記録を検索し、実行頻度に値を加算する。加算する値は、1でもよいし、プログラムメソッドの内容に応じて、重み付けをした値を使っても良い。内容に応じて重み付けするとは、プログラムメソッドの大きさやループ処理のありなしなどから、当該プログラムメソッドの実行負荷の大きさに従い重み付けするものである。ステップS37の処理が終わったら、処理を終了する。図23A、Bは、コンパイルタイミング調整決定部の動作フローチャートである。また、図24は、コンパイルタイミング調整決定部が扱うデータを示す図である。図24のデータは、仮想マシンが使用するメモリ上に置かれる。1のプログラムメソッド実行頻度の重要度決定の基準値は、計測された実行頻度を4つの重要度の段階に分類するための実行頻度の区間が指定されている。プログラムメソッド実行頻度の重要度決定の基準値は、仮想マシン起動時点で予め決められた値を使用する。2~5は、コンパイルタイミング調整の判断基準情報である。2は、アプリケーション起動完了時のプログラムメソッド実行頻度情報である。これは、プログラムメソッドの識別情報に対応して、プログラムメソッドの実行頻度とコンパイル情報が格納される。3は、アプリケーション性能安定時のプログラムメソッド実行頻度情報である。これは、プログラムメソッドの識別情報に対応して、プログラムメソッドの実行頻度と、コンパイル情報と、1のデータから得られた重要度が格納される。2と3のデータは、それぞれ、アプリケーション起動完了時と性能安定時に測定された図22のデータから生成される。4は、コンパイル集中情報であり、コンパイル集中度の計測部が作成するものである。これは、コンパイル処理の集中期間と、コンパイル処理の集中度個/秒のデータからなる。5は、アプリケーションサーバから通知された実行性能情報であり、実行性能の安定前と安定後の性能差と、実行性能が安定するまでの期間からなる。図23A、Bにおいて、ステップS40では、コンパイルタイミング調整決定部は、仮想マシン起動部から、アプリケーションプログラムの起動完了の通知が届いているか否かを判断する。ステップS40の判断がYesの場合には、ステップS42に進む。ステップS40の判断がNoの場合には、ステップS41に進む。ステップS41では、仮想マシン起動部からアプリケーションプログラムの起動完了の通知が届くまで待ち合わせる。ステップS42では、プログラムメソッド実行頻度計測部が集計しているプログラムメソッド実行頻度の記録を複写して、アプリケーションプログラム起動完了時のプログラムメソッドの実行頻度情報を作成する。ステップS43では、コンパイル集中度の計測部を実行して、コンパイル集中度の計測を開始する。ステップS44において、アプリケーションの実行性能計測通知部からアプリケーションプログラムの実行性能の通知が届いているか否かを判断する。ステップS44の判断がYesの場合には、ステップS46に進む。ステップS44の判断がNoの場合には、ステップS45において、アプリケーションの実行性能計測通知部からプリケーション実行性能の通知が届くまで待ち合わせる。ステップS46では、アプリケーションサーバから通知された実行性能情報を仮想マシンのメモリに格納する。ここで、実行性能情報は、実行性能の安定前と安定後の性能差、及び、実行性能が安定するまでの期間からなる。ステップS47では、プログラムメソッド実行頻度計測部が集計しているプログラムメソッド実行頻度の記録を複写して、アプリケーション性能安定時のプログラムメソッド実行頻度情報を作成する。また、アプリケーション性能安定時のプログラムメソッド実行頻度情報には、実行頻度に応じた重要度を格納する項目を設ける。そして、アプリケーション性能安定時のプログラムメソッド実行頻度情報に設定されている各プログラムメソッドの実行頻度と重要度基準値閾値とを比較して、重要度を設定する。ステップS48では、コンパイル集中度の計測部を実行して計測処理を実行し、計測処理が終わったらコンパイル集中度の計測を終了する。ここで、コンパイル集中度の計測部が作成したコンパイル集中度の記録は、コンパイルのタイミング調整決定部から参照でき、これをコンパイル集中情報とする。ステップS49において、コンパイルタイミング制御情報の計算と出力部を実行して、コンパイルタイミング制御情報を出力する。図25A、B、Cは、コンパイルタイミング制御情報の計算と出力手部の動作フローチャートである。また、図26は、コンパイルタイミング制御情報の計算と出力部が扱うデータを示す図である。図26のデータは、仮想マシンが使用するメモリ上に置かれる。また、コンパイルタイミング制御情報の計算と出力部は、図24に示したコンパイルタイミング調整の判断基準情報も使用する。コンパイルタイミング調整係数、コンパイルタイミングの標準実行頻度、コンパイル集中度決定の基準値、コンパイルタイミング調整係数の決定基準テーブルの内容は、仮想マシン起動時点で予め決められた値を使用する。1のデータは、コンパイルタイミング調整係数と、コンパイルタイミングの標準実行頻度とからなる。コンパイルタイミングの標準実行頻度は、プログラムメソッドがコンパイル処理されるまでに、インタプリタで実行される回数の基準値であり、予め決められた値である。コンパイルタイミング調整係数は、コンパイルタイミングの標準実行頻度に乗算して、コンパイル処理が行なわれるまでにプログラムメソッドが実行される回数を可変するための値であり、コンパイルタイミング調整係数の決定基準テーブルに基づいて決定される。2のコンパイル集中度決定の基準値は、単位時間当たりのコンパイル処理されたプログラムメソッド数を、3つの段階に分類するための基準値閾値を示すもので、これに従い、コンパイルの集中度が、大、中、小のいずれかに設定される。3の性能差大小決定の基準値は、実行性能の安定前と安定後の性能差を2つの段階大小に分類するための基準値閾値を示す。4のコンパイルタイミング調整係数の決定基準テーブルは予め設定されたもので、アプリケーションプログラムのインタプリタによる実行結果から各プログラムメソッドを重要度と集中度で分類した結果を用いて、コンパイルタイミング調整係数を設定するためのものである。コンパイルタイミング調整係数の値が1.0の場合には、コンパイルタイミングは変更されず、1.0より大きければ、コンパイルタイミングは遅くなり、1.0より小さければ、コンパイルタイミングは早くなる。5のコンパイルタイミング制御情報は、プログラムメソッドごとにコンパイルタイミング調整値を格納するもので、プログラムメソッドの識別情報メソッド名とシグネチャと、コンパイルタイミング調整値が対応付けられて、コンパイルタイミング制御情報の計算と出力部によって生成され、出力される。コンパイルタイミング調整値は、コンパイルタイミングの標準実行頻度に、4のデータから得られたコンパイルタイミング調整係数を乗算して得られる。図25A、B、Cにおいて、コンパイルタイミング制御情報の計算と出力部は、ステップS55において、アプリケーションプログラムの起動完了時のプログラムメソッド実行頻度情報を読み込み、1つ目に登録されているプログラムメソッドの実行頻度情報を取り出す。ステップS56において、プログラムメソッドの実行頻度情報があるか否かを判断する。ステップS56の判断がNoの場合には、ステップS63に進む。ステップS56の判断がYesの場合には、ステップS57において、実行頻度情報から、プログラムメソッド識別情報、コンパイル状態、プログラムメソッドの実行頻度を取り出す。ステップS58において、取り出した実行頻度情報のコンパイル状態はtrueか否かを判断する。ステップS58の判断がYesの場合には、ステップS59に、Noの場合には、ステップS60に進む。ステップS59においては、コンパイルタイミング調整値に、プログラムメソッドの実行頻度を設定し、ステップS61に進む。ステップS60においては、コンパイルタイミング調整値に、プログラムメソッドの実行頻度×コンパイルタイミング調整係数を設定する。ステップS61では、コンパイルタイミング制御情報に、プログラムメソッド識別情報とコンパイルタイミング調整値を出力する。ステップS62においては、次に登録されているプログラムメソッドの実行頻度情報を取り出し、ステップS56に戻る。ここで、コンパイル状態がtrueでないfalseのものだけコンパイルタイミング調整値を可変するのは、trueとなっているものは、既にコンパイルされており、改めてコンパイルするタイミングを設定する必要が無いからである。ステップS63では、アプリケーションプログラムの安定時のプログラムメソッドの実行頻度情報を読み込み、1つ目に登録されているプログラムメソッドの実行頻度情報を取り出す。ステップS64において、プログラムメソッドの実行頻度情報があるか否かを判断する。ステップS64の判断がNoの場合には、処理を終了する。ステップS64の判断がYesの場合には、ステップS65に進む。ステップS65では、実行頻度情報から、プログラムメソッド識別情報、プログラムメソッドの実行頻度、重要度を取り出す。ステップS66において、取り出したプログラムメソッド識別情報は、アプリケーションプログラム起動完了時のプログラムメソッドの実行頻度情報に含まれているか否かを判断する。ステップS66の判断がYesの場合には、ステップS74に進む。ステップS66の判断がNoの場合には、ステップS67に進む。ステップS67では、アプリケーションサーバから通知された実行性能情報から、実行性能の安定前と安定後の性能差、実行性能が安定するまでの期間を取り出す。ステップS68において、コンパイル集中情報から、コンパイル処理の集中期間、コンパイル処理の集中度を取り出す。ステップS69において、コンパイル処理の集中度とコンパイル集中度判定の基準値を比較して、コンパイル処理の集中度大/中/小を求める。ステップS70において、コンパイル集中期間影響率=実行性能が安定するまでの期間÷コンパイル処理の集中期間を求める。ステップS71において、コンパイルタイミング調整係数の決定基準テーブルから、コンパイル処理の集中度、プログラムメソッドの重要度、コンパイル集中度、コンパイル集中期間影響率、実行性能の安定前と安定後の性能差の条件に当てはまるコンパイルタイミング調整係数を求める図263参照。ステップS72において、コンパイルタイミング調整値に、コンパイルタイミングの標準実行頻度×コンパイルタイミング調整係数を設定する。ステップS73において、コンパイルタイミング制御情報に、プログラムメソッド識別情報とコンパイルタイミング調整値を出力する。ステップS74において、次に登録されているプログラムメソッドの実行頻度情報を取り出し、ステップS65に戻る。図27は、コンパイルタイミング制御情報の入力判断部の動作フローチャートである。また、図28は、コンパイルタイミング制御情報の入力判断部が使用するデータを示す図である。図28において、2のコンパイルタイミング制御情報は、仮想マシンが使用するメモリから読み込んで使用する。1のコンパイルタイミングの標準実行頻度は、仮想マシン起動時点で予め決められた値を使用する。図27において、コンパイルタイミング制御情報の入力判断部は、メソッドの呼び出しがある前に起動される。ステップS80で、コンパイルタイミング制御情報が読み込まれているか否かを判断する。ステップS80の判断がNoの場合には、ステップS84に進む。ステップS80の判断がYesの場合には、ステップS81において、プログラムメソッドの呼び出しがあった場合のそのプログラムメソッドが、コンパイルタイミング情報のプログラムメソッド識別情報に存在するか否かを判断する。ステップS81の判断がNoの場合には、ステップS84に進む。ステップS81の判断がYesの場合には、ステップS82に進む。ステップS82においては、コンパイルタイミング制御情報から、プログラムメソッドの呼び出しがあったプログラムメソッドのコンパイルタイミング調整値を取り出す。ステップS83において、プログラムメソッドの呼び出しがあった場合のそのプログラムメソッドの実行頻度が、コンパイルタイミング情報から取り出したコンパイルタイミング調整値以上か否かを判断する。ステップS83の判断がNoの場合には、処理を終了する。ステップS83の判断がYesの場合には、ステップS85に進む。ステップS84では、プログラムメソッドの呼び出しがあった場合のそのプログラムメソッドの実行頻度が、コンパイルタイミングの標準実行頻度以上か否かを判断する。ステップS84の判断がNoの場合には、処理を終了する。ステップS84の判断がYesの場合には、ステップS85に進む。ステップS85では、呼び出しがあったプログラムメソッドのコンパイルをコンパイラに依頼し、処理を終了する。図29は、動的コンパイル部の動作フローチャートと使用するデータを示す図である。コンパイルタイミング情報に基づいてどのようにコンパイルするかは、コンパイル制御情報の入力判断部で制御しており、動的コンパイル部動的コンパイラを含むは、コンパイルの依頼があった時にコンパイル処理を実行する。図19A、Bおよび図20のコンパイル集中度の計測部が、コンパイル総数を記録するために、動的コンパイル部は、動的コンパイラにコンパイル処理をさせると共に、コンパイル総数図29bをカウントする処理を行う。図29aにおいて、動的コンパイル部は、ステップS90で、プログラムメソッドのコンパイル依頼があるか否かを判断する。ステップS90の判断がNoの場合には、ステップS93に進む。ステップS90の判断がYesの場合には、ステップS91において、依頼のあったプログラムメソッドを動的コンパイラにコンパイルさせ、ステップS92において、コンパイル総数図29bを1増加する。そして、ステップS93において、動的コンパイラを終了するか否かを判断する。これは、利用者からの指示で、動的コンパイラを終了するか否か決定するようにして良い。ステップS93の判断がNoの場合には、ステップS90に戻り、Yesの場合には、処理を終了する。図30及び図31は、本実施形態の効果を説明する図である。コンパイルを行うタイミングを調整して、インタプリタによる実行とネイティブコードによる実行のバランスを最適にすることで、アプリケーションプログラムの起動直後の実行性能が安定する。安定時のアプリケーション実行性能と比較して、アプリケーション起動直後の実行性能が低下する割合を図30のように軽減することができる。図30によれば、アプリケーションプログラムの起動開始後、起動完了と業務の開始前に行なわれる動的コンパイルの増加数が多くなり、アプリケーションプログラムの起動完了と業務の開始後の動的コンパイル数が減って、処理時間が短くなっている。また、アプリケーションの実行性能が安定した状態になるまでの期間を図31のように早めることができる。すなわち、重要度の高いアプリケーションがインタプリタ実行からネイティブコードの実行へ早く切り替わり、アプリケーションプログラムの動作の安定化が早くなる。"