JP5167589B2 - アプリケーションサーバ装置および仮想マシンプログラム - Google Patents

アプリケーションサーバ装置および仮想マシンプログラム Download PDF

Info

Publication number
JP5167589B2
JP5167589B2 JP2006035204A JP2006035204A JP5167589B2 JP 5167589 B2 JP5167589 B2 JP 5167589B2 JP 2006035204 A JP2006035204 A JP 2006035204A JP 2006035204 A JP2006035204 A JP 2006035204A JP 5167589 B2 JP5167589 B2 JP 5167589B2
Authority
JP
Japan
Prior art keywords
virtual machine
procedure
execution frequency
frequency information
application
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.)
Expired - Fee Related
Application number
JP2006035204A
Other languages
English (en)
Other versions
JP2007213490A (ja
Inventor
幸浩 木村
正和 林
雅史 橋口
英俊 服部
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2006035204A priority Critical patent/JP5167589B2/ja
Priority to US11/477,165 priority patent/US8332845B2/en
Publication of JP2007213490A publication Critical patent/JP2007213490A/ja
Application granted granted Critical
Publication of JP5167589B2 publication Critical patent/JP5167589B2/ja
Expired - Fee Related 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/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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Description

この発明は、実行頻度の高い手続きを中間コードからネイティブコードに変換して実行することによりアプリケーションの実行速度を改善させるアプリケーションサーバシステムおよび仮想マシンプログラムに関し、特に、実行頻度の高い手続きを変換する処理を開始する時期を適切に調整することができ、さらに、この変換処理にともなう負荷によってアプリケーションの実行に支障が生じることを防止することができるアプリケーションサーバシステムおよび仮想マシンプログラムに関する。
Java(登録商標)アプリケーションのように、仮想マシン上で中間コードを実行させる実行形態をとるアプリケーションは、実行ファイルのサイズが小さく、様々な環境で実行が可能であるという利点を有する一方で、実行速度の面からみると、ネイティブコードからなるアプリケーションに劣ることがある。
このような実行速度における欠点を改善するため、中間コードからなるアプリケーションの一部をネイティブコードに変換して実行する技術が知られている。例えば、非特許文献1には、予め、アプリケーションの一部をネイティブコードに変換しておく技術が開示されている。また、特許文献1には、アプリケーションの実行時に手続きの実行頻度を集計し、実行頻度の高い手続きを動的にネイティブコードに変換する技術が開示されている。
特開2005−346407号公報 "ネイティブ イメージ ジェネレータ (Ngen.exe)"、 [online]、 マイクロソフト株式会社、 [平成18年1月27日検索]、 インターネット<URL: http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cptools/html/cpgrfnativeimagegeneratorngenexe.asp>
しかしながら、非特許文献1にて開示されている技術では、アプリケーションのどの部分をネイティブコードに変換すれば実行速度の改善に有効であるかを検討することが必要であるため、運用に手間がかかる。また、実行時にメモリ上のどこに配置されてもよいようにするため、ネイティブコードを再配置可能な構造、すわなち、実行時にアドレス変換を必要とする構造にする必要があり、変換後のネイティブコードは、仮想マシンで変換される通常のネイティブコードよりも実行速度の面で劣ったものとなる。
一方、特許文献1にて開示されている技術では、ネイティブコードに変換すべき箇所が自動的に選択され、ネイティブコードを再配置可能な構造にする必要もないので、上記の問題は生じない。しかし、この従来技術においては、実行頻度の集計が進んで実行頻度の高い手続きの変換が開始されるまでは、実行速度が改善されることがなく、また、変換が開始された後は、中間コードの変換とアプリケーションの実行が平行して行われることになるため、負荷が高まってアプリケーションの実行に支障が生じる場合がある。
この発明は、上述した従来技術による問題点を解消するためになされたものであり、実行頻度の高い手続きをネイティブコードへ変換する処理を開始する時期を適切に調整することができ、さらに、この変換処理にともなう負荷によってアプリケーションの実行に支障が生じることを防止することができるアプリケーションサーバシステムおよび仮想マシンプログラムを提供することを目的とする。
上述した課題を解決し、目的を達成するため、本発明は、中間コードからなるアプリケーションを実行する仮想マシン、前記仮想マシンの起動を制御するアプリケーションサーバとを備えるアプリケーションサーバシステムであって、前記アプリケーションサーバ、前記アプリケーションにおける手続きの実行頻度を集計した実行頻度情報を外部から取得するべき旨と、該実行頻度情報に基づいて実行頻度が所定の値よりも高い手続きを中間コードからネイティブコードにコンパイルすべき旨と、仮想マシンの起動直後もしくは手続きの呼び出し時のいずれでコンパイルを実行するかを示すタイミングとを指定して前記仮想マシンを起動する仮想マシン制御手段を備え、前記仮想マシン、前記アプリケーションサーバ指定に従って前記実行頻度情報を外部から取得する実行頻度情報入力手段と、前記実行頻度情報入力手段によって取得された前記実行頻度情報から実行頻度が所定の値よりも大きい手続きを選択するコンパイル対象選択手段と、前記コンパイル対象選択手段により選択された手続きを、前記仮想マシン制御手段で指定されたタイミングで、ネイティブコードにコンパイルするコンパイル手段と、実行中の前記アプリケーションにおいて前記コンパイル手段によってコンパイルされたネイティブコードが存在する手続きが呼び出された場合に、中間コードに代えて前記ネイティブコードを実行する実行制御手段とを備えたことを特徴とする。
この発明によれば、アプリケーションサーバプログラムの指示に基づいて、仮想マシンプログラムが外部から実行頻度情報を取得し、この実行頻度情報に基づいて実行頻度の高い手続きをネイティブコードに変換するように構成したので、仮想マシンプログラムが実行頻度情報の集計を開始する前から変換を開始できることとなり、アプリケーションサーバシステムにおいて仮想マシンプログラムが起動されてから実行頻度の高い手続きをネイティブコードに変換する処理が開始されるまでの時間が大きく短縮される。
また、本発明は、中間コードからなるアプリケーションにおける手続きの実行頻度を集計した実行頻度情報を外部から取得するべき旨と、該実行頻度情報に基づいて実行頻度が所定の値よりも高い手続きを中間コードからネイティブコードにコンパイルすべき旨と、仮想マシンの起動直後もしくは手続きの呼び出し時のいずれでコンパイルを実行するかを示すタイミングとが指定された起動パラメータとを受信する受信手順と、前記実行頻度情報において実行頻度が所定値よりも高い手続きを、受信手順で受信した起動パラメータで指定されたタイミングで、中間コードからネイティブコードに変換するコンパイル手順と、実行中の前記アプリケーションにおいて前記コンパイル手順によってコンパイルされたネイティブコードが存在する手続きが呼び出された場合に、中間コードに代えて前記ネイティブコードを実行する実行制御手順コンピュータに実行させることを特徴とする。
この発明によれば、実行頻度情報に基づいて実行頻度の高い手続きをネイティブコードへ変換する機能を有する仮想マシンプログラムにおいて、実行頻度情報を外部から取得できるように構成したので、仮想マシンプログラムが起動されてから実行頻度の高い手続きをネイティブコードに変換する処理が開始されるまでの時間が大きく短縮される。
また、本発明は、上記の発明において、前記実行頻度情報入力手順によって取得された前記実行頻度情報から実行頻度が所定の値よりも大きい手続きを選択し、選択した手続きをネイティブコードに変換する処理を前記コンパイル手順に実行させるコンパイル対象選択手順をさらにコンピュータに実行させることを特徴とする。
この発明によれば、実行頻度情報を外部から取得された場合に、その実行頻度情報から実行頻度が所定の値よりも大きい手続きを選択して、アプリケーションサーバプログラムがリクエストの処理を開始する前に、選択した手続きをネイティブコードに変換する処理をコンパイル手段に一括実行させるように構成したので、選択した手続きの変換処理にともなう負荷によってアプリケーションの実行に支障が生じることを防止できる。
また、本発明は、上記の発明において、前記コンパイル手順は、前記アプリケーションを実行中に手続きが呼び出された場合に、前記実行頻度情報を参照して該手続きの実行頻度を取得し、取得された実行頻度が所定の値よりも高ければ、該手続きを中間コードからネイティブコードにコンパイルすることを特徴とする。
この発明によれば、実行頻度情報において実行頻度が所定の値よりも大きい手続きをネイティブコードへ変換する処理を該当する手続きが呼び出されたタイミングで実行するように構成したので、変換処理にともなう負荷の発生を分散させることができる。
また、本発明は、上記の発明において、前記コンパイル手順は、CPUの負荷が所定の値よりも高い場合は、手続きをネイティブコードにコンパイルする処理を行わないことを特徴とする。
この発明によれば、CPUの負荷が所定の値よりも大きい場合は、実行頻度が所定の値よりも大きい手続きをネイティブコードへ変換する処理を行わないように構成したので、変換処理にともなう負荷の発生によってアプリケーションの実行に支障がでることを防止することができる。
本発明によれば、アプリケーションサーバプログラムの指示に基づいて、仮想マシンプログラムが外部から実行頻度情報を取得し、この実行頻度情報に基づいて実行頻度の高い手続きをネイティブコードに変換するように構成したので、仮想マシンプログラムが実行頻度情報の集計を開始する前から変換を開始できることとなり、アプリケーションサーバシステムにおいて仮想マシンプログラムが起動されてから実行頻度の高い手続きをネイティブコードに変換する処理が開始されるまでの時間が大きく短縮されるという効果を奏する。
また、本発明によれば、実行頻度情報に基づいて実行頻度の高い手続きをネイティブコードへ変換する機能を有する仮想マシンプログラムにおいて、実行頻度情報を外部から取得できるように構成したので、仮想マシンプログラムが起動されてから実行頻度の高い手続きをネイティブコードに変換する処理が開始されるまでの時間が大きく短縮されるという効果を奏する。
また、本発明によれば、実行頻度情報を外部から取得された場合に、その実行頻度情報から実行頻度が所定の値よりも大きい手続きを選択して、アプリケーションサーバプログラムがリクエストの処理を開始する前に、選択した手続きをネイティブコードに変換する処理をコンパイル手段に一括実行させるように構成したので、選択した手続きの変換処理にともなう負荷によってアプリケーションの実行に支障が生じることを防止できるという効果を奏する。
また、本発明によれば、実行頻度情報において実行頻度が所定の値よりも大きい手続きをネイティブコードへ変換する処理を該当する手続きが呼び出されたタイミングで実行するように構成したので、変換処理にともなう負荷の発生を分散させることができるという効果を奏する。
また、本発明によれば、CPUの負荷が所定の値よりも大きい場合は、実行頻度が所定の値よりも大きい手続きをネイティブコードへ変換する処理を行わないように構成したので、変換処理にともなう負荷の発生によってアプリケーションの実行に支障がでることを防止することができるという効果を奏する。
以下に添付図面を参照して、本発明に係るアプリケーションサーバシステムおよび仮想マシンプログラムの好適な実施の形態を詳細に説明する。
まず、本実施例に係るアプリケーションサーバシステムの構成について説明する。図1は、本実施例に係るアプリケーションサーバシステム10の構成を示すブロック図である。
同図に示すように、アプリケーションサーバシステム10は、アプリケーションサーバ100と、仮想マシン200と、Java(登録商標)アプリケーション300とを有する。ここで、アプリケーションサーバシステム10は、サーバ装置1上で稼動しているものとし、サーバ装置1は、ネットワークを通じて端末装置2と接続されているものとする。
アプリケーションサーバ100は、仮想マシン200を起動させ、さらに、仮想マシン200の上でJava(登録商標)アプリケーション300を起動させるプログラムである。なお、アプリケーションサーバ100は、複数の仮想マシン200を起動させることができる。
また、アプリケーションサーバ100は、端末装置2で稼動するブラウザ20のようなクライアントプログラムからリクエストを受け取ると、そのリクエストをJava(登録商標)アプリケーション300に引き渡して処理させ、結果を受け取ると、それを整形してクライアントプログラムへ応答する。アプリケーションサーバ100とクライアントプログラムの間のやりとりは、HTTP(HyperText Transfer Protocol)などのプロトコルに基づいて行われる。
仮想マシン200は、Java(登録商標)の中間コードであるバイトコードを実行可能な仮想マシンであり、実行頻度の高い手続き(Java(登録商標)においてはメソッドとも呼ばれる)を動的にネイティブコードへ変換して実行し、実行速度を向上させる機能を備える。ネイティブコードとは、サーバ装置1が備えるCPU(Central Processing Unit)が直接実行できるコード(命令)のことである。
Java(登録商標)アプリケーション300は、特定の業務用途を満たすためにJava(登録商標)によって作成されたプログラムであり、クラスファイルと呼ばれる複数のモジュールから構成される。クラスファイルは、Java(登録商標)のソースコードをバイトコード列へ変換したものである。なお、以下の説明において、単にアプリケーションという場合は、Java(登録商標)アプリケーション300と同様にJava(登録商標)によって作成されたアプリケーションを指すものとする。
次に、本実施例に係るアプリケーションサーバシステムにおける仮想マシンの起動方法について説明する。図2は、本実施例に係るアプリケーションサーバシステムにおける仮想マシンの起動方法を説明するための説明図である。
同図に示すように、アプリケーションサーバ100は、仮想マシン200を起動するにあたって、実行頻度情報取得方式と、コンパイルタイミングと、実行頻度閾値と、CPU負荷閾値という起動パラメータを指定する。
実行頻度情報取得方式は、手続きの実行頻度を手続きごとに集計した情報(以下、この情報を「実行頻度情報」という)をどのように取得するかを指定するパラメータであり、「なし」、「プロセス間通信」もしくは「ファイル」のいずれかの値をとる。
「なし」は、実行頻度情報を外部から取得せず、自身で集計した実行頻度情報のみに基づいて実行頻度の高い手続きを選定すべきことを意味する。この値が指定された場合、仮想マシン200は、実行頻度情報の集計が進むまで、実行頻度の高い手続きをネイティブコードへ変換する処理(以下、この処理を「動的コンパイル」という)を開始することができないため、仮想マシン200上で起動されたアプリケーションは、起動後しばらくは実行速度が改善されない状態のままとなる。
「プロセス間通信」は、稼働中の他の仮想マシンが集計した実行頻度情報を共有メモリなどを用いたプロセス間通信によって取得すべきことを意味する。そして、「ファイル」は、実行頻度情報をファイルから入手すべきことを意味する。このファイルは、稼働中の他の仮想マシンが出力したものである場合もあれば、かつて稼動していた他の仮想マシンが出力したものである場合もある。
実行頻度情報取得方式として「プロセス間通信」もしくは「ファイル」のいずれかの値が指定された場合、仮想マシン200は、取得した実行頻度情報に基づいて動的コンパイルを即座に開始することができる。また、これらの値が指定された場合、仮想マシン200は、実際にアプリケーションの実行が開始される前に動的コンパイルを一通り完了し、アプリケーションが高速に実行可能な状態を予め作っておくこともできる。
なお、実行頻度情報取得方式として「プロセス間通信」が指定された場合に必要となるハンドル等や、実行頻度情報取得方式として「ファイル」が指定された場合に必要となるファイル名等は、アプリケーションサーバ100が指定することとしてもよいし、予め設定ファイルに記述されたものを使用することとしてもよい。
コンパイルタイミングは、実行頻度情報が外部から取得された場合に、その実行頻度情報から実行頻度が高いと判断される手続きの動的コンパイルを実行するタイミングを指定するパラメータであり、「起動直後」もしくは「手続き呼び出し時」のいずれかの値をとる。「起動直後」は、仮想マシン200が起動した直後に一括して動的コンパイルを実行すべきことを意味し、「手続き呼び出し時」は、対象の手続きが呼び出されたときにその手続きの動的コンパイルを行うべきことを意味する。
コンパイルタイミングの指定が「起動直後」である場合、実行頻度の高い手続きの変換が一通り完了するまでの時間は短くなるが、発生する負荷は非常に大きくなる。一方、コンパイルタイミングの指定が「手続き呼び出し時」である場合、実行頻度の高い手続きの変換が一通り完了するまでの時間は長くなるが、動的コンパイルによる負荷の発生は分散される。
実行頻度閾値は、手続きの実行頻度の高さを判定するための閾値であり、実行頻度情報における実行頻度がこの閾値よりも大きい手続きが動的コンパイルの対象となる。CPU負荷閾値は、CPUに高い負荷がかかっているときに動的コンパイルを行うことによってさらに負荷を増大させることを防止するための閾値であり、CPUの負荷がこの閾値よりも高い場合、仮想マシン200は、動的コンパイルを中止する。
このように、本実施例に係るアプリケーションサーバシステムにおいては、アプリケーションサーバ100は、起動パラメータによって、仮想マシン200が動的コンパイルを開始する時期と動的コンパイルによる負荷の集中度合いを調整することができ、また、動的コンパイルによる負荷によってアプリケーションの実行に支障がでることを防止することができる。
また、仮想マシン200は、動的コンパイルを一通り終えた後、コンパイル完了通知をアプリケーションサーバ100に応答するので、アプリケーションサーバ100は、仮想マシン200を起動した後、この応答を待って、実行頻度が高い手続きが全てネイティブコードに変換された状態でアプリケーションを起動することもできる。
次に、アプリケーションサーバ100が仮想マシン200を起動するにあたって指定する起動パラメータの具体例を起動目的ごとに示す。
図3−1は、仮想マシン200を運用仮想マシン201として起動する場合の起動パラメータの一例を示す図である。運用仮想マシン201は、アプリケーションサーバ100がクライアントアプリケーションから受け付けたリクエストを処理するアプリケーションを起動するための仮想マシンである。
運用仮想マシン201の起動は、アプリケーションサーバ100がクライアントアプリケーションからのリクエストの受け付けを開始する前に行われる。このため、大きな負荷が発生してもアプリケーションに支障がでることはない。また、アプリケーションが高速に動作可能な状態をなるべく早く作り上げることが好ましいが、この段階では、アプリケーションを実行している他の仮想マシン200は存在しない。
そこで、アプリケーションサーバ100は、運用仮想マシン201を起動させるにあたって、実行頻度情報取得方式として「ファイル」を、コンパイルタイミングとして「起動直後」を、実行頻度閾値として「1000回」を、そしてCPU負荷閾値として「100%」を起動パラメータとして指定している。
実行頻度情報取得方式として「ファイル」を指定しているのは、既に集計されている実行頻度情報を利用させて動的コンパイルの開始時期を早めさせるためである。動的コンパイルの開始時期を早めさせるために、実行頻度情報取得方式として「プロセス間通信」を指定することも有効であるが、この時点では他の仮想マシンが起動していないため、これらを指定することはできない。
コンパイルタイミングとして「起動直後」を指定し、CPU負荷閾値として「100%」を指定しているのは、負荷の発生を考慮することなく、動的コンパイルを早期に一通り完了させるためである。
図3−2は、仮想マシン200をリカバリ仮想マシン202として起動する場合の起動パラメータの一例を示す図である。リカバリ仮想マシン202は、図3−1に示した運用仮想マシンが何らかの理由でダウンした場合に、代替の仮想マシンとして新たに起動される仮想マシンである。
リカバリ仮想マシン202の起動は、運用仮想マシン201がダウンした直後、アプリケーションサーバ100がクライアントアプリケーションからのリクエストを受け付けている最中に行われる。すなわち、リカバリ仮想マシン202は、起動直後からアプリケーションを実行する必要があり、実行されるアプリケーションは起動直後からリクエストの対応を行う必要がある。このため、動的コンパイルを集中して実行して大きな負荷を発生させることは好ましくない。
そこで、アプリケーションサーバ100は、リカバリ仮想マシン202を起動させるにあたって、実行頻度情報取得方式として「ファイル」を、コンパイルタイミングとして「手続き呼び出し時」を、実行頻度閾値として「1000回」を、そしてCPU負荷閾値として「60%」を起動パラメータとして指定している。
実行頻度情報取得方式として「ファイル」を指定しているのは、既に集計されている実行頻度情報を利用させて動的コンパイルの開始時期を早めさせるためである。この例では、運用仮想マシン201がダウンしているので、実行頻度情報取得方式として「プロセス間通信」を指定することはできない。
コンパイルタイミングとして「手続き呼び出し時」を指定し、CPU負荷閾値として「60%」を指定しているのは、動的コンパイルによる負荷の発生を分散させ、アプリケーションの実行に支障を生じさせないためである。なお、動的コンパイルによる負荷の発生を軽減させるため、実行頻度閾値としてより大きな値を指定し、動的コンパイルの対象となる手続きの数を減少させることも有効である。
図3−3は、仮想マシン200をスタンバイ仮想マシン203として起動する場合の起動パラメータの一例を示す図である。スタンバイ仮想マシン203は、図3−1に示した運用仮想マシンが何らかの理由でダウンする場合に備えて、代替の仮想マシンとして事前に起動される仮想マシンである。
スタンバイ仮想マシン203の起動は、いつ行ってもよいが、ここでは、運用仮想マシン201が起動した直後であって、アプリケーションサーバ100がクライアントアプリケーションからのリクエストを受け付ける前に行うものとする。このため、動的コンパイルによる負荷を発生を考慮する必要はあまりないものとする。
そこで、アプリケーションサーバ100は、スタンバイ仮想マシン203を起動させるにあたって、実行頻度情報取得方式として「プロセス間通信」を、コンパイルタイミングとして「起動直後」を、実行頻度閾値として「1000回」を、そしてCPU負荷閾値として「80%」を起動パラメータとして指定している。
実行頻度情報取得方式として「プロセス間通信」を指定しているのは、既に起動されている運用仮想マシン201から実行頻度情報を取得させて、動的コンパイルの開始時期を早めさせるためである。なお、運用仮想マシン201は、ファイルから実行頻度情報を取得する等して、集計が十分に進んでいる実行頻度情報を既に保持しているものとする。
コンパイルタイミングとして「起動直後」を指定しているのは、動的コンパイルを早期に一通り完了させるためであり、CPU負荷閾値として「80%」を指定しているのは、運用仮想マシン201における動的コンパイルを優先させるためである。
なお、仮想マシン200を負荷分散仮想マシンとして起動する場合の起動パラメータのも同様のものとなる。負荷分散仮想マシンは、図3−1に示した運用仮想マシン201の負荷が高まった場合に運用仮想マシン201の処理を一部肩代わりできるように、事前に起動される仮想マシンである。
次に、本実施例に係るアプリケーションサーバ100の構成について説明する。図4は、本実施例に係るアプリケーションサーバ100の構成を示す機能ブロック図である。同図に示すように、アプリケーションサーバ100は、プログラム領域110と、データ領域120とを有する。
プログラム領域110は、アプリケーションサーバ100の機能を実現するための命令列等からなる領域であり、仮想マシン制御部111と、アプリケーション制御部112と、リクエスト制御部113とを有する。
仮想マシン制御部111は、仮想マシン200の起動や生存監視を制御する制御部であり、アプリケーション制御部112は、仮想マシン200上でのアプリケーションの起動や生存監視を制御する制御部である。リクエスト制御部113は、クライアントアプリケーションから送信されたリクエストを仮想マシン200上で起動させたアプリケーションに引渡し、処理結果を受け取って要求元のクライアントアプリケーションへ応答するまでの一連の処理を制御する制御部である。
データ領域120は、プログラム領域110の各部が各種機能を実現するために必要なデータを保持する領域であり、設定情報記憶領域121と、仮想マシン情報記憶領域122とを有する。設定情報記憶領域121は、仮想マシン制御部111、アプリケーション制御部112およびリクエスト制御部113の動作を規定する各種設定情報を保持する領域である。仮想マシン情報記憶領域122は、仮想マシン制御部111により起動された仮想マシン200の識別情報等を保持する領域である。
仮想マシン制御部111は、設定情報記憶領域121と仮想マシン情報記憶領域122に保持されている情報に基づいて動作内容を決定する。
例えば、仮想マシン制御部111は、仮想マシン200を運用仮想マシンとして起動するように指示を受けると、設定情報記憶領域121から仮想マシン200を運用仮想マシンとして起動するために必要な情報を取得し、取得した情報に応じた起動パラメータを指定して仮想マシン200を起動する。そして、起動した仮想マシン200を識別するためのプロセスID等の識別情報と共に仮想マシン200を運用仮想マシンとして起動した旨を仮想マシン情報記憶領域122に記録し、起動した仮想マシン200の生存監視を開始する。
また、仮想マシン制御部111は、仮想マシン200をスタンバイ仮想マシンとして起動するように指示を受けると、設定情報記憶領域121から仮想マシン200を運用仮想マシンとして起動するために必要な情報を取得し、取得した情報に応じた起動パラメータを指定して仮想マシン200を起動する。そして、起動した仮想マシン200を識別するためのプロセスID等の識別情報と共に仮想マシン200をスタンバイ仮想マシンとして起動した旨を仮想マシン情報記憶領域122に記録し、起動した仮想マシン200の生存監視を開始する。
このとき、設定情報記憶領域121において、仮想マシン200をスタンバイ仮想マシンとして起動するときは運用仮想マシンからプロセス間通信を通じて実行頻度情報を取得させるべき旨の設定がなされている場合は、仮想マシン情報記憶領域122を参照して運用仮想マシンの識別情報を取得し、この識別情報が示す仮想マシンとスタンバイ仮想マシンとして起動した仮想マシンの間で実行頻度情報の受け渡しがおこなわれるように制御する。
次に、本実施例に係る仮想マシン200の構成について説明する。図5は、本実施例に係る仮想マシン200の構成を示す機能ブロック図である。同図に示すように、仮想マシン200は、プログラム領域210と、データ領域220と、仮想マシンメモリ領域230と、ネイティブコード格納領域240とを有する。
プログラム領域210は、仮想マシン200の機能を実現するための命令列等からなる領域であり、実行頻度管理部211と、プログラム実行部212と、最適化部213とを有する。実行頻度管理部211は、実行頻度情報を管理する処理部であり、実行頻度計数部211aと、実行頻度情報入力部211bと、実行頻度情報出力部211cとを有する。
実行頻度計数部211aは、プログラム実行部212にて手続きが呼び出された頻度を手続きごとに集計する処理部である。実行頻度情報入力部211bは、実行頻度情報を、ファイルからの読み込み、もしくは、プロセス間通信によって外部から入力する処理部であり、実行頻度情報出力部211cは、実行頻度情報を、ファイルへの書き出し、もしくは、プロセス間通信によって外部へ出力する処理部である。
プログラム実行部212は、中間コードからなるアプリケーションを実行する処理部であり、プログラムロード部212aと、インタープリータ212bと、ネイティブコード呼出部212cと、実行制御部212dとを有する。
プログラムロード部212aは、アプリケーションを構成するモジュールであるクラスファイルを読み込んで仮想マシンメモリ領域230に展開する処理部である。インタープリータ212bは、仮想マシンメモリ領域230に展開された中間コードを実行する処理部であり、ネイティブコード呼出部212cは、最適化部213によって動的コンパイルされたネイティブコードを呼び出すことによって手続きを実行する処理部である。
実行制御部212dは、プログラム実行部212を全体制御する制御部であり、プログラムロード部212aにロードさせたプログラムに含まれる中間コードをインタープリータ212bに順次実行させ、既に動的コンパイルされたネイティブコードが存在する手続きの呼び出しに出くわした場合は、ネイティブコード呼出部212cにそのネイティブコードを呼び出させる。
また、実行制御部212dは、プログラムの実行中に手続きの呼び出しに出くわすたびにその手続きの情報を実行頻度計数部211aに通知して実行頻度情報を更新させ、さらに、その手続きのネイティブコードが存在せず、かつ、実行頻度が起動パラメータにて指定された閾値よりも高ければ、最適化部213の動的コンパイラ213bにも同じ情報を引き渡して動的コンパイルを実行させる。
また、実行制御部212dは、プログラムロード部212aにクラスファイルを読み込ませた後、そのクラスファイルが実行頻度情報の収集時と同一であるかを確認し、改修が認められる場合はそのクラスファイルに含まれる手続きに関する情報を実行頻度情報から削除する。改修によって実行頻度情報の収集時と、処理手続きが変化している可能性があるためである。
最適化部213は、動的コンパイルを実現する処理部であり、コンパイル対象選択部213aと、動的コンパイラ213bと、負荷判定部213cとを有する。
コンパイル対象選択部213aは、実行頻度情報入力部211bによって外部から実行頻度情報が取得され、かつ、起動パラメータにおいてコンパイルタイミングとして「起動直後」が指定されている場合に、実行頻度が起動パラメータにて指定された閾値よりも高く、動的コンパイルが行われていない手続きを選択し、選択した手続きの情報を動的コンパイラ213bに引き渡して動的コンパイルを実行させる処理部である。
動的コンパイラ213bは、実行頻度が起動パラメータにて指定された閾値よりも高い手続きを動的コンパイルする処理部である。なお、動的コンパイラ213bは、負荷判定部213cにてCPUの負荷が高いと判定された場合は、動的コンパイルを中止する。負荷判定部213cは、CPUの負荷が起動パラメータにて指定された閾値よりも高いか否かを判定する処理部である。
データ領域220は、プログラム領域210の各部が各種処理を実現するために必要なデータを保持する領域であり、設定情報記憶領域221と、実行頻度情報記憶領域222と、実行頻度カウンタ記憶領域223と、変換済手続情報記憶領域224とを有する。設定情報記憶領域121は、各種設定情報を保持する領域であり、指定された起動パラメータもここに保持される。
実行頻度情報記憶領域222は、外部から読み込まれた実行頻度情報を保持する領域である。実行頻度情報は、実行頻度データとモジュールデータとして保持される。図6−1は、実行頻度データのデータ構成の一例を示す図である。同図に示すように、実行頻度データは、手続き識別子と、実行頻度と、モジュールIDという項目を有し、手続きごとにデータが作成される。
手続き識別子は、手続きを識別するための識別子である。Java(登録商標)では、クラスファイルと呼ばれるモジュール内で戻り値や引数の型が異なる同名の手続きを複数定義することができるため、手続き識別子は、手続き名に戻り値や引数の型を付加した形式となっている。例えば、1行目の「int Class1.func1(long, String)」という手続きは、Class1というクラスファイル内で定義されたfunc1という名前の手続きであって、longとStringという型の2つの引数をもち、intという型の戻り値を返すことを示している。
実行頻度は、当該の手続きの実行頻度を示す数値である。この数値は、一定時間内の平均実行回数であってもよいし、延べ実行回数であってもよい。モジュールIDは、当該の手続きが定義されているクラスファイルの識別番号であり、モジュールデータのモジュールIDと対応する。
図6−2は、モジュールデータのデータ構成の一例を示す図である。同図に示すように、モジュールデータは、モジュールIDと、モジュール名と、サイズと、チェックサムという項目を有し、クラスファイルごとにデータが作成される。
モジュールIDは、当該のクラスファイルの識別番号であり、モジュール名は、クラスファイルの存在場所を示す名称である。サイズは、クラスファイルのファイルサイズであり、チェックサムは、クラスファイルの同一性を確認するための符号値である。
図5の説明に戻って、実行頻度カウンタ記憶領域223は、仮想マシン200の起動後に、実行頻度計数部211aによって集計された実行頻度情報を保持する領域である。実行頻度情報は、実行頻度情報記憶領域222と同様に、実行頻度データとモジュールデータとして保持される。
変換済手続情報記憶領域224は、動的コンパイルが完了した手続きの情報を保持する領域である。そして、仮想マシンメモリ領域230は、プログラム実行部212によって実行されるアプリケーションを構成するクラスファイル等が展開される領域であり、ネイティブコード格納領域240は、最適化部213によって動的コンパイルされて生成されたネイティブコードが格納される領域である。
次に、仮想マシン200の処理手順について説明する。図7は、仮想マシン200の起動時の処理手順を示すフローチャートである。同図は、仮想マシン200が、起動後に外部から実行頻度情報を取得し、その実行頻度情報において実行頻度が高い手続きを全て動的コンパイルするまでの処理手順を示している。
同図に示すように、仮想マシン200は、起動時に指定された起動パラメータにおいて実行頻度情報を外部から取得することを求められていた場合は(ステップS101肯定)、以下の一連の処理を行う。なお、起動パラメータにおいて実行頻度情報を外部から取得することを求められていなかった場合は(ステップS101否定)、以下の一連の処理を行うことなく他の処理へ移行する。
起動パラメータにおいて実行頻度情報を外部から取得することを求められていた場合、実行頻度情報入力部211bは、起動パラメータにて指定された方式で実行頻度情報を外部から取得し、実行頻度情報記憶領域222に格納する(ステップS102)。
続いて、コンパイル対象選択部213aが、実行頻度情報記憶領域222から実行頻度が起動パラメータにて指定された頻度よりも多く、まだネイティブコードに変換されていない手続きの情報を取得する(ステップS103)。ここで、該当する手続きが存在しなければ(ステップS104否定)、コンパイル完了通知をアプリケーションサーバ100へ送信した後(ステップS110)、一連の処理を完了して、他の処理へ移行する。
該当する手続きが存在し、その手続きの情報を取得できた場合(ステップS104肯定)、コンパイル対象選択部213aは、取得した情報を動的コンパイラ213bに引き渡してその手続きをネイティブコードに変換するように要求する。
要求を受けた動的コンパイラ213bは、まず、負荷判定部213cにCPUの負荷が起動パラメータにて指定された閾値よりも高いかどうかを問い合せる。ここで、CPUの負荷が起動パラメータにて指定された閾値よりも高かった場合は(ステップS105否定)、動的コンパイラ213bは、手続きの変換を中止してその旨をコンパイル対象選択部213aへ通知し、コンパイル対象選択部213aは、ステップS103から処理を再開する。
CPUの負荷が起動パラメータにて指定された閾値よりも低かった場合は(ステップS105肯定)、動的コンパイラ213bは、実行制御部212dに変換対象の手続きを含むモジュールのロードを依頼する。
実行制御部212dは、依頼を受けると、プログラムロード部212aに指示して、依頼されたモジュールをロードさせる(ステップS106)。そして、ロードされたモジュールのファイルサイズとチェックサムを求め、実行頻度情報記憶領域222に格納されている当該のモジュールのファイルサイズとチェックサムと比較する。
ここで、ファイルサイズとチェックサムの一方でも一致しない場合は(ステップS107肯定)、モジュールが更新されていると判断して、実行頻度情報記憶領域222から当該のモジュールに関連する情報を削除し(ステップS108)、動的コンパイラ213bにその旨を通知する。
モジュールが更新されていると判断された場合、動的コンパイラ213bは、手続きの変換を中止してその旨をコンパイル対象選択部213aへ通知し、コンパイル対象選択部213aは、ステップS103から処理を再開する。
一方、実行制御部212dから正常にモジュールがロードされた旨の通知があった場合、動的コンパイラ213bは、指定された手続きをネイティブコードに変換してネイティブコード格納領域240に格納し、その旨を変換済手続情報記憶領域224に記録する(ステップS109)。そして、動的コンパイラ213bは、変換を完了した旨をコンパイル対象選択部213aへ通知し、コンパイル対象選択部213aは、次の手続きの情報を取得するため、ステップS103から処理を再開する。
図8は、仮想マシン200の手続き呼び出し時の処理手順を示すフローチャートである。同図は、仮想マシン200が、実行中のアプリケーションの実行中において手続きの呼び出しが発生した後、その手続きに相当する処理の実行を完了するまでの処理手順を示している。
同図に示すように、実行制御部212dは、実行中のアプリケーションにおいて手続きの呼び出しが発生すると(ステップS201)、手続きを含むモジュールがロードされていなければ、プログラムロード部212aに指示してこれをロードさせる(ステップS202)。そして、呼び出された手続きの情報を実行頻度計数部211aに引き渡して、後述する実行頻度情報更新処理を実行させる(ステップS203)。
続いて、実行制御部212dは、変換済手続情報記憶領域224を参照し、呼び出された手続きに対応するネイティブコードが既に存在する場合は(ステップS204肯定)、ネイティブコード呼出部212cに指示してそのネイティブコードを呼び出させて処理を完了する(ステップS212)。
呼び出された手続きに対応するネイティブコードが存在しない場合は(ステップS204否定)、実行制御部212dは、外部から取得した実行頻度情報を記憶する実行頻度情報記憶領域222を参照し、手続きの実行頻度が起動パラメータにて指定された頻度よりも多いか否かを確認する。
ここで、実行頻度が起動パラメータにて指定された頻度よりも少ない場合は(ステップS205否定)、ステップS208へ遷移して、仮想マシン200の起動後の手続きの実行頻度が起動パラメータにて指定された頻度よりも多いか否かを確認する。
実行頻度が起動パラメータにて指定された頻度よりも多い場合(ステップS205肯定)、実行制御部212dは、呼び出された手続きを含むモジュールのサイズとチェックサムを求め、実行頻度情報記憶領域222のモジュールデータに記録されている同モジュールのファイルサイズおよびチェックサムと比較する。
そして、サイズとチェックサムの一方でも一致しない場合は(ステップS206肯定)、モジュールが更新されていると判断して、実行頻度情報記憶領域222から当該のモジュールに関する情報を削除し(ステップS207)、ステップS208へ遷移して、仮想マシン200の起動後の手続きの実行頻度が起動パラメータにて指定された頻度よりも多いか否かを確認する。
また、サイズとチェックサムの双方が一致する場合は(ステップS206否定)、モジュールが更新されていないと判断して、呼び出された手続きに関する情報を動的コンパイラ213bに引き渡してその手続きをネイティブコードに変換するように要求する。
ステップS205において実行頻度が起動パラメータにて指定された頻度よりも少なかった場合(ステップS205否定)、もしくは、ステップS206においてモジュールが更新されていると判断された場合(ステップS206肯定)、実行制御部212dは、実行頻度カウンタ記憶領域223を参照し、仮想マシン200の起動後の手続きの実行頻度が起動パラメータにて指定された頻度よりも多いか否かを確認する。
ここで、実行頻度が起動パラメータにて指定された頻度よりも少ない場合は(ステップS208否定)、インタープリータ212bに手続きを中間コードのまま実行させて処理を完了する(ステップS211)。一方、実行頻度が起動パラメータにて指定された頻度よりも多い場合は(ステップS208肯定)、呼び出された手続きに関する情報を動的コンパイラ213bに引き渡してその手続きをネイティブコードに変換するように要求する。
要求を受けた動的コンパイラ213bは、負荷判定部213cにCPUの負荷が起動パラメータにて指定された閾値よりも高いかどうかを問い合せる。ここで、CPUの負荷が起動パラメータにて指定された閾値よりも高かった場合は(ステップS209否定)、動的コンパイラ213bは、手続きの変換を中止してその旨を実行制御部212dへ通知し、実行制御部212dは、インタープリータ212bに手続きを中間コードのまま実行させて処理を完了する(ステップS211)。
CPUの負荷が起動パラメータにて指定された閾値よりも低かった場合は(ステップS209肯定)、指定された手続きをネイティブコードに変換してネイティブコード格納領域240に格納し、その旨を変換済手続情報記憶領域224に記録する(ステップS210)。そして、動的コンパイラ213bは、その旨を実行制御部212dへ通知し、実行制御部212dは、ネイティブコード呼出部212cに指示して変換されたネイティブコードを呼び出させて処理を完了する(ステップS212)。
図9は、実行頻度情報更新処理の処理手順を示すフローチャートである。同図は、実行中のアプリケーションにおいて手続きの呼び出しが発生するたびに、実行頻度計数部211aが、実行頻度情報を更新する処理の処理手順を示している。
実行頻度計数部211aは、呼び出された手続きが、実行頻度カウンタ記憶領域223に登録されていなければ(ステップS301肯定)、手続きを含むモジュールのファイルサイズとチェックサムを取得して(ステップS302)、実行頻度データとモジュールデータに情報を登録する(ステップS303)。
一方、呼び出された手続きが、実行頻度カウンタ記憶領域223に登録されていれば(ステップS301否定)、実行頻度データの実行頻度を更新する(ステップS304)。
上記実施例で説明してきたアプリケーションサーバ100および仮想マシン200は、あらかじめ用意されたプログラムをコンピュータで実行することによって実現される。そこで、以下では、図10をもちいて、かかるプログラムを実行するコンピュータの一例を説明する。
図10は、アプリケーションサーバシステム10を実行するコンピュータ1000を示す機能ブロック図である。このコンピュータ1000は、各種演算処理を実行するCPU(Central Processing Unit)1010と、ユーザからのデータの入力を受け付ける入力装置1020と、各種情報を表示するモニタ1030と、各種プログラム等を記録した記録媒体からプログラム等を読み取る媒体読取り装置1040と、ネットワークを介して他のコンピュータとの間でデータの授受をおこなうネットワークインターフェース装置1050と、各種情報を一時記憶するRAM(Random Access Memory)1060と、ハードディスク装置1070とバス1080で接続して構成される。
そして、ハードディスク装置1070には、アプリケーションサーバプログラム1071と、仮想マシンプログラム1072と、Java(登録商標)アプリケーションプログラム1073と、各種設定情報からなる設定情報ファイル1074が記憶される。
そして、CPU1010がアプリケーションサーバプログラム1071をハードディスク装置1070から読み出してRAM1060に展開することにより、アプリケーションサーバプログラム1071は、アプリケーションサーバ100として機能するようになる。
同様に、CPU1010が仮想マシンプログラム1072をハードディスク装置1070から読み出してRAM1060に展開することにより、仮想マシンプログラム1072は、仮想マシン200として機能するようになり、CPU1010がJava(登録商標)アプリケーションプログラム1073をハードディスク装置1070から読み出してRAM1060に展開することにより、Java(登録商標)アプリケーションプログラム1073は、Java(登録商標)アプリケーション300として機能するようになる。
そして、アプリケーションサーバ100、仮想マシン200およびJava(登録商標)アプリケーション300は、設定情報ファイル1074から読み出した情報等を適宜RAM1060に記憶させ、RAM1060に記憶させたデータ等に基づいて各種データ処理を実行する。
なお、上記のアプリケーションサーバプログラム1071、仮想マシンプログラム1072およびJava(登録商標)アプリケーションプログラム1073については、必ずしもハードディスク装置1070に格納されている必要はなく、CD−ROM等の記憶媒体に記憶されたこれらのプログラムを、コンピュータ1000が読み出して実行するようにしてもよい。また、公衆回線、インターネット、LAN(Local Area Network)、WAN(Wide Area Network)等を介してコンピュータ1000に接続される他のコンピュータ(またはサーバ)等にこれらのプログラムを記憶させておき、コンピュータ1000がこれらからプログラムを読み出して実行するようにしてもよい。
上述してきたように、本実施例では、実行頻度情報を外部から取得できるように仮想マシン200を構成したので、仮想マシン200が起動されてから動的コンパイルが開始されるまでの時間が大きく短縮される。
また、本実施例では、仮想マシン200が実行頻度情報を外部を取得した場合に、その実行頻度情報から実行頻度が所定の値よりも大きい手続きを選択して、アプリケーションサーバプログラムがリクエストの処理を開始する前に、選択した手続きの動的コンパイルを一括実行するように構成したので、選択した手続きの変換処理にともなう負荷によってアプリケーションの実行に支障が生じることを防止できる。
また、本実施例では、手続きが呼び出されたタイミングでその手続きの動的コンパイルを実行するように構成したので、動的コンパイルにともなう負荷の発生を分散させ、動的コンパイルにともなう負荷の発生によってアプリケーションの実行に支障がでることを防止することができる。
また、本実施例では、CPUの負荷が所定の値よりも大きい場合は、動的コンパイルを実行しないように構成したので、動的コンパイルにともなう負荷の発生によってアプリケーションの実行に支障がでることを防止することができる。
なお、上記の実施例では、中間コードを実行する仮想マシンの一例としてJava(登録商標)の中間コードであるバイトコードを実行する仮想マシンをもちいて説明をおこなったが、本発明は、他の種類の中間コードを実行する仮想マシンにおいても有効である。
(付記1)中間コードからなるアプリケーションを実行する仮想マシンプログラムと、
前記仮想マシンプログラムの起動を制御するアプリケーションサーバプログラムとをコンピュータに実行させるアプリケーションサーバシステムであって、
前記アプリケーションサーバプログラムは、
前記アプリケーションにおける手続きの実行頻度を集計した実行頻度情報を外部から取得するべき旨と、該実行頻度情報に基づいて実行頻度が所定の値よりも高い手続きを中間コードからネイティブコードにコンパイルすべき旨とを指定して前記仮想マシンプログラムを起動する仮想マシン制御手段を備え、
前記仮想マシンプログラムは、
前記アプリケーションサーバプログラムの指定に従って前記実行頻度情報を外部から取得する実行頻度情報入力手段と、
前記実行頻度情報入力手段によって取得された前記実行頻度情報から実行頻度が所定の値よりも大きい手続きを選択するコンパイル対象選択手段と、
前記コンパイル対象選択手段により選択された手続きをネイティブコードにコンパイルするコンパイル手段と、
実行中の前記アプリケーションにおいて前記コンパイル手段によってコンパイルされたネイティブコードが存在する手続きが呼び出された場合に、中間コードに代えて前記ネイティブコードを実行する実行制御手段と
を備えたことを特徴とするアプリケーションサーバシステム。
(付記2)前記コンパイル対象選択手段は、選択した全ての手続きが前記コンパイル手段によってネイティブコードにコンパイルされた後に、前記アプリケーションサーバプログラムにその旨を通知することを特徴とする付記1に記載のアプリケーションサーバシステム。
(付記3)前記コンパイル手段は、前記コンパイル対象選択手段より選択された手続きをネイティブコードにコンパイルする代わりに、前記アプリケーションを実行中に手続きが呼び出された場合に、前記実行頻度情報を参照して該手続きの実行頻度を取得し、取得された実行頻度が所定の値よりも高ければ、該手続きを中間コードからネイティブコードにコンパイルすることを特徴とする付記1または2に記載のアプリケーションサーバシステム。
(付記4)前記コンパイル手段は、CPUの負荷が所定の値よりも高い場合は、手続きをネイティブコードにコンパイルする処理を行わないことを特徴とする付記1〜3のいずれか一つに記載のアプリケーションサーバシステム。
(付記5)中間コードからなるアプリケーションを実行中に該アプリケーションにおける手続きの呼び出し頻度を計数して実行頻度情報として記憶手段に記憶させる計数手段と、
前記実行頻度情報において実行頻度の高い手続きを中間コードからネイティブコードに変換するコンパイル手段と、
実行中の前記アプリケーションにおいて前記コンパイル手段によってコンパイルされたネイティブコードが存在する手続きが呼び出された場合に、中間コードに代えて前記ネイティブコードを実行する実行制御手段と
をコンピュータに実行させる仮想マシンプログラムであって、
前記実行頻度情報を外部から取得する実行頻度情報入力手段をさらにコンピュータに実行させることを特徴とする仮想マシンプログラム。
(付記6)前記実行頻度情報入力手段によって取得された前記実行頻度情報から実行頻度が所定の値よりも大きい手続きを選択し、選択した手続きをネイティブコードに変換する処理を前記コンパイル手段に実行させるコンパイル対象選択手段をさらにコンピュータに実行させることを特徴とする付記5に記載の仮想マシンプログラム。
(付記7)前記コンパイル手段は、前記アプリケーションを実行中に手続きが呼び出された場合に、前記実行頻度情報を参照して該手続きの実行頻度を取得し、取得された実行頻度が所定の値よりも高ければ、該手続きを中間コードからネイティブコードにコンパイルすることを特徴とする付記5に記載の仮想マシンプログラム。
(付記8)前記コンパイル手段は、CPUの負荷が所定の値よりも高い場合は、手続きをネイティブコードにコンパイルする処理を行わないことを特徴とする付記5〜7のいずれか一つに記載の仮想マシンプログラム。
(付記9)前記計数手段は、前記実行頻度情報に手続きを含むモジュールのファイルサイズを含めて記憶させ、
前記実行制御手段は、手続きを含むモジュールをロードする場合に、ロードしたモジュールのファイルサイズと前記実行頻度情報に記憶された該モジュールのファイルサイズとを照合し、両者の値が相違している場合は、前記実行頻度情報における該モジュールに関する情報を削除することを特徴とする付記5〜8のいずれか一つに記載の仮想マシンプログラム。
(付記10)前記計数手段は、前記実行頻度情報に手続きを含むモジュールの同一性を確認するための符号値を含めて記憶させ、
前記実行制御手段は、手続きを含むモジュールをロードする場合に、ロードしたモジュールの符号値と前記実行頻度情報に記憶された該モジュールの符号値とを照合し、両者の値が相違している場合は、前記実行頻度情報における該モジュールに関する情報を削除することを特徴とする付記5〜8のいずれか一つに記載の仮想マシンプログラム。
以上のように、本発明に係るアプリケーションサーバシステムおよび仮想マシンプログラムは、中間コードからなるアプリケーションの一部をネイティブコードに変換して実行速度を改善させる場合に有用であり、特に、実行頻度の高い手続きを変換する処理を開始する時期を適切に調整することができ、さらに、この変換処理にともなう負荷によってアプリケーションの実行に支障が生じることを防止することが必要な場合に適している。
アプリケーションサーバシステムの構成を示すブロック図である。 本実施例に係るアプリケーションサーバシステムにおける仮想マシンの起動方法を説明するための図である。 仮想マシンを運用仮想マシンとして起動する場合の起動パラメータの一例を示す図である。 仮想マシンをリカバリ仮想マシンとして起動する場合の起動パラメータの一例を示す図である。 仮想マシンをスタンバイ仮想マシンとして起動する場合の起動パラメータの一例を示す図である。 本実施例に係るアプリケーションサーバの構成を示す機能ブロック図である。 本実施例に係る仮想マシンの構成を示す機能ブロック図である。 実行頻度データのデータ構成の一例を示す図である。 モジュールデータのデータ構成の一例を示す図である。 仮想マシンの起動時の処理手順を示すフローチャートである。 仮想マシンの手続き呼び出し時の処理手順を示すフローチャートである。 実行頻度情報更新処理の処理手順を示すフローチャートである。 アプリケーションサーバシステムを実行するコンピュータを示す機能ブロック図である。
符号の説明
1 サーバ装置
2 端末装置
10 アプリケーションサーバシステム
20 ブラウザ
100 アプリケーションサーバ
110 プログラム領域
111 仮想マシン制御部
112 アプリケーション制御部
113 リクエスト制御部
120 データ領域
121 設定情報記憶領域
122 仮想マシン情報記憶領域
200 仮想マシン
201 運用仮想マシン
202 リカバリ仮想マシン
203 スタンバイ仮想マシン
210 プログラム領域
211 実行頻度管理部
211a 実行頻度計数部
211b 実行頻度情報入力部
211c 実行頻度情報出力部
212 プログラム実行部
212a プログラムロード部
212b インタープリータ
212c ネイティブコード呼出部
212d 実行制御部
213 最適化部
213a コンパイル対象選択部
213b 動的コンパイラ
213c 負荷判定部
220 データ領域
221 設定情報記憶領域
222 実行頻度情報記憶領域
223 実行頻度カウンタ記憶領域
224 変換済手続情報記憶領域
230 仮想マシンメモリ領域
240 ネイティブコード格納領域
300 Java(登録商標)アプリケーション
1000 コンピュータ
1010 CPU
1020 入力装置
1030 モニタ
1040 媒体読取り装置
1050 ネットワークインターフェース装置
1060 RAM
1070 ハードディスク装置
1071 アプリケーションサーバプログラム
1072 仮想マシンプログラム
1073 Java(登録商標)アプリケーションプログラム
1074 設定情報ファイル
1080 バス

Claims (6)

  1. 仮想マシンを実行することにより中間コードからなるアプリケーションを実行し、かつ、アプリケーションサーバプログラムを実行することにより前記仮想マシンの起動を制御するアプリケーションサーバ装置であって、
    前記アプリケーションサーバプログラムは、
    前記アプリケーションサーバ装置上で実行される第1の仮想マシンに対して、前記アプリケーションにおける手続きの実行頻度を集計した第1の実行頻度情報を外部ファイルから取得するべき旨の取得条件と、前記第1の実行頻度情報に基づいて実行頻度が所定の値よりも高い手続きを中間コードからネイティブコードにコンパイルすべき旨と、前記第1の仮想マシンの起動直後にコンパイルを実行する旨を示すタイミングとを指定し、前記アプリケーションサーバ装置上で実行され、かつ前記第1の仮想マシンの起動後に起動される第2の仮想マシンに対して、前記第1の仮想マシンにおける前記アプリケーションにおける手続きの実行頻度情報である第2の実行頻度情報を前記第1の仮想マシンとのプロセス間通信によって取得するべき旨の取得条件と、前記第2の実行頻度情報に基づいて実行
    頻度が前記所定の値よりも高い手続きを中間コードからネイティブコードにコンパイルすべき旨と、前記第2の仮想マシンの起動直後にコンパイルを実行する旨を示すタイミングとを指定して前記第1および第2の仮想マシンを起動する仮想マシン制御手段として前記アプリケーションサーバ装置機能させ
    前記第1および第2の仮想マシンは、
    前記取得条件に従って前記第1または第2の実行頻度情報を前記外部ファイルまたは前記プロセス間通信によって取得する実行頻度情報入力手段と、
    前記実行頻度情報入力手段によって取得された前記第1または第2の実行頻度情報から実行頻度が前記所定の値よりも大きい手続きを選択するコンパイル対象選択手段と、
    前記コンパイル対象選択手段により選択された手続きに対応する中間コードを、前記仮想マシン制御手段で指定されたタイミングで、ネイティブコードにコンパイルするコンパイル手段と、
    実行中の前記アプリケーションにおいて前記コンパイル手段によってコンパイルされたネイティブコードが存在する手続きが呼び出された場合に、中間コードに代えて前記ネイティブコードを実行する実行制御手段として前記アプリケーションサーバ装置を機能させる
    とを特徴とするアプリケーションサーバ装置。
  2. コンピュータに、
    中間コードからなるアプリケーションにおける手続きの実行頻度を集計した実行頻度情報であり、かつ前記コンピュータ上で前記アプリケーションを実行するための他の仮想マシンの実行によって集計された実行頻度情報を前記他の仮想マシンとのプロセス間通信によって取得するべき旨の取得条件と、該実行頻度情報に基づいて実行頻度が所定の値よりも高い手続きを中間コードからネイティブコードにコンパイルすべき旨と、仮想マシンの起動直後もしくは手続きの呼び出し時のいずれでコンパイルを実行するかを示すタイミングとが指定された起動パラメータとを受信する受信手順と、
    前記取得条件に従って前記実行頻度情報を前記プロセス間通信によって取得する実行頻度情報入力手順と、
    前記実行頻度情報において実行頻度が前記所定の値よりも高い手続きを、前記受信手順で受信した起動パラメータで指定されたタイミングで、中間コードからネイティブコードに変換するコンパイル手順と、
    実行中の前記アプリケーションにおいて前記コンパイル手順によってコンパイルされたネイティブコードが存在する手続きが呼び出された場合に、中間コードに代えて前記ネイティブコードを実行する実行制御手順と
    を実行させることを特徴とする仮想マシンプログラム。
  3. 前記コンパイル手順は、前記受信手順により受信した前記起動パラメータに含まれるコンパイル開始条件が、仮想マシンの起動直後にコンパイルを実行する旨を示す場合であって、当該起動直後に前記実行頻度情報入力手順によって前記実行頻度情報が取得された場合に、前記実行頻度情報から実行頻度が前記所定の値よりも大きい手続きを選択し、選択した手続きに対応する中間コードをネイティブコードにコンパイルする
    とを特徴とする請求項2に記載の仮想マシンプログラム。
  4. 前記コンパイル手順は、前記受信手順により受信した前記起動パラメータに含まれるコンパイル開始条件が、手続きの呼び出し時にコンパイルを実行する旨を示す場合であって、前記アプリケーションを実行中に手続きが呼び出された場合に、前記実行頻度情報を参照して該手続きの実行頻度を取得し、取得された実行頻度が前記所定の値よりも高ければ、該手続きに対応する中間コードをネイティブコードにコンパイルする
    ことを特徴とする請求項2に記載の仮想マシンプログラム。
  5. 前記コンパイル手順は、前記コンピュータが備えるCPUの負荷が所定の値よりも高い場合は、前記手続きに対応する中間コードをネイティブコードにコンパイルする処理を行わない
    ことを特徴とする請求項2〜4のいずれか一つに記載の仮想マシンプログラム。
  6. 仮想マシンを実行することにより中間コードを用いて表現されたアプリケーションを、前記アプリケーションに含まれる複数の手続きの各々の実行頻度に基づいて前記中間コードをネイティブコードに変換し、かつ、アプリケーションサーバプログラムを実行することにより前記仮想マシンの起動を制御するアプリケーションサーバ装置であって、
    仮想マシンが第1の仮想マシンであるか、前記第1の仮想マシンの起動後に起動される第2の仮想マシンであるかを示した仮想マシンの種類を含む前記仮想マシンの起動指示を受信すると、受信した前記起動指示に含まれる前記仮想マシンの種類が前記第1の仮想マシンを示す場合には、前記アプリケーションに含まれる複数の手続きの各々の実行頻度の取得を外部ファイルから取得する取得方法を指定し、受信した前記起動指示に含まれる前記仮想マシンの種類が前記第2の仮想マシンを示す場合には、前記第1の仮想マシンにおける前記アプリケーションに含まれる複数の手続きの各々の実行頻度の取得を前記第1の仮想マシンとのプロセス間通信によって取得する取得方法を指定して前記起動指示によって起動が指示された前記第1または第2の仮想マシンを起動する仮想マシン制御手段
    を備えたことを特徴とするアプリケーションサーバ装置。
JP2006035204A 2006-02-13 2006-02-13 アプリケーションサーバ装置および仮想マシンプログラム Expired - Fee Related JP5167589B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2006035204A JP5167589B2 (ja) 2006-02-13 2006-02-13 アプリケーションサーバ装置および仮想マシンプログラム
US11/477,165 US8332845B2 (en) 2006-02-13 2006-06-28 Compile timing based on execution frequency of a procedure

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006035204A JP5167589B2 (ja) 2006-02-13 2006-02-13 アプリケーションサーバ装置および仮想マシンプログラム

Publications (2)

Publication Number Publication Date
JP2007213490A JP2007213490A (ja) 2007-08-23
JP5167589B2 true JP5167589B2 (ja) 2013-03-21

Family

ID=38491840

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006035204A Expired - Fee Related JP5167589B2 (ja) 2006-02-13 2006-02-13 アプリケーションサーバ装置および仮想マシンプログラム

Country Status (2)

Country Link
US (1) US8332845B2 (ja)
JP (1) JP5167589B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9971614B2 (en) 2015-08-24 2018-05-15 Canon Kabushiki Kaisha Information processing apparatus and method of controlling the same
JP7367079B2 (ja) 2019-08-16 2023-10-23 グーグル エルエルシー マルチチップシステムにおける同期

Families Citing this family (96)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8296742B2 (en) * 2006-10-10 2012-10-23 Microsoft Corporation Automatic native generation
US8285877B1 (en) * 2006-12-05 2012-10-09 Nvidia Corporation Intelligent background data conversion
US7958489B2 (en) * 2007-04-12 2011-06-07 Microsoft Corporation Out of band data augmentation
US8806324B2 (en) * 2007-08-03 2014-08-12 Sap Ag Annotation data filtering of computer files
US8458658B2 (en) * 2008-02-29 2013-06-04 Red Hat, Inc. Methods and systems for dynamically building a software appliance
US8089168B2 (en) * 2008-04-15 2012-01-03 Claude Chevrette Tire actuated generator for use on cars
US8423989B2 (en) * 2008-05-02 2013-04-16 Synchonoss Technologies, Inc. Software parameter management
US8935692B2 (en) 2008-05-22 2015-01-13 Red Hat, Inc. Self-management of virtual machines in cloud-based networks
US7886038B2 (en) 2008-05-27 2011-02-08 Red Hat, Inc. Methods and systems for user identity management in cloud-based networks
US20090300423A1 (en) * 2008-05-28 2009-12-03 James Michael Ferris Systems and methods for software test management in cloud-based network
US8849971B2 (en) 2008-05-28 2014-09-30 Red Hat, Inc. Load balancing in cloud-based networks
US9092243B2 (en) 2008-05-28 2015-07-28 Red Hat, Inc. Managing a software appliance
US8239509B2 (en) 2008-05-28 2012-08-07 Red Hat, Inc. Systems and methods for management of virtual appliances in cloud-based network
US8108912B2 (en) 2008-05-29 2012-01-31 Red Hat, Inc. Systems and methods for management of secure data in cloud-based network
US8341625B2 (en) * 2008-05-29 2012-12-25 Red Hat, Inc. Systems and methods for identification and management of cloud-based virtual machines
US8943497B2 (en) * 2008-05-29 2015-01-27 Red Hat, Inc. Managing subscriptions for cloud-based virtual machines
US8868721B2 (en) 2008-05-29 2014-10-21 Red Hat, Inc. Software appliance management using broadcast data
US10657466B2 (en) 2008-05-29 2020-05-19 Red Hat, Inc. Building custom appliances in a cloud-based network
US10372490B2 (en) * 2008-05-30 2019-08-06 Red Hat, Inc. Migration of a virtual machine from a first cloud computing environment to a second cloud computing environment in response to a resource or services in the second cloud computing environment becoming available
US9842004B2 (en) 2008-08-22 2017-12-12 Red Hat, Inc. Adjusting resource usage for cloud-based networks
US9910708B2 (en) * 2008-08-28 2018-03-06 Red Hat, Inc. Promotion of calculations to cloud-based computation resources
JP5093509B2 (ja) * 2008-10-28 2012-12-12 日本電気株式会社 Cpuエミュレーションシステム、cpuエミュレーション方法及びcpuエミュレーションプログラム
US9870541B2 (en) * 2008-11-26 2018-01-16 Red Hat, Inc. Service level backup using re-cloud network
US8782233B2 (en) * 2008-11-26 2014-07-15 Red Hat, Inc. Embedding a cloud-based resource request in a specification language wrapper
US9037692B2 (en) 2008-11-26 2015-05-19 Red Hat, Inc. Multiple cloud marketplace aggregation
US8984505B2 (en) * 2008-11-26 2015-03-17 Red Hat, Inc. Providing access control to user-controlled resources in a cloud computing environment
US9210173B2 (en) * 2008-11-26 2015-12-08 Red Hat, Inc. Securing appliances for use in a cloud computing environment
US10025627B2 (en) * 2008-11-26 2018-07-17 Red Hat, Inc. On-demand cloud computing environments
US9485117B2 (en) 2009-02-23 2016-11-01 Red Hat, Inc. Providing user-controlled resources for cloud computing environments
US9930138B2 (en) 2009-02-23 2018-03-27 Red Hat, Inc. Communicating with third party resources in cloud computing environment
US8977750B2 (en) * 2009-02-24 2015-03-10 Red Hat, Inc. Extending security platforms to cloud-based networks
US9311162B2 (en) * 2009-05-27 2016-04-12 Red Hat, Inc. Flexible cloud management
US9450783B2 (en) * 2009-05-28 2016-09-20 Red Hat, Inc. Abstracting cloud management
US9104407B2 (en) * 2009-05-28 2015-08-11 Red Hat, Inc. Flexible cloud management with power management support
US20100306767A1 (en) * 2009-05-29 2010-12-02 Dehaan Michael Paul Methods and systems for automated scaling of cloud computing systems
US9201485B2 (en) * 2009-05-29 2015-12-01 Red Hat, Inc. Power management in managed network having hardware based and virtual resources
US9703609B2 (en) 2009-05-29 2017-07-11 Red Hat, Inc. Matching resources associated with a virtual machine to offered resources
CN102473170B (zh) * 2009-07-24 2016-01-27 惠普开发有限公司 基于虚拟机的应用服务供应
US8832459B2 (en) 2009-08-28 2014-09-09 Red Hat, Inc. Securely terminating processes in a cloud computing environment
US8316125B2 (en) * 2009-08-31 2012-11-20 Red Hat, Inc. Methods and systems for automated migration of cloud processes to external clouds
US8769083B2 (en) 2009-08-31 2014-07-01 Red Hat, Inc. Metering software infrastructure in a cloud computing environment
US8271653B2 (en) * 2009-08-31 2012-09-18 Red Hat, Inc. Methods and systems for cloud management using multiple cloud management schemes to allow communication between independently controlled clouds
US8862720B2 (en) 2009-08-31 2014-10-14 Red Hat, Inc. Flexible cloud management including external clouds
US8504443B2 (en) * 2009-08-31 2013-08-06 Red Hat, Inc. Methods and systems for pricing software infrastructure for a cloud computing environment
US8375223B2 (en) 2009-10-30 2013-02-12 Red Hat, Inc. Systems and methods for secure distributed storage
US10268522B2 (en) * 2009-11-30 2019-04-23 Red Hat, Inc. Service aggregation using graduated service levels in a cloud network
US10402544B2 (en) * 2009-11-30 2019-09-03 Red Hat, Inc. Generating a software license knowledge base for verifying software license compliance in cloud computing environments
US9389980B2 (en) * 2009-11-30 2016-07-12 Red Hat, Inc. Detecting events in cloud computing environments and performing actions upon occurrence of the events
US9529689B2 (en) * 2009-11-30 2016-12-27 Red Hat, Inc. Monitoring cloud computing environments
US9971880B2 (en) 2009-11-30 2018-05-15 Red Hat, Inc. Verifying software license compliance in cloud computing environments
US20110214124A1 (en) * 2010-02-26 2011-09-01 James Michael Ferris Systems and methods for generating cross-cloud computing appliances
US8606667B2 (en) * 2010-02-26 2013-12-10 Red Hat, Inc. Systems and methods for managing a software subscription in a cloud network
US9053472B2 (en) * 2010-02-26 2015-06-09 Red Hat, Inc. Offering additional license terms during conversion of standard software licenses for use in cloud computing environments
US8402139B2 (en) * 2010-02-26 2013-03-19 Red Hat, Inc. Methods and systems for matching resource requests with cloud computing environments
US20110213687A1 (en) * 2010-02-26 2011-09-01 James Michael Ferris Systems and methods for or a usage manager for cross-cloud appliances
US8255529B2 (en) * 2010-02-26 2012-08-28 Red Hat, Inc. Methods and systems for providing deployment architectures in cloud computing environments
US10783504B2 (en) * 2010-02-26 2020-09-22 Red Hat, Inc. Converting standard software licenses for use in cloud computing environments
US11922196B2 (en) 2010-02-26 2024-03-05 Red Hat, Inc. Cloud-based utilization of software entitlements
US9354939B2 (en) 2010-05-28 2016-05-31 Red Hat, Inc. Generating customized build options for cloud deployment matching usage profile against cloud infrastructure options
US9202225B2 (en) 2010-05-28 2015-12-01 Red Hat, Inc. Aggregate monitoring of utilization data for vendor products in cloud networks
US8364819B2 (en) 2010-05-28 2013-01-29 Red Hat, Inc. Systems and methods for cross-vendor mapping service in cloud networks
US8909783B2 (en) 2010-05-28 2014-12-09 Red Hat, Inc. Managing multi-level service level agreements in cloud-based network
US8954564B2 (en) 2010-05-28 2015-02-10 Red Hat, Inc. Cross-cloud vendor mapping service in cloud marketplace
US8504689B2 (en) 2010-05-28 2013-08-06 Red Hat, Inc. Methods and systems for cloud deployment analysis featuring relative cloud resource importance
US8606897B2 (en) 2010-05-28 2013-12-10 Red Hat, Inc. Systems and methods for exporting usage history data as input to a management platform of a target cloud-based network
US9436459B2 (en) 2010-05-28 2016-09-06 Red Hat, Inc. Generating cross-mapping of vendor software in a cloud computing environment
JP5388134B2 (ja) * 2010-08-06 2014-01-15 株式会社日立製作所 計算機システム、及び、移動データ決定方法
US9165136B1 (en) * 2010-10-27 2015-10-20 Amazon Technologies, Inc. Supervising execution of untrusted code
US8612615B2 (en) 2010-11-23 2013-12-17 Red Hat, Inc. Systems and methods for identifying usage histories for producing optimized cloud utilization
US9736252B2 (en) 2010-11-23 2017-08-15 Red Hat, Inc. Migrating subscribed services in a cloud deployment
US8909784B2 (en) 2010-11-23 2014-12-09 Red Hat, Inc. Migrating subscribed services from a set of clouds to a second set of clouds
US8904005B2 (en) 2010-11-23 2014-12-02 Red Hat, Inc. Indentifying service dependencies in a cloud deployment
US8612577B2 (en) 2010-11-23 2013-12-17 Red Hat, Inc. Systems and methods for migrating software modules into one or more clouds
US8713147B2 (en) 2010-11-24 2014-04-29 Red Hat, Inc. Matching a usage history to a new cloud
US10192246B2 (en) 2010-11-24 2019-01-29 Red Hat, Inc. Generating multi-cloud incremental billing capture and administration
US8825791B2 (en) 2010-11-24 2014-09-02 Red Hat, Inc. Managing subscribed resource in cloud network using variable or instantaneous consumption tracking periods
US9442771B2 (en) 2010-11-24 2016-09-13 Red Hat, Inc. Generating configurable subscription parameters
US8949426B2 (en) 2010-11-24 2015-02-03 Red Hat, Inc. Aggregation of marginal subscription offsets in set of multiple host clouds
US8924539B2 (en) 2010-11-24 2014-12-30 Red Hat, Inc. Combinatorial optimization of multiple resources across a set of cloud-based networks
US9563479B2 (en) 2010-11-30 2017-02-07 Red Hat, Inc. Brokering optimized resource supply costs in host cloud-based network using predictive workloads
US9606831B2 (en) 2010-11-30 2017-03-28 Red Hat, Inc. Migrating virtual machine operations
US9280439B2 (en) * 2011-02-11 2016-03-08 Sap Se Usage analysis of productive environment to establish new data source for process optimization and project planning
US8832219B2 (en) 2011-03-01 2014-09-09 Red Hat, Inc. Generating optimized resource consumption periods for multiple users on combined basis
US8959221B2 (en) 2011-03-01 2015-02-17 Red Hat, Inc. Metering cloud resource consumption using multiple hierarchical subscription periods
US10102018B2 (en) 2011-05-27 2018-10-16 Red Hat, Inc. Introspective application reporting to facilitate virtual machine movement between cloud hosts
US8631099B2 (en) 2011-05-27 2014-01-14 Red Hat, Inc. Systems and methods for cloud deployment engine for selective workload migration or federation based on workload conditions
US10360122B2 (en) 2011-05-31 2019-07-23 Red Hat, Inc. Tracking cloud installation information using cloud-aware kernel of operating system
US8984104B2 (en) 2011-05-31 2015-03-17 Red Hat, Inc. Self-moving operating system installation in cloud-based network
US9037723B2 (en) 2011-05-31 2015-05-19 Red Hat, Inc. Triggering workload movement based on policy stack having multiple selectable inputs
US8782192B2 (en) 2011-05-31 2014-07-15 Red Hat, Inc. Detecting resource consumption events over sliding intervals in cloud-based network
JP5866996B2 (ja) 2011-11-16 2016-02-24 富士通株式会社 アプリケーションサーバ
US20130132061A1 (en) * 2011-11-18 2013-05-23 Michael J. Rieschl Just-in-time static translation system for emulated computing environments
KR101425315B1 (ko) 2013-01-28 2014-08-04 숭실대학교산학협력단 자바 애플리케이션의 불법 복제를 방지하기 위한 자바 가상 머신이 탑재된 단말장치 및 서버와, 상기 단말장치에서의 자바 애플리케이션의 인증 방법
JP6379654B2 (ja) * 2014-05-15 2018-08-29 富士通株式会社 処理実行プログラム、処理実行方法、及び情報処理装置
US9348625B2 (en) * 2014-05-23 2016-05-24 Google Inc. Application access to native and bundled libraries
JP6693308B2 (ja) * 2016-07-05 2020-05-13 富士通株式会社 負荷推定プログラム、負荷推定方法及び負荷推定装置

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04273533A (ja) * 1991-02-28 1992-09-29 Hokkaido Nippon Denki Software Kk 翻訳プログラムの手続きインライン展開方式
JPH05165647A (ja) 1991-12-18 1993-07-02 Nec Eng Ltd プログラムロード方式
JP3550748B2 (ja) * 1994-09-20 2004-08-04 富士通株式会社 コンパイラ装置
US6535903B2 (en) * 1996-01-29 2003-03-18 Compaq Information Technologies Group, L.P. Method and apparatus for maintaining translated routine stack in a binary translation environment
US5995754A (en) * 1997-10-06 1999-11-30 Sun Microsystems, Inc. Method and apparatus for dynamically optimizing byte-coded programs
US6865734B2 (en) 1997-10-06 2005-03-08 Sun Microsystems, Inc. Method and apparatus for performing byte-code optimization during pauses
US5970249A (en) * 1997-10-06 1999-10-19 Sun Microsystems, Inc. Method and apparatus for performing byte-code optimization during pauses
US6118940A (en) * 1997-11-25 2000-09-12 International Business Machines Corp. Method and apparatus for benchmarking byte code sequences
JP2000330792A (ja) * 1999-05-18 2000-11-30 Matsushita Electric Ind Co Ltd バイトコードプログラム実行制御システム
JP2002024048A (ja) * 2000-07-10 2002-01-25 Oki Electric Ind Co Ltd 高可用性システム
JP2002333998A (ja) * 2001-05-09 2002-11-22 Fujitsu Ltd 仮想マシン内部情報取得システム
US6996814B2 (en) * 2001-11-14 2006-02-07 Sun Microsystems, Inc. Method and apparatus for dynamically compiling byte codes into native code
JP4170988B2 (ja) 2003-05-09 2008-10-22 富士通株式会社 実行環境の危険予測/回避方法,システム,プログラムおよびその記録媒体
JP2005346407A (ja) * 2004-06-03 2005-12-15 Hitachi Ltd 動的コンパイルにおけるインライン展開実施方法
US7877485B2 (en) * 2005-12-02 2011-01-25 International Business Machines Corporation Maintaining session states within virtual machine environments

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9971614B2 (en) 2015-08-24 2018-05-15 Canon Kabushiki Kaisha Information processing apparatus and method of controlling the same
JP7367079B2 (ja) 2019-08-16 2023-10-23 グーグル エルエルシー マルチチップシステムにおける同期

Also Published As

Publication number Publication date
US20070226715A1 (en) 2007-09-27
US8332845B2 (en) 2012-12-11
JP2007213490A (ja) 2007-08-23

Similar Documents

Publication Publication Date Title
JP5167589B2 (ja) アプリケーションサーバ装置および仮想マシンプログラム
JP4748819B2 (ja) クライアントプログラム、端末、方法、サーバシステムおよびサーバプログラム
EP1451682B1 (en) Platform-independent selective ahead-of-time compilation
US6295643B1 (en) Method and apparatus for improving java virtual machine performance using persistent execution information
JP5042693B2 (ja) マークアップ言語ファイルの格納及び送信の最適化
US20060265469A1 (en) XML based scripting framework, and methods of providing automated interactions with remote systems
JP6493130B2 (ja) 情報処理装置、方法、及びプログラム
EP2945057B1 (en) Process execution method and information processing apparatus
US8200938B2 (en) Computer system and method providing a memory buffer for use with native and platform-independent software code
WO2020000747A1 (zh) 一种反爬虫方法、终端及计算机可读存储介质
US8904346B1 (en) Method and system for automated load testing of web applications
US8191041B2 (en) Javascript pre-processing framework
JP5039946B2 (ja) クライアント装置およびサーバ装置の間の通信を中継する技術
JP2005228183A (ja) プログラム実行方法、および、プログラム実行のための計算機システム
JP2003216434A (ja) 小型情報機器において、ユーザプロファイルデータの活用により、ダウンロードプログラムの最適化を図る方法およびシステム。
JP5209058B2 (ja) ソフトウェア・コンポーネントを作成するための方法
JP2007018091A (ja) 情報処理装置、情報処理システム、アプリケーション開発支援方法及びプログラム
JP2012128581A (ja) 通信コード生成装置および関数利用コンピュータおよび関数公開コンピュータおよびコンピュータシステムおよび通信コード生成方法およびプログラム
US7908375B2 (en) Transparently externalizing plug-in computation to cluster
JP2009064125A (ja) サーバ装置、そのプログラム
JP2004192038A (ja) 情報処理装置、情報処理システム、情報処理プログラム、および該プログラムを記録した記録媒体
CN112650502A (zh) 批处理任务处理方法、装置、计算机设备和存储介质
JP2000010796A (ja) 情報処理装置上のアプリケ―ションの利用デ―タ取得方法、その情報処理装置及び記録媒体
von Laszewski et al. Grid-based asynchronous migration of execution context in Java virtual machines
JP2006113935A (ja) ダイナミックリンクライブラリ呼び出しコード生成方法、プログラム、および、装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080526

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100129

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110111

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110314

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110628

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110826

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20120321

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120621

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

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20120628

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120904

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121105

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20121127

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121210

LAPS Cancellation because of no payment of annual fees