(57)【要約】【課題】クライアントにおいてアプリケーションプログラムの処理結果を迅速に得ることが可能であり、かつ、クライアントの制御部や記憶部に過度な負荷が掛かるのを回避することが可能な情報処理システムを提供する。【解決手段】この情報処理システム１００は、アプリケーション６０の中間コードをネイティブコードに変換するネイティブコードコンパイラ５５と、中間コードとネイティブコードコンパイラ５５により変換されたネイティブコードとから構成されるアプリケーション６０を格納するＨＤＤ５１とを含むサーバ５と、サーバ５と通信可能なように構成されているとともに、サーバ５から受信したアプリケーション６０の中間コードを解釈して実行するインタプリタ１５ａと、アプリケーション６０のネイティブコードを実行するＣＰＵ１０とを含むクライアント１とを備える。【選択図】図２
2011034404.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションプログラムの変換前コードを変換後コードに変換するコンパイラと、前記変換前コードと前記コンパイラにより変換された前記変換後コードとから構成される前記アプリケーションプログラムを格納する記憶部とを含むサーバと、
前記サーバと通信可能なように構成されているとともに、前記サーバから受信した前記アプリケーションプログラムの変換前コードを解釈して実行するインタプリタと、前記アプリケーションプログラムの変換後コードを実行する制御部とを含むクライアントとを備える、情報処理システム。
【請求項２】
前記クライアントは、前記アプリケーションプログラムの前記変換前コードおよび前記変換後コードの実行頻度を実行頻度情報として検出する実行頻度検出手段をさらに含み、
前記クライアントは、前記実行頻度情報を前記サーバに送信するように構成されており、
前記サーバのコンパイラは、前記クライアントから送信された前記実行頻度情報に基づいて、前記アプリケーションプログラムの実行頻度の大きい前記変換前コードを前記変換後コードに変換するように構成されている、請求項１に記載の情報処理システム。
【請求項３】
前記サーバのコンパイラは、複数の前記クライアントからそれぞれ送信された複数の前記実行頻度情報に基づいて、前記アプリケーションプログラムの実行頻度の大きい前記変換前コードを前記変換後コードに変換するように構成されている、請求項２に記載の情報処理システム。
【請求項４】
前記クライアントは、前記クライアントの制御部の種類を特定するプラットフォーム情報を前記サーバに送信するように構成されており、
前記サーバのコンパイラは、前記クライアントから送信された前記クライアントのプラットフォーム情報に基づいて、前記アプリケーションプログラムの変換前コードを前記変換後コードに変換するように構成されている、請求項１〜３のいずれか１項に記載の情報処理システム。
【請求項５】
前記クライアントは、前記クライアントの識別情報を前記サーバに送信するように構成されており、
前記サーバは、前記クライアントから送信された前記クライアントの識別情報に基づいて、前記クライアントに対応する前記アプリケーションプログラムを前記クライアントに送信するように構成されている、請求項１〜４のいずれか１項に記載の情報処理システム。
【請求項６】
前記サーバの記憶部には、制御部の複数の種類に対応するように、複数のアプリケーションプログラムが格納されており、
前記クライアントは、前記クライアントの制御部の種類を特定するプラットフォーム情報と前記クライアントの識別情報とを前記サーバに送信するように構成されており、
前記サーバは、前記クライアントから送信された前記クライアントのプラットフォーム情報と前記クライアントの識別情報とに基づいて、前記複数のアプリケーションプログラムのうち、前記クライアントの制御部の種類に対応する前記アプリケーションプログラムを前記クライアントに送信するように構成されている、請求項５に記載の情報処理システム。
【請求項７】
前記サーバのコンパイラは、前記クライアントから送信された前記実行頻度情報に基づいて、前回生成されたアプリケーションプログラムの実行頻度の大きい前記変換前コードを前記変換後コードに変換して新たなアプリケーションプログラムを生成するように構成されている、請求項２または３に記載の情報処理システム。
【請求項８】
前記サーバの記憶部は、変換前コードから構成される初期アプリケーションプログラムをさらに格納するように構成されており、
前記サーバのコンパイラは、前記クライアントから送信された前記実行頻度情報に基づいて、前回生成されたアプリケーションプログラムではなく前記初期アプリケーションプログラムの実行頻度の大きい前記変換前コードを前記変換後コードに変換して新たなアプリケーションプログラムを生成するように構成されている、請求項２または３に記載の情報処理システム。
【請求項９】
前記クライアントは、仮想マシン環境をさらに含み、
前記アプリケーションプログラムの変換前コードは、前記クライアントの仮想マシン環境において前記インタプリタによって解釈されて実行される中間コードであり、前記アプリケーションプログラムの変換後コードは、前記クライアントの制御部によって実行されるネイティブコードである、請求項１〜８のいずれか１項に記載の情報処理システム。
【請求項１０】
前記クライアントは、携帯端末を含む、請求項１〜９のいずれか１項に記載の情報処理システム。
【請求項１１】
サーバにおいてアプリケーションプログラムの変換前コードを変換後コードに変換するステップと、
クライアントにおいて前記サーバから送信された前記アプリケーションプログラムの変換前コードを解釈して実行するとともに、前記サーバから送信された前記アプリケーションプログラムの変換後コードを実行するステップとを備える、情報処理方法。
【請求項１２】
前記クライアントにおいて前記アプリケーションプログラムの前記変換前コードおよび前記変換後コードの実行頻度を実行頻度情報として検出するステップと、前記クライアントにおいて前記実行頻度情報を前記サーバに送信するステップとをさらに備え、
前記サーバにおいて前記アプリケーションプログラムの前記変換前コードを前記変換後コードに変換するステップは、前記クライアントから送信された前記実行頻度情報に基づいて、前記サーバにおいて前記アプリケーションプログラムの実行頻度の大きい前記変換前コードを前記変換後コードに変換するステップを含む、請求項１１に記載の情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、情報処理システムおよび情報処理方法に関し、特に、アプリケーションプログラムの変換前コードを変換後コードに変換するコンパイラを含む情報処理システムおよび情報処理方法に関する。
【背景技術】
【０００２】
従来、アプリケーションプログラムの変換前コードを変換後コードに変換するコンパイラを含む情報処理システムおよび情報処理方法が知られている（たとえば、特許文献１〜４参照）。
【０００３】
上記特許文献１には、ブラウザが稼働する端末装置（クライアント）と通信可能に構成されるとともに、コンピュータ内の仮想マシン上でＪａｖａ（登録商標）アプリケーションを実行することが可能なアプリケーションサーバを有するアプリケーションサーバシステムが開示されている。このアプリケーションサーバは、各種演算を行うＣＰＵと、Ｊａｖａアプリケーションおよび仮想マシンプログラムが記憶されたハードディスク装置とを備えている。これにより、アプリケーションサーバは、端末装置からの要求に応じて仮想マシン上でＪａｖａアプリケーションを起動させて処理を行い、処理の結果を端末装置に送信するように構成されている。また、アプリケーションサーバの仮想マシンは、中間コードを解釈して実行するためのインタプリタと、仮想マシンの起動時に中間コードのうちの実行頻度の高いメソッド（手続き）を中間コードからネイティブコードに変換するコンパイラとを有する。これにより、仮想マシン上でＪａｖａアプリケーションを稼働させる際に、実行頻度の高いメソッドをインタプリタにおいて解釈させる必要がないので、仮想マシン上でＪａｖａアプリケーションの実行速度を高めることが可能なように構成されている。
【０００４】
また、上記特許文献２には、アプリケーションが格納されるハードディスクなどの記憶部と、仮想マシン環境下に設けられ、中間コードをネイティブコードに変換するコンパイラと、仮想マシン環境下に設けられ、中間コードを解釈して実行するためのインタプリタと、ネイティブコードを直接実行するＣＰＵとを備える情報処理機器が開示されている。この情報処理機器は、仮想マシン環境下で、中間コードに含まれるメソッド（手続き）のうちの実行頻度の高いメソッドを中間コードからネイティブコードに変換するように構成されている。
【０００５】
また、上記特許文献３には、プロセッサと主記憶部（メモリ）とディスク部（ハードディスク）とがバスを介してそれぞれ接続された計算機システムが開示されている。また、上記特許文献３に記載の計算機システムには、中間コードを解釈して実行するＪａｖａ（登録商標）インタプリタ部と中間コードの一部をコンパイル（変換）してネイティブコードを生成して実行するＪａｖａＪＩＴ（Ｊｕｓｔ  Ｉｎ  Ｔｉｍｅ）コンパイラ部とが設けられている。この計算機システムのＪａｖａＪＩＴコンパイラ部は、Ｊａｖａ仮想マシン上において、中間コードのメソッド（手続き）のうちの呼出し回数の多いメソッドまたは呼出し回数の多くなると予測されるメソッドを中間コードからネイティブコードに変換するように構成されている。なお、上記特許文献３には明記されていないが、計算機システムでは、プロセッサと主記憶部とディスク部とがバスを介してそれぞれ接続されているため、この計算機システムは、物理的に独立した１つのコンピュータハードウェアからなると考えられる。
【０００６】
また、上記特許文献４には、Ｊａｖａ（登録商標）中間コードを解釈して実行するＪａｖａ中間コードインタプリタと、ある閾値以上の実行回数になった中間コードのメソッド（手続き）の内部の分岐ルートのうち、最も用いられた分岐ルートを優先パスと判断する優先パス検出部と、優先パスに関する命令が少なくなるようにメソッド内部の命令順序を入れ替える命令順序並べ替え部とを備える中間コード最適化装置が開示されている。なお、上記特許文献４では、中間コードからネイティブコードに変換するコンパイラについて記載されていないので、Ｊａｖａ中間コードインタプリタは、中間コードのすべてを解釈して実行する場合も含まれると考えられる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００７−２１３４９０号公報
【特許文献２】特開２００７−２３３４７２号公報
【特許文献３】特開２００５−３４６４０７号公報
【特許文献４】特開２００４−７８８２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上記特許文献１に記載のアプリケーションサーバシステムでは、端末装置（クライアント）においてＪａｖａアプリケーションの処理の結果を得るためには、端末装置は、アプリケーションサーバとの間で通信を行うとともに、アプリケーションサーバ側の仮想マシン上で実行されたＪａｖａアプリケーションの処理結果をその都度ダウンロードする必要がある。このため、端末装置においてＪａｖａアプリケーションの処理結果が迅速に得られにくいという問題点があると考えられる。
【０００９】
また、上記特許文献２に記載の情報処理機器では、中間コードをネイティブコードに変換するコンパイラを情報処理機器本体に設ける必要がある。このため、コンパイラにおいて中間コードをネイティブコードに変換する際に情報処理機器のＣＰＵや記憶部に過度な負荷が掛かる場合があるという問題点がある。特に、情報処理機器が小型の携帯端末である場合には、ＣＰＵや記憶部に負荷が掛かりやすいという問題点があると考えられる。
【００１０】
また、上記特許文献３に記載の計算機システムでは、中間コードの一部をコンパイルしてネイティブコードを生成するＪａｖａＪＩＴコンパイラ部を独立した１つのコンピュータハードウェアからなる計算機システム本体に設ける必要があると考えられる。このため、ＪａｖａＪＩＴコンパイラ部において中間コードをネイティブコードに変換する際に計算機システムのプロセッサや記憶部に過度な負荷が掛かる場合があるという問題点がある。特に、計算機システムが小型の携帯端末である場合には、プロセッサや記憶部に負荷が掛かりやすいという問題点があると考えられる。
【００１１】
また、上記特許文献４に記載の中間コード最適化装置では、Ｊａｖａ中間コードを実行する際に、中間コードのすべてをＪａｖａ中間コードインタプリタにおいて解釈して実行する必要があると考えられる。このため、中間コード最適化装置においてＪａｖａ中間コードが実行される際により多くの時間を要する分、処理結果が迅速に得られにくいという問題点がある。
【００１２】
この発明は、上記のような課題を解決するためになされたものであり、この発明の１つの目的は、クライアントにおいてアプリケーションプログラムの処理結果を迅速に得ることが可能であり、かつ、クライアントの制御部や記憶部に過度な負荷が掛かるのを回避することが可能な情報処理システムを提供することである。
【課題を解決するための手段および発明の効果】
【００１３】
この発明の第１の局面による情報処理システムは、アプリケーションプログラムの変換前コードを変換後コードに変換するコンパイラと、変換前コードとコンパイラにより変換された変換後コードとから構成されるアプリケーションプログラムを格納する記憶部とを含むサーバと、サーバと通信可能なように構成されているとともに、サーバから受信したアプリケーションプログラムの変換前コードを解釈して実行するインタプリタと、アプリケーションプログラムの変換後コードを実行する制御部とを含むクライアントとを備える。
【００１４】
この発明の第１の局面による情報処理システムでは、上記のように、クライアントに、アプリケーションプログラムの変換前コードを解釈して実行するインタプリタと、アプリケーションプログラムの変換後コードを実行する制御部とを設けることによって、クライアント側でアプリケーションプログラムを実行することができる。これにより、クライアントは、アプリケーションプログラムを実行するためにサーバとの間で通信を頻繁に行う必要がないので、クライアントにおいてアプリケーションプログラムの処理結果を迅速に得ることができる。また、変換後コードは実行される際に解釈される必要がないため、変換前コードに比べて実行される際の実行速度が大きい。これにより、アプリケーションプログラムの一部を変換後コードにすることによって、クライアントにおいてアプリケーションプログラムの実行速度を高めることができる。
【００１５】
また、第１の局面による情報処理システムでは、サーバに、アプリケーションプログラムの変換前コードを変換後コードに変換するコンパイラを設けることによって、クライアント側にコンパイラを設ける必要がないので、コンパイラにおける変換時に、クライアントの記憶部に過度な負荷が掛かるのを回避することができる。また、クライアント側で変換前コードを変換後コードに変換する必要がないので、コンパイラにおける変換時にクライアントの制御部に過度な負荷が掛かるのを回避することができる。これらにより、コンパイラにおける変換時にクライアントの制御部や記憶部に過度な負荷が掛かるのを回避することができる。
【００１６】
上記第１の局面による情報処理システムにおいて、好ましくは、クライアントは、アプリケーションプログラムの変換前コードおよび変換後コードの実行頻度を実行頻度情報として検出する実行頻度検出手段をさらに含み、クライアントは、実行頻度情報をサーバに送信するように構成されており、サーバのコンパイラは、クライアントから送信された実行頻度情報に基づいて、アプリケーションプログラムの実行頻度の大きい変換前コードを変換後コードに変換するように構成されている。このように構成すれば、変換後コードは実行される際に解釈される必要がないので、変換前コードに比べて実行される際の負荷が小さくなる分、クライアントにおけるアプリケーションプログラムの実行速度をより高めることができる。ここで、変換後コードは、変換前コードに比べてクライアントが必要とする記憶容量を増やす一面を有するが、サーバのコンパイラにおいて実行頻度の小さい変換前コードを変換後コードに変換せずに、実行頻度の大きい変換前コードのみを選択的に変換後コードに変換することによって、この記憶容量の増大を極力抑えることができる。
【００１７】
この場合、好ましくは、サーバのコンパイラは、複数のクライアントからそれぞれ送信された複数の実行頻度情報に基づいて、アプリケーションプログラムの実行頻度の大きい変換前コードを変換後コードに変換するように構成されている。このように構成すれば、複数のクライアントの実行頻度情報に基づくことによって、通常実行される回数の小さい処理が特定のクライアントにより過度に実行されることに起因して実行頻度が大きくなってしまった場合などにおいても、複数の実行頻度情報に基づくことによって実行頻度を平準化することができる。これにより、より正確に、サーバにおいて実行頻度の大きい変換前コードを変換後コードに変換することができる。
【００１８】
上記第１の局面による情報処理システムにおいて、好ましくは、クライアントは、クライアントの制御部の種類を特定するプラットフォーム情報をサーバに送信するように構成されており、サーバのコンパイラは、クライアントから送信されたクライアントのプラットフォーム情報に基づいて、アプリケーションプログラムの変換前コードを変換後コードに変換するように構成されている。このように構成すれば、アプリケーションプログラムの変換後コードをクライアントの制御部に合わせて最適化することができる。さらに、複数のクライアントが存在する場合に、クライアントごとにアプリケーションプログラムの変換前コードを変換後コードに変換する必要がない。これにより、サーバのコンパイラにおいて変換されるアプリケーションプログラムの数を少なくすることができるとともに、サーバの記憶部に記憶されるアプリケーションプログラムの数を少なくすることができる。この結果、サーバにおける負荷を軽減することができる。
【００１９】
上記第１の局面による情報処理システムにおいて、好ましくは、クライアントは、クライアントの識別情報をサーバに送信するように構成されており、サーバは、クライアントから送信されたクライアントの識別情報に基づいて、クライアントに対応するアプリケーションプログラムをクライアントに送信するように構成されている。このように構成すれば、サーバは、クライアントにおける実行に適した更新後のアプリケーションプログラムをクライアントに送信することができるので、クライアントの制御部においてアプリケーションプログラムが実行される際の負荷を軽減することができる。
【００２０】
この場合、好ましくは、サーバの記憶部には、制御部の複数の種類に対応するように、複数のアプリケーションプログラムが格納されており、クライアントは、クライアントの制御部の種類を特定するプラットフォーム情報とクライアントの識別情報とをサーバに送信するように構成されており、サーバは、クライアントから送信されたクライアントのプラットフォーム情報とクライアントの識別情報とに基づいて、複数のアプリケーションプログラムのうち、クライアントの制御部の種類に対応するアプリケーションプログラムをクライアントに送信するように構成されている。このように構成すれば、サーバは、クライアントの制御部における実行に適したアプリケーションプログラムをクライアントに送信することができるので、クライアントの制御部においてアプリケーションプログラムが実行される際の負荷を軽減することができる。また、サーバの記憶部にクライアントごとのアプリケーションプログラムを格納する必要がなく、制御部の種類毎にのみ格納すればよいので、サーバの記憶部に記憶されるアプリケーションプログラムの数を少なくすることができる。この結果、サーバにおける負荷を軽減することができる。
【００２１】
上記実行頻度の大きい変換前コードを変換後コードに変換する情報処理システムにおいて、好ましくは、サーバのコンパイラは、クライアントから送信された実行頻度情報に基づいて、前回生成されたアプリケーションプログラムの実行頻度の大きい変換前コードを変換後コードに変換して新たなアプリケーションプログラムを生成するように構成されている。このように構成すれば、前回生成されたアプリケーションプログラムに含まれる変換後コードに対応するブロックはすでに変換後コードに変換済みであり、再度変換後コードに変換する必要がないので、サーバのコンパイラにおいて変換する変換前コードの数を少なくすることができる。この結果、サーバにおける負荷をより軽減することができる。
【００２２】
上記実行頻度の大きい変換前コードを変換後コードに変換する情報処理システムにおいて、好ましくは、サーバの記憶部は、変換前コードから構成される初期アプリケーションプログラムをさらに格納するように構成されており、サーバのコンパイラは、クライアントから送信された実行頻度情報に基づいて、前回生成されたアプリケーションプログラムではなく初期アプリケーションプログラムの実行頻度の大きい変換前コードを変換後コードに変換して新たなアプリケーションプログラムを生成するように構成されている。このように構成すれば、前回生成されたアプリケーションプログラムに含まれる変換後コードが通常実行される回数の小さい処理が過度に実行されたことに起因して変換されたブロックである場合などにおいても、新たなアプリケーションプログラムは、前回生成されたアプリケーションプログラムではなく初期アプリケーションプログラムに基づいて生成されるので、より今回の実行頻度に即するように、サーバにおいて実行頻度の大きい変換前コードを変換後コードに変換して新たなアプリケーションプログラムを生成することができる。
【００２３】
上記第１の局面による情報処理システムにおいて、好ましくは、クライアントは、仮想マシン環境をさらに含み、アプリケーションプログラムの変換前コードは、クライアントの仮想マシン環境においてインタプリタによって解釈されて実行される中間コードであり、アプリケーションプログラムの変換後コードは、クライアントの制御部によって実行されるネイティブコードである。このように構成すれば、Ｊａｖａ（登録商標）のような仮想マシン環境が設けられたクライアントにおいて、クライアントはアプリケーションプログラムを実行するためにサーバとの間で通信を頻繁に行う必要がないので、アプリケーションプログラムの処理結果を迅速に得ることができる。さらに、クライアント側にコンパイラを設ける必要がないので、コンパイラにおける変換時に制御部や記憶部に過度な負荷が掛かるのを回避することができる。
【００２４】
上記第１の局面による情報処理システムにおいて、好ましくは、クライアントは、携帯端末を含む。このように構成すれば、クライアントが携帯端末用に最適化された小型の制御部および小容量の記憶部によって構成されている場合においても、クライアントはアプリケーションプログラムを実行するためにサーバとの間で通信を頻繁に行う必要がないので、クライアントにおいてアプリケーションプログラムの処理結果を迅速に得ることができる。さらに、クライアント側にコンパイラを設ける必要がないので、コンパイラにおける変換時にクライアントの制御部や記憶部に過度な負荷が掛かるのを回避することができる。
【００２５】
この発明の第２の局面による情報処理方法は、サーバにおいてアプリケーションプログラムの変換前コードを変換後コードに変換するステップと、クライアントにおいてサーバから送信されたアプリケーションプログラムの変換前コードを解釈して実行するとともに、サーバから送信されたアプリケーションプログラムの変換後コードを実行するステップとを備える。
【００２６】
この発明の第２の局面による情報処理方法では、上記のように、クライアントにおいてサーバから送信されたアプリケーションプログラムの変換前コードを解釈して実行するとともに、サーバから送信されたアプリケーションプログラムの変換後コードを実行することによって、アプリケーションプログラムを実行するためにサーバとの間で通信を頻繁に行う必要がないので、クライアントにおいてアプリケーションプログラムの処理結果を迅速に得ることができる。また、変換後コードは実行される際に解釈される必要がないため、変換前コードに比べて実行される際の実行速度が大きい。これにより、アプリケーションプログラムの一部を変換後コードにすることによって、クライアントにおいてアプリケーションプログラムの実行速度を高めることができる。
【００２７】
また、第２の局面による情報処理方法では、サーバにおいてアプリケーションプログラムの変換前コードを変換後コードに変換することによって、クライアント側で変換前コードを変換後コードに変換する必要がないので、変換時に、クライアントの記憶部に過度な負荷が掛かるのを回避することができるとともに、クライアントの制御部に過度な負荷が掛かるのを回避することができる。これらにより、変換前コードから変換後コードへの変換時にクライアントの制御部や記憶部に過度な負荷が掛かるのを回避することができる。
【００２８】
上記第２の局面による情報処理方法において、好ましくは、クライアントにおいてアプリケーションプログラムの変換前コードおよび変換後コードの実行頻度を実行頻度情報として検出するステップと、クライアントにおいて実行頻度情報をサーバに送信するステップとをさらに備え、サーバにおいてアプリケーションプログラムの変換前コードを変換後コードに変換するステップは、クライアントから送信された実行頻度情報に基づいて、サーバにおいてアプリケーションプログラムの実行頻度の大きい変換前コードを変換後コードに変換するステップを含む。このように構成すれば、変換後コードは実行される際に解釈される必要がないので、変換前コードに比べて実行される際の負荷が小さくなる分、クライアントにおけるアプリケーションプログラムの実行速度をより高めることができる。ここで、変換後コードは、変換前コードに比べてクライアントが必要とする記憶容量を増やす一面を有するが、サーバにおいて実行頻度の小さい変換前コードを変換後コードに変換せずに、実行頻度の大きい変換前コードのみを選択的に変換後コードに変換することによって、この記憶容量の増大を極力抑えることができる。
【図面の簡単な説明】
【００２９】
【図１】本発明の第１実施形態による情報処理システムの全体の概略を示した図である。
【図２】図１に示した第１実施形態による情報処理システムの構成を示したブロック図である。
【図３】図１に示した第１実施形態による情報処理システムのサーバにおけるアプリケーションの更新動作を示した図である。
【図４】図１に示した第１実施形態による情報処理システムの制御フローの一部を示した図である。
【図５】図４に示した情報処理システムの制御フローのクライアント側における残りのフローを示した図である。
【図６】本発明の第２実施形態による情報処理システムのサーバにおけるアプリケーションの更新動作を示した図である。
【発明を実施するための形態】
【００３０】
以下、本発明を具体化した実施形態を図面に基づいて説明する。
【００３１】
（第１実施形態）
まず、図１〜図３を参照して、本発明の第１実施形態による情報処理システム１００の構成について説明する。
【００３２】
本発明の第１実施形態による情報処理システム１００では、図１に示すように、複数のクライアント１、２および３の各々が、それぞれ、ネットワーク４を介して、サーバ５と接続されている。また、クライアント１、２および３は、それぞれ、ユーザ（図示せず）が携帯した状態で使用することが可能なＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ）、携帯電話機および携帯ゲーム機などからなる携帯端末である。また、複数のクライアント１、２および３の各々は、ネットワーク４を介して、サーバ５にアプリケーションを要求するように構成されている。そして、クライアント１、２および３は、サーバ５からアプリケーションプログラム（以下「アプリケーション」という）をダウンロードして、クライアント１、２および３の内部でアプリケーションを実行することが可能なように構成されている。なお、クライアント１および３は、それぞれ、同じ種類のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０および３０（図２参照）を有し、クライアント２は、クライアント１および３とは異なる種類のＣＰＵ２０（図２参照）を有する。この点については、後に詳細に説明する。
【００３３】
また、図２に示すように、クライアント１には、所定のハードウェア構成であるプラットフォームからなるＣＰＵ１０と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１１と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１２と、不揮発性メモリとしてのフラッシュメモリ１３と、ネットワーク４を介して通信するためのネットワークＩ／Ｆ（Ｉｎｔｅｒｆａｃｅ）部１４とが設けられている。なお、プラットフォームによってＣＰＵ１０の種類が特定される。なお、ＣＰＵ１０は、本発明の「制御部」の一例である。
【００３４】
また、クライアント１のＣＰＵ１０は、ＲＯＭ１１に記憶されたプログラムに基づき、ＲＡＭ１２を作業領域として用いて各種演算処理を行うことにより、クライアント１全体の制御を行うように構成されている。また、ＲＯＭ１１には、後述する仮想マシン１５をＲＡＭ１２において起動させるための仮想マシンプログラムが格納されている。
【００３５】
また、フラッシュメモリ１３には、仮想マシン１５上で起動されるアプリケーションプログラム６０（以下「アプリケーション６０」という）または初期アプリケーションプログラム６（以下「初期アプリケーション６」という）が格納されている。このアプリケーション６０および初期アプリケーション６は、Ｊａｖａ（登録商標）仮想マシンにおいて起動されるプログラムである。なお、アプリケーション６０は、本発明の「アプリケーションプログラム」の一例である。
【００３６】
また、アプリケーション６０は、図３に示すように、複数の中間コード（バイトコード）と複数のネイティブコードとからなるように構成されている。一方、初期アプリケーション６は、複数の中間コードのみからなるように構成されている。ここで、中間コードとは、仮想マシン内の後述するインタプリタ１５ａ（図２参照）において１行ずつ順次解釈されて実行される文字列である。また、ネイティブコードは、ＣＰＵ１０（図２参照）において直接実行される文字列であり、ＣＰＵ１０のプラットフォームに対応するように構成されている。また、ネイティブコードは実行される際に解釈される必要がないので、ネイティブコードの処理の実行速度は、中間コードの処理の実行速度に比べて大きい。なお、中間コードは、本発明の「変換前コード」の一例であり、ネイティブコードは、本発明の「変換後コード」の一例である。
【００３７】
また、アプリケーション６０および初期アプリケーション６は、それぞれ、複数のブロックにより構成されている。ここで、「ブロック」とは、関数などのメソッド、クラス、または、メソッドの中のループ部分などを単位として分けられたアプリケーションのプログラムの一部分を指す。
【００３８】
また、図２および図３に示すように、クライアント１（および３）のＣＰＵ１０（および３０）に対応するアプリケーション６０（たとえばアプリケーション６０ａ）は、ユーザによる所定の操作によって更新指示が行われた場合または前回のダウンロードから所定の時間が経過した場合に、新たなアプリケーション６０（たとえばアプリケーション６０ｂ）に更新されるように構成されている。具体的には、更新指示が行われた場合または前回のアプリケーション６０（たとえば６０ａ）のダウンロードから所定の時間が経過した場合に、クライアント１は、ネットワークＩ／Ｆ部１４およびネットワーク４を介して、サーバ５に、クライアント１を識別するための情報（識別情報）と、ＣＰＵ１０のプラットフォームに関する情報（プラットフォーム情報）と、アプリケーション要求信号とをサーバ５に送信するように構成されている。そして、サーバ５から新たなアプリケーション６０（たとえば６０ｂ）をダウンロードして、現在フラッシュメモリ１３に格納されているアプリケーション６０（たとえば６０ａ）を新たなアプリケーション６０（たとえば６０ｂ）に書き換えることによって、新たなアプリケーション６０（たとえば６０ｂ）に更新されるように構成されている。なお、クライアント１（および３）においては、更新前のアプリケーション６０が起動されている状態では、更新後の新たな内容は反映されておらず、次回、サーバ５からアプリケーション６０が読み出された際に、新たなアプリケーション６０が読み出されて、更新された内容が反映されるように構成されている。
【００３９】
また、クライアント１が初期状態（アプリケーション６０および初期アプリケーション６を有していない状態）で、クライアント１にユーザによる所定の操作によって初期アプリケーション要求指示がなされた場合には、クライアント１は、ネットワークＩ／Ｆ部１４およびネットワーク４を介して、初期アプリケーション要求信号と識別情報とをサーバ５に送信するように構成されている。そして、サーバ５から初期アプリケーション６をダウンロードして、フラッシュメモリ１３に格納するように構成されている。
【００４０】
また、クライアント１は、ＲＯＭ１１に格納されている仮想マシンプログラムに基づいて、クライアント１のＲＡＭ１２において仮想マシン１５を起動させることが可能なように構成されている。この仮想マシン１５は、いわゆるＪａｖａ（登録商標）仮想マシンである。また、仮想マシン１５は、アプリケーション６０または初期アプリケーション６が起動される前に、前もって起動されるように構成されている。なお、仮想マシン１５は、本発明の「仮想マシン環境」の一例である。
【００４１】
ここで、第１実施形態では、仮想マシン１５には、アプリケーション６０または初期アプリケーション６に含まれる中間コードを１行ずつ順次解釈して実行するインタプリタ１５ａと、アプリケーション６０に含まれる複数の中間コードと複数のネイティブコードとを判別するコード振り分けモジュール１５ｂとが設けられている。また、コード振り分けモジュール１５ｂは、上述した複数の中間コードをインタプリタ１５ａに振り分けて実行させるとともに、複数のネイティブコードをＣＰＵ１０に振り分けて実行させるように構成されている。
【００４２】
また、第１実施形態では、仮想マシン１５には、複数の中間コードおよび複数のネイティブコードのそれぞれの実行頻度（ブロックごとの実行頻度）を検出するための実行頻度収集モジュール１５ｃがさらに設けられている。この実行頻度収集モジュール１５ｃにおいて検出された実行頻度は、ブロックごとにＲＡＭ１２に実行頻度情報として記憶されるように構成されている。また、アプリケーション６０または初期アプリケーション６が終了される際には、ＲＡＭ１２に記憶されていた実行頻度情報は、フラッシュメモリ１３に格納されるように構成されている。なお、実行頻度収集モジュール１５ｃは、本発明の「実行頻度検出手段」の一例である。
【００４３】
そして、クライアント１は、一定量のブロックがインタプリタ１５ａまたはＣＰＵ１０で実行された際に、実行頻度情報をネットワーク４を介してサーバ５に送信するように構成されている。その際、クライアント１は、実行頻度情報に加えて、ＣＰＵ１０のプラットフォームに関する情報（プラットフォーム情報）とクライアント１を識別するための情報（識別情報）とをサーバ５に送信するように構成されている。
【００４４】
また、図２に示すように、クライアント２は、クライアント１と略同様の構成を有する一方、クライアント１のＣＰＵ１０とは種類の異なるプラットフォームからなるＣＰＵ２０を有する。具体的には、クライアント２には、ＣＰＵ２０と、ＲＯＭ２１と、ＲＡＭ２２と、フラッシュメモリ２３と、ネットワークＩ／Ｆ部２４とが設けられている。また、ＲＯＭ２１には、後述する仮想マシン２５をＲＡＭ２２において起動させるための仮想マシンプログラムが格納されている。なお、ＣＰＵ２０は、本発明の「制御部」の一例である。
【００４５】
また、フラッシュメモリ２３には、仮想マシン２５上で起動され、クライアント２のＣＰＵ２０に対応するアプリケーションプログラム６１（以下「アプリケーション６１」という）または初期アプリケーション６が格納されている。このアプリケーション６１は、Ｊａｖａ（登録商標）仮想マシンにおいて起動されるプログラムである。また、アプリケーション６１は、図３に示すように、複数のブロックにより構成されているとともに、複数の中間コードと複数のネイティブコードとからなるように構成されている。また、図２および図３に示すように、クライアント２のＣＰＵ２０に対応するアプリケーション６１は、ユーザによる所定の操作によって更新指示が行われた場合または前回のアプリケーション６１（たとえば６１ａ）のダウンロードから所定の時間が経過した場合に、新たなアプリケーション６１（たとえばアプリケーション６１ｂ）に更新されるように構成されている。なお、アプリケーション６１は、本発明の「アプリケーションプログラム」の一例である。
【００４６】
また、図２に示すように、クライアント２は、ＲＯＭ２１に格納されている仮想マシンプログラムに基づいて、クライアント２のＲＡＭ２２において仮想マシン２５を起動させることが可能なように構成されている。また、仮想マシン２５には、インタプリタ２５ａと、コード振り分けモジュール２５ｂと、実行頻度収集モジュール２５ｃとが設けられている。また、仮想マシン２５によって、実行頻度収集モジュール２５ｃにおいて検出された実行頻度がブロックごとにＲＡＭ２２に実行頻度情報として記憶されるように構成されている。そして、クライアント２は、一定量のブロックがインタプリタ２５ａまたはＣＰＵ２０で実行された際に、実行頻度情報をネットワーク４を介してサーバ５に送信するように構成されている。その際、クライアント２は、実行頻度情報に加えて、ＣＰＵ２０のプラットフォーム情報とクライアント２を識別するための情報（識別情報）とをサーバ５に送信するように構成されている。なお、仮想マシン２５は、本発明の「仮想マシン環境」の一例であり、実行頻度収集モジュール２５ｃは、本発明の「実行頻度検出手段」の一例である。
【００４７】
また、図２に示すように、クライアント３は、クライアント１と同様の構成を有する。具体的には、クライアント３には、クライアント１のＣＰＵ１０と同じ種類のプラットフォームからなるＣＰＵ３０と、ＲＯＭ３１と、ＲＡＭ３２と、フラッシュメモリ３３と、ネットワークＩ／Ｆ部３４とが設けられている。また、ＲＯＭ３１には、後述する仮想マシン３５をＲＡＭ３２において起動させるための仮想マシンプログラムが格納されている。また、フラッシュメモリ３３には、仮想マシン３５上で起動されるクライアント１（および３）に対応するアプリケーション６０または初期アプリケーション６が格納されている。なお、ＣＰＵ３０は、本発明の「制御部」の一例である。
【００４８】
また、クライアント３は、ＲＯＭ３１に格納されている仮想マシンプログラムに基づいて、クライアント３のＲＡＭ３２において仮想マシン３５を起動させることが可能なように構成されている。また、仮想マシン３５には、インタプリタ３５ａと、コード振り分けモジュール３５ｂと、実行頻度収集モジュール３５ｃとが設けられている。また、仮想マシン３５によって、実行頻度収集モジュール３５ｃにおいて検出された実行頻度がブロックごとにＲＡＭ３２に実行頻度情報として記憶されるように構成されている。そして、クライアント３は、一定量のブロックがインタプリタ３５ａまたはＣＰＵ３０で実行された際に、実行頻度情報をネットワーク４を介してサーバ５に送信するように構成されている。その際、クライアント３は、実行頻度情報に加えて、ＣＰＵ３０のプラットフォーム情報とクライアント３を識別するための情報（識別情報）とをサーバ５に送信するように構成されている。なお、仮想マシン３５は、本発明の「仮想マシン環境」の一例であり、実行頻度収集モジュール３５ｃは、本発明の「実行頻度検出手段」の一例である。
【００４９】
また、図２に示すように、サーバ５には、ＣＰＵ５０と、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）５１と、ＲＡＭ５２と、ネットワーク４を介して通信するためのネットワークＩ／Ｆ部５３とが設けられている。このＣＰＵ５０は、ＨＤＤ５１などに記憶されたプログラムに基づき、ＲＡＭ５２を作業領域として用いて各種演算処理を行うことにより、サーバ５全体の制御を行うように構成されている。
【００５０】
また、サーバ５のＨＤＤ５１には、Ｊａｖａ（登録商標）仮想マシンにおいて起動されることが可能なように構成されたアプリケーションが複数格納されている。具体的には、初期アプリケーション６、アプリケーション６０および６１などが格納されている。また、ＨＤＤ５１には、クライアント１、２および３の各々から送信された実行頻度情報が格納されている。なお、ＨＤＤ５１は、本発明の「記憶部」の一例である。
【００５１】
また、サーバ５は、クライアント１、２および３の各々からアプリケーション要求信号と識別情報とプラットフォーム情報とが送信された際に、クライアントに対応する最新のアプリケーション６０（クライアント１および３）または６１（クライアント２）をクライアント１、２および３に送信するように構成されている。一方、サーバ５は、クライアント１、２および３の各々から初期アプリケーション要求信号と識別情報とが送信された際に、初期アプリケーション６をクライアント１、２および３に送信するように構成されている。
【００５２】
また、サーバ５には、Ｊａｖａコンパイラ５４が設けられている。このＪａｖａコンパイラ５４によって、プログラマ（図示せず）によって記述されたソースコード（プログラミング言語）が、中間コードに変換されるように構成されている。
【００５３】
また、第１実施形態では、サーバ５には、ネイティブコードコンパイラ５５がさらに設けられている。このネイティブコードコンパイラ５５は、ＨＤＤ５１に一定量の実行頻度情報が蓄積された際に、ＨＤＤ５１に格納された実行頻度情報の実行頻度を合算した合計実行頻度に基づいて、アプリケーション６０、６１または初期アプリケーション６の複数の中間コードのうち実行頻度の大きい中間コードをネイティブコードに変換する中間コードであると決定して、ネイティブコードに変換するように構成されている。また、ネイティブコードコンパイラ５５は、合計実行頻度が所定の実行回数（閾値）と所定の実行頻度の割合（閾値）との両方を越えたブロックに対応する中間コードをネイティブコードに変換するように構成されている。なお、ネイティブコードコンパイラ５５は、本発明の「コンパイラ」の一例である。
【００５４】
また、第１実施形態では、ネイティブコードコンパイラ５５は、クライアント１、２および３の各々のＣＰＵ１０、２０および３０のプラットフォームに基づいて、変換するように決定された中間コードを、クライアントのＣＰＵのプラットフォームごとに最適化されるようにネイティブコードに変換する機能を有する。すなわち、ネイティブコードコンパイラ５５は、クライアント１および３に共通のプラットフォームに応じたアプリケーション６０を新たに生成する一方、クライアント２についてはクライアント１および３とは異なるプラットフォームに対応したアプリケーション６１を新たに生成するように構成されている。
【００５５】
また、図３に示すように、ネイティブコードコンパイラ５５は、初期アプリケーション６ではなく前回生成された直前のアプリケーション６０および６１（たとえば６０ａおよび６１ａ）に基づいて、新たなアプリケーション６０および６１（たとえば６０ｂおよび６１ｂ）を生成するように構成されている。すなわち、前回生成されたアプリケーション６０および６１（たとえば６０ａおよび６１ａ）のうち、すでにネイティブコードに変換されている部分の変換は行わずに、新たにネイティブコードに変換するように決定された中間コードのみをネイティブコードに変換するように構成されている。
【００５６】
また、サーバ５では、新たにアプリケーション６０および６１（たとえば６０ｂおよび６１ｂ）が生成された際に、前回生成されたアプリケーション６０および６１（たとえば６０ａおよび６１ａ）は新たに生成されたアプリケーション６０および６１（たとえば６０ｂおよび６１ｂ）によって置き換えられるようにＨＤＤ５１に格納されることによって、アプリケーションの更新が行われるように構成されている。一方、初期アプリケーション６は、新たに生成されたアプリケーション６０および６１（６０ａおよび６１ａ）によって置き換えられない（削除されずに保存される）ように構成されている。
【００５７】
次に、図２および図３を参照して、本発明の第１実施形態によるサーバ５におけるアプリケーションの更新動作について説明する。
【００５８】
まず、図３に示すように、初期状態（アプリケーションの更新が一度も行われていない状態）のサーバ５において、ＨＤＤ５１（図２参照）に格納されている初期アプリケーション６は、中間コード６ａ、６ｂおよび６ｃを含んでいる。その後、サーバ５にクライアント１、２および３（図２参照）の各々から実行頻度情報が送信されることによってＨＤＤ５１に格納された実行頻度情報が一定量になる。その際、サーバ５のネイティブコードコンパイラ５５（図２参照）によって、合計実行頻度に基づいて、アプリケーションの複数の中間コードのうち実行頻度の大きい中間コード６ａがネイティブコードに変換する中間コードであると決定される。そして、ネイティブコードコンパイラ５５によって、クライアント１のＣＰＵ１０（図２参照）およびクライアント３のＣＰＵ３０（図２参照）に共通のプラットフォームに対応するように、初期アプリケーション６の中間コード６ａが最適化されたネイティブコード６ｄに変換される。これにより、アプリケーション６０の１回目更新版として、アプリケーション６０ａが生成されて、ＨＤＤ５１に格納される。一方、ネイティブコードコンパイラ５５によって、クライアント１のＣＰＵ１０およびクライアント３のＣＰＵ３０とは異なる種類のクライアント２のＣＰＵ２０（図２参照）のプラットフォームに対応するように、初期アプリケーション６の中間コード６ａが最適化されたネイティブコード６ｅに変換される。これにより、クライアント２に対応するアプリケーション６１の１回目更新版として、アプリケーション６１ａが生成されて、ＨＤＤ５１に格納される。なお、アプリケーション６０ａおよび６１ａが生成されても、初期アプリケーション６は、置き換えられずにＨＤＤ５１に格納されている。
【００５９】
次に、１回目更新版のアプリケーション６０ａおよび６１ａが生成されているサーバ５において、ＨＤＤ５１に格納されている実行頻度情報が一定量になった際に、ネイティブコードコンパイラ５５によって、合計実行頻度に基づいて、アプリケーションの複数の中間コードのうち実行頻度の大きい中間コード６ａおよび６ｃがネイティブコードに変換する中間コードに決定される。そして、前回生成された１回目更新版のアプリケーション６０および６１に基づいて変換される。ここで、中間コード６ａはすでにネイティブコード６ｄおよび６ｅに変換されているので、再度変換されることはない。
【００６０】
これにより、ネイティブコードコンパイラ５５によって、クライアント１のＣＰＵ１０およびクライアント３のＣＰＵ３０に共通のプラットフォームに対応するように、中間コード６ｃが最適化されたネイティブコード６ｆに変換される。これにより、アプリケーション６０の２回目更新版として、アプリケーション６０ｂが生成される。また、ネイティブコードコンパイラ５５によって、クライアント２のＣＰＵ２０のプラットフォームに対応するように、中間コード６ｃが最適化されたネイティブコード６ｇに変換される。これにより、アプリケーション６１の２回目更新版として、アプリケーション６１ｂが生成される。
【００６１】
そして、１回目更新版のアプリケーション６０ａが２回目更新版のアプリケーション６０ｂに置き換えられてＨＤＤ５１に格納されることによって、アプリケーション６０の更新が行われる。また、１回目更新版のアプリケーション６１ａが２回目更新版のアプリケーション６１ｂに置き換えられてＨＤＤ５１に格納されることによって、アプリケーション６１の更新が行われる。この際、１回目更新版のアプリケーション６０ａおよび６１ａは、それぞれ、２回目更新版のアプリケーション６０ｂおよび６１ｂに置き換えられることによって、ＨＤＤ５１から削除される。
【００６２】
また、２回目更新版のアプリケーション６０ｂおよび６１ｂが生成されているサーバ５において、ＨＤＤ５１に格納されている実行頻度情報が一定量になった際に、１回目更新版のアプリケーション６０ａおよび６１ａから２回目更新版のアプリケーション６０ｂおよび６１ｂへの更新と同様の更新動作が行われる。この一連の更新動作が、実行頻度情報が一定量になった段階でサーバ５において繰り返し行われる。
【００６３】
次に、図２〜図５を参照して、本発明の第１実施形態によるクライアントの制御動作およびサーバ５の制御動作について説明する。なお、クライアント１、２および３における制御動作はそれぞれ同様であるので、クライアント１の制御動作についてのみ説明する。
【００６４】
まず、図４に示すように、クライアント１の制御動作として、ステップＳ１において、初期状態（アプリケーション６０および初期アプリケーション６を有していない状態）のクライアント１（図２参照）のＣＰＵ１０（図２参照）によって、ユーザの所定の操作により初期アプリケーション６（図３参照）の要求指示がなされたか否かが判断される。そして、ステップＳ１において、初期アプリケーション６の要求指示がなされたと判断された場合には、ステップＳ２に進み、ＣＰＵ１０は初期アプリケーション要求信号とクライアント１を識別するための情報（識別情報）とをサーバ５に送信する。そしてステップＳ３に進む。また、ステップＳ１において、初期アプリケーション６の要求指示がないと判断された場合には、ステップＳ５に進む。
【００６５】
また、クライアント１からサーバ５（図２参照）に初期アプリケーション要求信号と識別情報とが送信されると、サーバ５の制御動作として、ステップＳ１０１において、ＣＰＵ５０（図２参照）によって、クライアント１から送信された初期アプリケーション要求信号と識別情報とを受信したか否かが判断される。そして、ステップＳ１０１において、初期アプリケーション要求信号と識別情報とを受信したと判断された場合には、ステップＳ１０２に進み、ＨＤＤ５１（図２参照）に記憶されている初期アプリケーション６をクライアント１に送信する。そして、ステップＳ１０３に進む。
【００６６】
また、サーバ５からクライアント１に初期アプリケーション６が送信されると、クライアント１の制御動作として、ステップＳ３において、ＣＰＵ１０によって、サーバ５から送信された初期アプリケーション６を受信したか否かが判断される。そして、ステップＳ３において、初期アプリケーション６を受信したと判断された場合には、ステップＳ４に進み、初期アプリケーション６はフラッシュメモリ１３に格納される。そして、ステップＳ５に進む。また、ステップＳ３において、初期アプリケーション６を受信していないと判断された場合には、初期アプリケーション６を受信したと判断されるまでステップＳ３の判断が繰り返される。
【００６７】
次に、ステップＳ５において、初期状態でないクライアント１のＣＰＵ１０によって、ユーザの所定の操作によりアプリケーション６０（図３参照）または初期アプリケーション６の起動指示がなされたか否かが判断される。そして、ステップＳ５において、アプリケーション６０または初期アプリケーション６の起動指示があったと判断された場合には、ステップＳ６に進む。また、ステップＳ５において、アプリケーション６０または初期アプリケーション６の起動指示がないと判断された場合には、アプリケーション６０または初期アプリケーション６の起動指示があると判断されるまでステップＳ５の判断が繰り返される。
【００６８】
続いて、ステップＳ６において、クライアント１によって、フラッシュメモリ１３に記憶されているアプリケーション６０または初期アプリケーション６が、ＲＡＭ１２（図２参照）において前もって起動されている仮想マシン１５（図２参照）上で読み込まれる。そして、ステップＳ７に進み、次にインタプリタ１５ａ（図２参照）またはＣＰＵ１０において実行されるブロック（中間コードまたはネイティブコード）がアプリケーション６０または初期アプリケーション６から取得されるとともに、取得されたブロックの実行頻度が実行頻度収集モジュール１５ｃ（図２参照）によって検出されて、実行頻度に「１」が加算される。そして、検出された実行頻度は、ＲＡＭ１２に実行頻度情報として記憶される。そして、ステップＳ８に進む。
【００６９】
続いて、ステップＳ８において、クライアント１によって、取得されたブロックがネイティブコードに変換済みであるか否かが判断される。そして、ステップＳ８において、取得されたブロックがネイティブコードに変換済みでない（中間コードのままである）と判断された場合には、ステップＳ９に進み、仮想マシン１５上のインタプリタ１５ａにおいて、中間コードが１行ずつ順次解釈されて実行される。そして、ステップＳ１１に進む。また、ステップＳ８において、取得されたブロックがネイティブコードに変換済みであると判断された場合には、ステップＳ１０に進み、ＣＰＵ１０において、ネイティブコードが直接実行される。そして、ステップＳ１１に進む。
【００７０】
そして、ステップＳ１１において、クライアント１によって、一定量のブロックが取得されて実行されたか否かが判断される。そして、ステップＳ１１において、一定量のブロックが取得されて実行されたと判断された場合には、ステップＳ１２に進み、ＲＡＭ１２に格納されている実行頻度情報と識別情報とＣＰＵ１０のプラットフォームに関する情報（プラットフォーム情報）とをサーバ５に送信する。そして、図５に示すステップＳ１３に進む。また、ステップＳ１１において、一定量のブロックが取得されて実行されていないと判断された場合には、図５に示すステップＳ１３に進む。
【００７１】
また、クライアント１からサーバ５に実行頻度情報と識別情報とプラットフォーム情報とが送信されると、サーバ５の制御動作として、ステップＳ１０３において、ＣＰＵ５０によって、クライアント１から送信された実行頻度情報と識別情報とプラットフォーム情報とを受信したか否かが判断される。そして、ステップＳ１０３において、実行頻度情報と識別情報とプラットフォーム情報とを受信したと判断された場合には、ステップＳ１０４に進む。なお、受信した実行頻度情報は、ＨＤＤ５１に蓄積される。また、ステップＳ１０３において、実行頻度情報と識別情報とプラットフォーム情報とを受信していないと判断された場合には、ステップＳ１０７に進む。
【００７２】
次に、ステップＳ１０４において、ＣＰＵ５０によって、一定量の実行頻度情報がＨＤＤ５１に蓄積されたか否かが判断される。そして、ステップＳ１０４において、一定量の実行頻度情報が蓄積されたと判断された場合には、ステップＳ１０５に進む。また、ステップＳ１０５において、一定量の実行頻度情報が蓄積されていないと判断された場合には、ステップＳ１０７に進む。
【００７３】
続いて、ステップＳ１０５において、ＣＰＵ５０によってブロックごとの実行頻度を合算した合計実行頻度に基づいて、アプリケーション６０、６１または初期アプリケーション６の複数の中間コードのうちの実行頻度の大きい中間コードがネイティブコードに変換する中間コードであると決定される。そして、決定された中間コードのうちの新たにネイティブコードに変換される中間コードのみが、クライアント１（クライアント３）のＣＰＵ１０（３０）のプラットフォーム情報に対応するように最適化されるようにネイティブコードに変換されるとともに、クライアント２のＣＰＵ２０のプラットフォーム情報に対応するように最適化されるようにネイティブコードに変換される。
【００７４】
そして、ステップＳ１０６において、ＣＰＵ５０によって変換されたネイティブコードのブロックがプラットフォーム情報に対応した前回生成されたアプリケーション６０および６１の対応する部分に挿入される。これにより、新たにアプリケーション６０および６１が生成されて、ＨＤＤ５１に記憶される。そして、ステップＳ１０７に進む。
【００７５】
また、クライアント１の制御動作として、図５に示すステップＳ１３において、クライアント１のＣＰＵ１０によって、前回のアプリケーション６０または初期アプリケーション６を取得したときから一定時間が経過しているか否かが判断される。そして、ステップＳ１３において、前回のアプリケーションを取得したときから一定時間が経過したと判断された場合には、ステップＳ１６に進む。また、ステップＳ１３において、前回のアプリケーションを取得したときから一定時間が経過していないと判断された場合には、ステップＳ１４に進み、ＣＰＵ１０によって、ユーザの所定の操作によりアプリケーション６０または初期アプリケーション６の更新指示がなされたか否かが判断される。そして、ステップＳ１４において、アプリケーションの更新指示がなされたと判断された場合には、ステップＳ１６に進む。また、ステップＳ１４において、アプリケーションの更新指示がなされていないと判断された場合には、ステップＳ１５に進む。
【００７６】
そして、ステップＳ１５において、ＣＰＵ１０によって、ユーザの所定の操作によりアプリケーション６０または初期アプリケーション６の終了指示がなされたか否かが判断される。そして、ステップＳ１５において、アプリケーションの終了指示がなされたと判断された場合には、クライアント１における制御が終了される。また、ステップＳ１５において、アプリケーションの終了指示がなされていないと判断された場合には、図４に示すステップＳ７に戻り、クライアント１によって次にインタプリタ１５ａまたはＣＰＵ１０において実行されるブロック（中間コードまたはネイティブコード）が現在起動している更新前のアプリケーション６０または初期アプリケーション６から取得される。このステップＳ７からステップＳ１５のステップが繰り返されることによって、アプリケーション６０または初期アプリケーション６のプログラムが仮想マシン１５上で処理される。
【００７７】
一方、ステップＳ１３において前回のアプリケーションを取得したときから一定時間が経過したと判断された場合、または、ステップＳ１４においてアプリケーションの更新指示がなされたと判断された場合には、ステップＳ１６に進み、ＣＰＵ１０は、アプリケーション要求信号と識別情報とプラットフォーム情報とをサーバ５に送信する。
【００７８】
また、クライアント１からサーバ５にアプリケーション要求信号と識別情報とプラットフォーム情報とが送信されると、図４に示すように、サーバ５の制御動作として、ステップＳ１０７において、ＣＰＵ５０によって、クライアント１から送信されたアプリケーション要求信号と識別情報とプラットフォーム情報とを受信したか否かが判断される。そして、ステップＳ１０７において、クライアント１から送信されたアプリケーション要求信号と識別情報とプラットフォーム情報とを受信したと判断された場合には、ステップＳ１０８に進み、クライアント１に対応するＨＤＤ５１に記憶されている更新後の新たなアプリケーション６０をクライアント１に送信する。そして、サーバ５における制御が終了される。また、ステップＳ１０７において、クライアント１から送信されたアプリケーション要求信号と識別情報とプラットフォーム情報とを受信していないと判断された場合には、サーバ５における制御が終了される。
【００７９】
また、サーバ５からクライアント１に新たなアプリケーション６０が送信されると、クライアント１の制御動作として、図５に示すステップＳ１７において、ＣＰＵ１０によって、サーバ５から送信された新たなアプリケーション６０を受信したか否かが判断される。そして、ステップＳ１７において、新たなアプリケーション６０を受信したと判断された場合には、ステップＳ１８に進み、現在フラッシュメモリ１３に格納されているアプリケーション６０（たとえば６０ａ）が新たなアプリケーション６０（たとえば６０ｂ）に書き換られることによって、新たなアプリケーション６０（たとえば６０ｂ）に更新される。そして、ステップＳ１９に進む。また、ステップＳ１７において、サーバ５から送信された新たなアプリケーション６０を受信していないと判断された場合には、新たなアプリケーション６０を受信したと判断されるまでステップＳ１７の判断が繰り返される。
【００８０】
最後に、ステップＳ１９において、ＣＰＵ１０によって、ユーザの所定の操作によりアプリケーション６０または初期アプリケーション６の終了指示がなされたか否かが判断される。そして、ステップＳ１９において、アプリケーションの終了指示がなされたと判断された場合には、クライアント１における制御が終了される。また、ステップＳ１９において、アプリケーションの終了指示がなされていないと判断された場合には、上記した図４に示すステップＳ７に戻り、クライアント１によって次にインタプリタ１５ａまたはＣＰＵ１０において実行されるブロック（中間コードまたはネイティブコード）が現在起動している更新前のアプリケーション６０または初期アプリケーション６から取得される。なお、更新前のアプリケーション６０（たとえば６０ａ）が起動されている状態では、更新後の新たな内容は反映されず、次回、アプリケーション６０が読み出された際に、新たなアプリケーション６０（たとえば６０ｂ）が読み出されて、更新後の新たな内容が反映される。
【００８１】
第１実施形態では、上記のように、クライアント１に、アプリケーション６０および初期アプリケーション６の中間コードを解釈して実行するインタプリタ１５ａと、アプリケーションのネイティブコードを実行するＣＰＵ１０とを設けることによって、クライアント１側でアプリケーションを実行することができる。これにより、クライアント１は、アプリケーションを実行するためにサーバ５との間で通信を頻繁に行う必要がないので、クライアント１においてアプリケーションの処理結果を迅速に得ることができる。また、ネイティブコードは実行される際に解釈される必要がないため、中間コードに比べて実行される際の実行速度が大きい。これにより、アプリケーションの一部をネイティブコードにすることによって、クライアント１においてアプリケーションの実行速度を高めることができる。
【００８２】
また、第１実施形態では、上記のように、サーバ５に、アプリケーション６０、６１および初期アプリケーション６の中間コードをネイティブコードに変換するネイティブコードコンパイラ５５を設けることによって、クライアント１側にコンパイラを設ける必要がないので、ネイティブコードコンパイラ５５における変換時に、クライアント１のＲＡＭ１２に過度な負荷が掛かるのを回避することができる。また、クライアント１側で中間コードをネイティブコードに変換する必要がないので、クライアント１のＣＰＵ１０に過度な負荷が掛かるのを回避することができる。これらにより、クライアント１のＣＰＵ１０やＲＡＭ１２に過度な負荷が掛かるのを回避することができる。
【００８３】
また、第１実施形態では、上記のように、ネイティブコードコンパイラ５５が、ＨＤＤ５１に一定量の実行頻度情報が蓄積された際に、ＨＤＤ５１に格納された実行頻度情報の実行頻度を合算した合計実行頻度に基づいて、アプリケーション６０、６１または初期アプリケーション６の複数の中間コードのうち、合計実行頻度が所定の実行回数（閾値）と所定の実行頻度の割合（閾値）との両方を越えた中間コードをネイティブコードに変換するように構成することによって、ネイティブコードは実行される際に解釈される必要がないので、中間コードに比べて実行される際の負荷が小さくなる分、クライアント１、２および３におけるアプリケーション６０、６１または初期アプリケーション６の実行速度をより高めることができる。ここで、ネイティブコードは、中間コードに比べてクライアント１、２および３が必要とする記憶容量を増やす一面を有するが、ネイティブコードコンパイラ５５において実行頻度の小さい中間コードをネイティブコードに変換せずに、実行頻度の大きい中間コードのみを選択的にネイティブコードに変換することによって、この記憶容量の増大を極力抑えることができる。
【００８４】
また、第１実施形態では、複数のクライアント１、２および３の実行頻度情報に基づくことによって、通常実行される回数の小さい処理が特定のクライアント１、２および３により過度に実行されることに起因して実行頻度が大きくなってしまった場合などにおいても、複数の実行頻度情報に基づくことによって実行頻度を平準化することができるので、より正確に、サーバ５において実行頻度の大きい中間コードをネイティブコードに変換することができる。
【００８５】
また、第１実施形態では、上記のように、ネイティブコードコンパイラ５５が、クライアント１、２および３のＣＰＵ１０、２０および３０のプラットフォームに基づいて、変換するように決定された中間コードを、クライアント１、２および３のＣＰＵ１０、２０および３０のプラットフォームごとに最適化されたネイティブコードに変換するように構成することによって、アプリケーション６０、６１または初期アプリケーション６のネイティブコードをクライアント１、２および３のＣＰＵ１０、２０および３０に合わせて最適化することができる。これにより、クライアント１、２および３のＣＰＵ１０、２０および３０における実行に適した更新後のアプリケーション６０または６１をクライアント１、２および３に送信することができるので、クライアント１、２および３のＣＰＵ１０、２０および３０においてアプリケーション６０または６１が実行される際の負荷を軽減することができる。
【００８６】
また、第１実施形態では、クライアント１、２および３のＣＰＵ１０、２０および３０の種類に基づいてアプリケーション６０または６１の中間コードをネイティブコードに変換することによって、クライアント１、２および３ごとにアプリケーションの中間コードをネイティブコードに変換する必要がないとともに、クライアント１、２および３ごとのアプリケーションを格納する必要がなく、ＣＰＵ１０、２０および３０の種類毎にのみ格納すればよい。これにより、サーバ５のネイティブコードコンパイラ５５において変換するアプリケーションの数を少なくすることができるとともに、サーバ５のＨＤＤ５１に記憶されるアプリケーションの数を少なくすることができる。この結果、サーバ５における負荷を軽減することができる。
【００８７】
また、第１実施形態では、上記のように、サーバ５のネイティブコードコンパイラ５５が前回生成されたアプリケーション６０および６１（たとえば６０ａおよび６１ａ）に基づいて、新たなアプリケーション６０および６１（たとえば６０ｂおよび６１ｂ）を生成するように構成することによって、前回生成されたアプリケーション６０および６１（たとえば６０ａおよび６１ａ）に含まれるネイティブコードに対応するブロックはすでにネイティブコードに変換済みであり、再度ネイティブコードに変換する必要がないので、サーバ５のネイティブコードコンパイラ５５において変換する中間コードの数を少なくすることができる。この結果、サーバ５における負荷をより軽減することができる。
【００８８】
また、第１実施形態では、上記のように、アプリケーション６０の中間コードは、クライアント１の仮想マシン１５においてインタプリタ１５ａによって解釈されて実行される中間コードであり、アプリケーション６０の変換後コードは、ＣＰＵ１０によって実行されるネイティブコードであることによって、Ｊａｖａ（登録商標）のような仮想マシン１５が設けられたクライアント１において、クライアント１はアプリケーションを実行するためにサーバ５との間で通信を頻繁に行う必要がないので、アプリケーション６０の処理結果を迅速に得ることができる。さらに、クライアント１側にコンパイラを設ける必要がないので、サーバ５のネイティブコードコンパイラ５５における変換時にＣＰＵ１０やＲＡＭ１２に過度な負荷が掛かるのを回避することができる。
【００８９】
また、第１実施形態では、上記のように、クライアント１がユーザによって携帯されることが可能な携帯端末であることによって、クライアント１が携帯端末用に最適化された小型のＣＰＵ１０や小容量のＲＡＭ１２およびフラッシュメモリ１３によって構成されている場合においても、クライアント１はアプリケーションを実行するためにサーバ５との間で通信を頻繁に行う必要がないので、クライアント１においてアプリケーション６０の処理結果を迅速に得ることができる。さらに、クライアント１側にコンパイラを設ける必要がないので、ネイティブコードコンパイラ５５における変換時にクライアント１のＣＰＵ１０やＲＡＭ１２に過度な負荷が掛かるのを回避することができる。
【００９０】
（第２実施形態）
次に、図２および図６を参照して、第２実施形態について説明する。この第２実施形態による情報処理システム２００では、上記第１実施形態と異なり、サーバ２０５のネイティブコードコンパイラ２５５が、前回生成されたアプリケーション２６０および２６１ではなく初期アプリケーション６から新たなアプリケーション２６０および２６１を生成する場合について説明する。
【００９１】
まず、図２および図６を参照して、本発明の第２実施形態による情報処理システム２００の構成について説明する。
【００９２】
第２実施形態におけるサーバ２０５（図２参照）のネイティブコードコンパイラ２５５（図２参照）は、図６に示すように、前回生成されたアプリケーション２６０および２６１（たとえば２６０ａおよび２６１ａ）ではなく初期アプリケーション６に基づいて、新たなアプリケーションを生成するように構成されている。すなわち、ネイティブコードコンパイラ２５５は、初期アプリケーション６のネイティブコードに変換するように決定された実行頻度の大きい中間コードを、更新時にすべてネイティブコードに変換するように構成されている。また、新たなアプリケーション（たとえば２６０ｂおよび２６１ｂ）が生成された際、前回生成されたアプリケーション（たとえば２６０ａおよび２６１ａ）は、それぞれ、ＨＤＤ５１（図２参照）から削除されるように構成されている。なお、アプリケーション２６０および２６１は、それぞれ、本発明の「アプリケーションプログラム」の一例である。なお、第２実施形態のその他の構成は、上記第１実施形態と同様である。
【００９３】
次に、図２および図６を参照して、本発明の第２実施形態によるサーバ２０５におけるアプリケーションの更新動作について説明する。
【００９４】
まず、図６に示すように、初期状態（アプリケーションの更新が一度も行われていない状態）のサーバ２０５（図２参照）において、上記第１実施形態と同様の更新動作によって、アプリケーション２６０および２６１の１回目更新版として、初期アプリケーション６の中間コード６ａが最適化されたネイティブコード２０６ｄおよび２０６ｅに変換されたアプリケーション２６０ａおよび２６１ａが初期アプリケーション６からそれぞれ生成されて、ＨＤＤ５１（図２参照）に格納される。
【００９５】
次に、１回目更新版のアプリケーション２６０ａおよび２６１ａが生成されているサーバ２０５において、ＨＤＤ５１に格納されている実行頻度情報が一定量になった際に、ネイティブコードコンパイラ２５５（図２参照）によって、合計実行頻度に基づいて、アプリケーションの複数の中間コードのうち実行頻度の大きい中間コード６ｃがネイティブコードに変換する中間コードに決定される。そして、初期アプリケーション６に基づいて変換される。
【００９６】
これにより、ネイティブコードコンパイラ２５５によって、クライアント１（図２参照）のＣＰＵ１０（図２参照）およびクライアント３（図２参照）のＣＰＵ３０（図２参照）に共通のプラットフォームに対応するように、中間コード６ｃが最適化されたネイティブコード２０６ｆに変換される。これにより、アプリケーション２６０の２回目更新版として、アプリケーション２６０ｂが生成される。このアプリケーション２６０ｂは、ネイティブコードに変換するように決定された中間コードの中に中間コード６ａが含まれていないので、アプリケーション２６０ａと異なり、ネイティブコード２０６ｄではなく中間コード６ａを含む。
【００９７】
また、ネイティブコードコンパイラ２５５によって、クライアント１のＣＰＵ１０およびクライアント３のＣＰＵ３０とは異なる種類のクライアント２（図２参照）のＣＰＵ２０（図２参照）のプラットフォームに対応するように、中間コード６ｃが最適化されたネイティブコード２０６ｇに変換される。これにより、アプリケーション２６１の２回目更新版として、アプリケーション２６１ｂが生成される。このアプリケーション２６１ｂは、ネイティブコードに変換するように決定された中間コードの中に中間コード６ａが含まれていないので、アプリケーション２６１ａと異なり、ネイティブコード２０６ｅではなく中間コード６ａを含む。
【００９８】
そして、１回目更新版のアプリケーション２６０ａが２回目更新版のアプリケーション２６０ｂに置き換えられてＨＤＤ５１に格納されることによって、アプリケーション２６０の更新が行われる。また、１回目更新版のアプリケーション２６１ａが２回目更新版のアプリケーション２６１ｂに置き換えられてＨＤＤ５１に格納されることによって、アプリケーション２６１の更新が行われる。この際、１回目更新版のアプリケーション２６０ａおよび２６１ａは、それぞれ、ＨＤＤ５１から削除される。
【００９９】
また、２回目更新版のアプリケーション２６０ｂおよび２６１ｂが生成されているサーバ２０５において、ＨＤＤ５１に格納されている実行頻度情報が一定量になった際に、１回目更新版のアプリケーション２６０ａおよび２６１ａから２回目更新版のアプリケーション２６０ｂおよび２６１ｂへの更新と同様の更新動作が行われる。この一連の更新動作が、実行頻度情報が一定量になった段階でサーバ２０５において繰り返し行われる。なお、第２実施形態の制御動作は、上記第１実施形態と同様である。
【０１００】
第２実施形態では、上記のように、前回生成されたアプリケーション２６０および２６１（たとえば２６０ａおよび２６１ａ）ではなく初期アプリケーション６に基づいて、初期アプリケーション６の中間コードのうち実行頻度の大きい中間コードを、ネイティブコードコンパイラ２５５が、更新時にすべてネイティブコードに変換するように構成することによって、前回生成されたアプリケーション２６０および２６１（たとえば２６０ａおよび２６１ａ）に含まれるネイティブコードが通常実行される回数の小さい処理が過度に実行されたことに起因して変換されたブロックである場合などにおいても、新たなアプリケーション２６０および２６１（たとえば２６０ｂおよび２６１ｂ）は、前回生成されたアプリケーション２６０および２６１（たとえば２６０ａおよび２６１ａ）ではなく初期アプリケーション６に基づいて生成されるので、より今回の実行頻度に即するように、サーバ２０５において実行頻度の大きい中間コードをネイティブコードに変換して新たなアプリケーション２６０および２６１（たとえば２６０ｂおよび２６１ｂ）を生成することができる。なお、第２実施形態のその他の効果は、上記第１実施形態と同様である。
【０１０１】
なお、今回開示された実施形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した実施形態の説明ではなく特許請求の範囲によって示され、さらに特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれる。
【０１０２】
たとえば、上記第１および第２実施形態では、情報処理システム１００（２００）が、携帯端末からなるクライアント１、２および３とサーバ５（２０５）とから構成されている例を示したが、本発明はこれに限られない。たとえば、情報処理システムは、携帯端末でないデスクトップ型のパーソナルコンピュータなどとサーバとから構成されてもよい。
【０１０３】
また、上記第１および第２実施形態では、アプリケーション６０（２６０）、６１（２６１）および初期アプリケーション６を、Ｊａｖａ（登録商標）仮想マシンにおいて起動されることが可能なように構成されたプログラムであり、Ｊａｖａ言語からなるプログラミング環境において本発明を適用した例を示したが、本発明はこれに限られない。本発明では、仮想マシン環境下で起動されるプログラムであれば、Ｊａｖａ言語からなるプログラミング環境に限られない。また、仮想マシン環境下で起動される必要のないプログラムに本発明を適用してもよい。
【０１０４】
また、上記第１および第２実施形態では、ネイティブコードコンパイラ５５（２５５）がＨＤＤ５１に一定量の実行頻度情報が蓄積された際に、ＨＤＤ５１に格納された実行頻度情報のブロックごとの実行頻度を合算した合計実行頻度に基づいて、アプリケーション６０（２６０）、６１（２６１）または初期アプリケーション６の複数の中間コードをネイティブコードに変換した例を示したが、本発明はこれに限られない。本発明では、ネイティブコードコンパイラは、実行頻度情報のブロックごとの実行頻度を合算せずに、個々のクライアントから受信した実行頻度情報のみに基づいて、個々のクライアントに対応するように、アプリケーションの複数の中間コードをネイティブコードに変換してもよい。また、サーバにクライアントから実行頻度情報が送信される度ごとに、個々のクライアントから受信した実行頻度情報のみに基づいて、個々のクライアントに対応するように、アプリケーションの複数の中間コードをネイティブコードに変換してもよい。
【０１０５】
また、上記第１および第２実施形態では、ネイティブコードコンパイラ５５（２５５）がクライアント１、２および３のＣＰＵ１０、２０および３０のプラットフォームに基づいて、変換するように決定された中間コードをクライアント１、２および３のＣＰＵ１０、２０および３０のプラットフォームごとに最適化されるようにネイティブコードに変換することによって、新たなアプリケーション６０（２６０）および６１（２６１）を生成した例を示したが、本発明はこれに限られない。たとえば、ネイティブコードコンパイラは、ＣＰＵのプラットフォームにより特定されるＣＰＵの種類に基づくのではなく、それぞれのクライアントに搭載されたＯＳ（Ｏｐｅｒａｔｉｎｇ  ｓｙｓｔｅｍ）に基づいて、ＯＳごとに異なる新たなアプリケーションを生成してもよい。また、ネイティブコードコンパイラは、ＣＰＵのプラットフォームなどの要素に基づかずに、すべてのクライアントに共通した１つの新たなアプリケーションのみを生成してもよい。これにより、サーバに掛かる負担を軽減することが可能である。
【０１０６】
また、上記第１および第２実施形態では、クライアント１、２および３のフラッシュメモリ１３、２３および３３に、仮想マシン１５、２５および３５上で起動されるアプリケーション６０（２６０）、６１（２６１）および初期アプリケーション６を格納した例を示したが、本発明はこれに限られない。本発明では、クライアントがアプリケーションを起動させる際に、毎回、サーバから対応するアプリケーションをクライアントのＲＡＭにダウンロードするように構成してもよい。
【０１０７】
また、上記第１および第２実施形態では、更新前のアプリケーション６０（２６０）（たとえば６０ａ（２６０ａ））が起動されている状態では、更新後の新たな内容は反映されておらず、次回、サーバ５からアプリケーション６０（２６０）が読み出された際に、新たなアプリケーション６０（２６０）（たとえば６０ｂ（２６０ｂ））が読み出されて、更新された内容が反映されるように構成した例を示したが、本発明はこれに限られない。本発明では、更新前のアプリケーションが起動されている状態であっても、起動されている更新前のアプリケーションに更新された内容を動的に反映させるように構成してもよい。
【０１０８】
また、上記第１および第２実施形態では、クライアント１、２および３の仮想マシン１５、２５および３５がアプリケーション６０（２６０）、６１（２６１）または初期アプリケーション６が起動される前に、前もって起動されている例を示したが、本発明はこれに限らない。本発明では、クライアントの仮想マシンをアプリケーションの起動と共に起動させてもよい。
【０１０９】
また、上記第１および第２実施形態では、クライアント１が初期状態（アプリケーション６０（２６０）および初期アプリケーション６を有していない状態）であり、かつ、クライアント１にユーザによる所定の操作によって初期アプリケーション要求指示がなされた場合に、サーバ５はクライアント１に対して初期アプリケーション６を送信した例を示したが、本発明はこれに限らない。本発明では、クライアントのフラッシュメモリやＲＯＭなどに前もって初期アプリケーションを格納してもよい。また、クライアント側からの初期アプリケーション要求指示を受けずに、サーバから直接クライアントに初期アプリケーションを送信してもよい。
【符号の説明】
【０１１０】
１、２、３  クライアント
５、２０５  サーバ
６  初期アプリケーション（初期アプリケーションプログラム）
１０、２０、３０  ＣＰＵ（制御部）
１５、２５、３５  仮想マシン（仮想マシン環境）
１５ａ、２５ａ、３５ａ  インタプリタ
１５ｃ、２５ｃ、３５ｃ  実行頻度収集モジュール（実行頻度検出手段）
５１  ＨＤＤ（記憶部）
５５、２５５  ネイティブコードコンパイラ（コンパイラ）
６０、６１、２６０、２６１  アプリケーション（アプリケーションプログラム）
１００、２００  情報処理システム
【図１】
2011034404.tif 000003
【図２】
2011034404.tif 000004
【図３】
2011034404.tif 000005
【図４】
2011034404.tif 000006
【図５】
2011034404.tif 000007
【図６】
2011034404.tif 000008