(57)【要約】【課題】組込み機器への適用に適しており、コンテンツの実行速度を向上させ、また、低消費電力を実現する技術を提供する。【解決手段】携帯電話機１０１は、コンテンツ１０７に含まれる複数のサブルーチンごとに、ネイティブコード１３１、第１コード１１９、第２コード１２１のうち、存在するコードの種類を管理するサブルーチン管理表２０３を記憶するメモリ１１７と、仮想マシン１５３と、第１コード１１９から第２コード１２１を生成するプリコンパイル回路１７３と、コンテンツ１０７の実行中に呼び出されたサブルーチンについて、存在するコードの種類に応じて処理を切り替えるサブルーチン管理回路１７１とを備える。サブルーチン管理回路１７１は、処理を切り替える際、サブルーチン管理表２０３を参照し、存在するコードの種類を判断する。【選択図】図１
2009211190.tif 000002
【特許請求の範囲】
【請求項１】
コンテンツに含まれる複数のサブルーチンごとに、プロセッサで実行可能なネイティブコード、前記ネイティブコードの元となるＯＳに依存しない第１コード、前記第１コードを前記ネイティブコードへ変換する過程で生成される第２コードのうち、存在するコードの種類を管理するサブルーチン管理表を記憶するメモリと、
前記第１コードをインタプリタ方式で実行するインタプリタ機能、及び前記第２コードをネイティブコードへ変換してから実行するＪＩＴコンパイル機能を備えた仮想マシンと、
前記第１コードから前記第２コードを生成するプリコンパイル回路と、
前記コンテンツの実行中に呼び出されたサブルーチンについて、前記サブルーチン管理表を参照した結果、ネイティブコードが存在するときは、該ネイティブコードがプロセッサで実行され、第２コードが存在するときは、該第２コードが前記仮想マシンのＪＩＴコンパイル機能で実行され、生成されたネイティブコードが前記メモリに格納され、又は第１コードが存在するときは、該第１コードが前記仮想マシンのインタプリタ機能で実行されるとともに、前記プリコンパイル回路で第２コードに変換され、該第２コードが前記メモリに格納されるように実行制御を行い、それらの制御によりサブルーチンを実行する際に参照するコードの種類が変化したときは、変化後の種類が前記サブルーチン管理表に記録されるように記録制御を行うサブルーチン管理手段と
を備えた情報処理装置。
【請求項２】
前記サブルーチン管理手段は、前記サブルーチンごとに所定の基準に基づいて定められる、第１コードを第２コードへ変換する優先度の高いサブルーチンから順に、その第１コードが第２コードに変換されるように前記実行制御を行う請求項１に記載の情報処理装置。
【請求項３】
前記メモリは、前記優先度に応じて、前記プリコンパイル回路の動作速度を定めた動作速度定義表を記憶し、
さらに、前記プリコンパイル回路で処理される第１コードに対応するサブルーチンの優先度を用いて、前記動作速度定義表から動作速度を判断し、該動作速度に従って前記プリコンパイル回路が動作するように制御を行うプリコンパイル制御手段を備えた
請求項２に記載の情報処理装置。
【請求項４】
前記優先度は、前記コンテンツの実行中に呼び出されたサブルーチンごとの回数であり、又は前記コンテンツの実行中に各サブルーチンが呼び出された際のスタックフレームの数を所定の値から減じた値である請求項２又は３に記載の情報処理装置。
【請求項５】
前記優先度は、前記コンテンツに含まれる各サブルーチンの第１コードを第２コードへ変換するのに要する時間に基づいて、又は前記コンテンツの実行中に各サブルーチンが呼び出される頻度に基づいて、各サブルーチンの第１コード内に予め記述された値である請求項２又は３に記載の情報処理装置。
【請求項６】
前記プリコンパイル制御手段は、前記プリコンパイル回路の動作速度を下げたとき、該プリコンパイル回路への供給電圧を、その動作を維持できる電圧値の範囲内で下げる請求項３乃至５のいずれかに記載の情報処理装置。
【請求項７】
前記プリコンパイル制御手段は、バス内のデータ伝送量又はプロセッサによる前記メモリへのアクセス頻度を監視し、前記データ伝送量又は前記アクセス頻度が所定の基準を超えている間、前記プリコンパイル回路の動作を停止する請求項２乃至６のいずれかに記載の情報処理装置。
【請求項８】
さらに、前記サブルーチン管理表の内容をサブルーチン管理表キャッシュとして記憶するキャッシュメモリを備え、
前記サブルーチン管理手段は、前記サブルーチン管理表に替えて前記サブルーチン管理表キャッシュに基づいて前記実行制御及び前記記録制御を行い、所定のタイミングで、前記サブルーチン管理表と前記サブルーチン管理表キャッシュの間でデータの転送及び書き換えが行われるようにキャッシュ制御を行う
請求項１乃至７のいずれかに記載の情報処理装置。
【請求項９】
前記サブルーチン管理手段は、
前記コンテンツの実行開始時には、実行対象のコンテンツに含まれるサブルーチンの情報が、前記優先度の高いものから順に、前記サブルーチン管理表から前記サブルーチン管理表キャッシュへ書き込まれ、
前記コンテンツの実行中において、呼び出されたサブルーチンの情報が前記サブルーチン管理表キャッシュにない場合は、サブルーチン管理表キャッシュにある前記優先度の最も低いサブルーチンの情報が前記サブルーチン管理表へ書き戻され、前記呼び出されたサブルーチンの情報が前記サブルーチン管理表から前記サブルーチン管理表キャッシュへ書き込まれるように前記キャッシュ制御を行う請求項８に記載の情報処理装置。
【請求項１０】
前記第１コードは、スタックマシン用のコードであり、
前記第２コードは、前記第１コードから生成されるレジスタマシン用のコードを含む
請求項１乃至９のいずれかに記載の情報処理装置。
【請求項１１】
前記第２コードは、前記サブルーチンの実行過程で呼び出される他のサブルーチンの第１コードを、呼び出し元のサブルーチンの第１コード内にインライン展開して成るコードを含む請求項１乃至１０のいずれかに記載の情報処理装置。
【請求項１２】
前記メモリは、前記第１コードにおける不要な記述、文法上の瑕疵、又は誤記の修正方法を定めた修正辞書を記憶し、
前記第２コードは、前記修正辞書に基づいて、前記第１コードを最適化したコードを含む
請求項１乃至１１のいずれかに記載の情報処理装置。
【請求項１３】
前記ＪＩＴコンパイル機能は、前記第２コードの実行過程で呼び出される他のサブルーチンの第１コードのプリコンパイル結果である第２コードを、呼び出し元の第２コード内にインライン展開し、これをネイティブコードへ変換する請求項１乃至１２のいずれかに記載の情報処理装置。
【請求項１４】
前記メモリは、前記サブルーチンごとに複数のコンテンツとの対応関係を表すサブルーチン共用表を記憶し、
前記サブルーチン管理手段は、前記優先度に替えて、前記サブルーチン共用表に基づいて、対応するコンテンツの数が多いサブルーチンから順に、その第１コードが第２コードに変換されるように前記実行制御を行う
請求項２乃至１３のいずれかに記載の情報処理装置。
【請求項１５】
前記サブルーチン管理手段は、前記優先度に替えて、前記コンテンツの実行中に呼び出されたサブルーチンのうち最後に呼び出されたサブルーチンから順に、その第１コードが第２コードに変換されるように前記実行制御を行う請求項２乃至１２のいずれかに記載の情報処理装置。
【請求項１６】
前記第１コードには、対応するサブルーチンの処理の内容を表す属性が予め記載されており、
前記メモリは、前記属性ごとに前記第１コードから前記第２コードを生成する優先順位を定めた属性管理表を記憶し、
前記サブルーチン管理手段は、前記コンテンツンの実行中に呼び出されたサブルーチンの第１コードに記載された属性を用いて前記属性管理表から前記優先順位を特定し、前記優先度に替えて、該優先順位に従って第１コードが第２コードに変換されるように前記実行制御を行う
請求項２乃至１３に記載の情報処理装置。
【請求項１７】
前記コンテンツに対応する表示物を表示するディスプレイを備え、
前記サブルーチン管理手段は、前記優先度に替えて、前記ディスプレイ上で、中央の表示物、最前面の表示物、又は最も大きい表示物に対応するコンテンツに含まれるサブルーチンの第１コードから優先的に第２コードが生成されるように前記実行制御を行う
請求項２乃至１３のいずれかに記載の情報処理装置。
【請求項１８】
前記ディスプレイ上に表示される矢印等の指示部を移動させ、及び前記表示物を前記指示部によって選択するための操作部をさらに備え、
前記サブルーチン管理手段は、前記ディスプレイ上で、前記指示部と重っている表示物又は前記指示部によって選択された表示物に対応するコンテンツに含まれるサブルーチンの第１コードから優先的に第２コードが生成されるように前記実行制御を行う
請求項１７に記載の情報処理装置。
【請求項１９】
前記コンテンツは、その一部若しくは全部がスクリプト若しくはJavaプログラムである請求項１乃至１８のいずれかに記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、携帯電話、カーナビゲーション装置、及びテレビ受像機等の情報処理装置内で動作するＪＩＴコンパイラを備えた仮想マシンに関する。
【背景技術】
【０００２】
近年、ユーザの要望するコンテンツは、ダウンロード可能なアプリケーションとして又はそのまま利用できるＷｅｂアプリケーションとして、ホームページ上で提供されることが多い。これらのコンテンツには、文書編集ソフト、表計算ソフト、及びメール送受信ソフト等のコンピュータプログラムだけでなく、ゲーム、小説、動画、アニメーション等のソフトウェアも含まれる。
【０００３】
しかしながら、このアプリケーション及びそれを表示するブラウザは、主に閲覧を目的として作られているため、画面デザイン、操作性、応答性の面において、Windows（登録商標）等のデスクトップアプリケーションに劣っていた。そこで、これらの課題を改善するため、JavaScript（登録商標。非特許文献１参照）、Ajax（非特許文献２参照）などの技術を用いて、既存のデスクトップアプリケーションと同等な性能を持つRich Internet Application（ＲＩＡ、非特許文献３参照）と呼ばれるＷｅｂアプリケーションが開発されている。
【０００４】
また、高度なアニメーションや動画を表示させることができるメディアプレイヤーと呼ばれるアプリケーション実行環境が、ブラウザのプラグインとして、又は単体のアプリケーションとして開発されている。このメディアプレイヤーを用いることによっても、既存のデスクトップアプリケーションと同等なアプリケーション実行環境を実現することができる。
【０００５】
これらのブラウザ及びメディアプレイヤーは、ＣＰＵを内蔵し、ソフトウェアに制御されて動作するパーソナルコンピュータ（ＰＣ）以外の機器、いわゆる組込み機器においても広く用いられている。組込み機器としては、例えば、携帯電話機、その他の携帯情報機器、カーナビゲーション装置、家庭用電話機、携帯ゲーム機、家庭用ゲーム機、ＨＤＤレコーダ等の個人用機器、及びカラオケ機器、ロボット、鉄道等の輸送機器、ロケット、プラント制御装置等の業務用機器がある。
【０００６】
上記ブラウザ及びメディアプレイヤーは、HTML、XML、Java（登録商標）、JavaScript（登録商標）等の標準的な技術を採用していることから、コンテンツの作成時には、ＯＳ等のアーキテクチャの違いを意識する必要がない。従って、一度開発されたコンテンツは、任意の端末で変更せずに動作させることが原理的には可能となり、開発負担の大幅な軽減及び互換性の向上を実現している。
【０００７】
上記コンテンツを組込み機器向けに開発する際には、ＰＣ向けの場合とは異なり、ＣＰＵの処理速度、メモリの容量、画像表示能力等の面において、ＰＣと比較してリソースが厳しく制限される点を考慮しなければならない。特に、ＲＩＡの開発においては、JavaScript等のスクリプト言語やJavaで動作を記述することが多い。しかし、スクリプト言語は、C++などと比較して、記述量が少ないため、開発効率は良いという利点がある一方で、同一環境での実行速度が数倍遅いという問題がある。実行速度が遅いという問題については、Javaで記述されたプログラム（Javaプログラム）にも共通する。
【０００８】
この問題の一因としては、スクリプト言語で記述されたコードを含むプログラム及びJavaプログラムが、組込み機器等の情報処理装置のＯＳが直接実行できるネイティブコードとは異なる形式で配布されることが挙げられる。Javaプログラムの場合、ＯＳやハードウェア等のアーキテクチャに依存しないバイナリ形式のJavaバイトコードと呼ばれる中間コードに一旦コンパイルされ、この中間コードの状態で配布される。
【０００９】
すなわち、中間コードの形式のプログラムは、インタプリタ方式又はJust-In-Timeコンパイル（ＪＩＴコンパイル）方式で実行される。具体的には、インタプリタ方式の場合、例えばソフトウェアで構成したインタプリタが、中間コードをネイティブコードに逐次変換し（例えば、コード単位で変換し）ながら実行する。ＪＩＴコンパイル方式の場合、例えばソフトウェアで構成したＪＩＴコンパイラが、中間コードをネイティブコードに一旦変換し（例えば、サブルーチン単位で変換し）てから実行する。更に詳細には、インタプリタ方式とＪＩＴコンパイル方式のいずれにおいても、生成されたネイティブコードは、実際にはＣＰＵによって実行される。ＰＣ等の多くの情報処理装置には、このインタプリタとＪＩＴコンパイラを備えた仮想マシンが搭載されている。JavaScriptの場合、ブラウザに搭載されたスクリプトエンジンがスクリプトを解釈し、インタプリタ形式で実行する態様が多い。いずれにしても、ネイティブコードへコンパイル済みの状態で配布されるプログラムと比較すれば、インタプリタ形式で実行する場合には処理完了までの時間が長くなり、ＪＩＴコンパイルで実行する場合にはコンパイル完了までのオーバーヘッドが発生するため、実行速度が遅くなる。
【００１０】
今後、Java（登録商標）やスクリプト言語を用いたコンテンツの開発が大規模化してくると、この問題の解決が重要になる。以下、この問題を解決しようとする従来技術の例を示す。
（１）プロセッサの動作速度の向上
プロセッサの動作速度を上げれば、ソフトウェアで構成したインタプリタ及びＪＩＴコンパイラの動作速度も向上し、コンテンツの実行処理を高速化できると考えられる。
（２）インタプリタによる実行速度の向上
インタプリタ自体の動作速度を上げれば、スクリプト処理開始までのオーバーヘッドもなく、実行処理を高速化できると考えられる。例えば、非特許文献４には、インタプリタをハードウェア化して専用のプロセッサを構築することにより、高速化を図る製品が開示されている。
（３）無駄なコンパイルを行わない技術
下記特許文献１には、コンパイルの必要なメソッドだけをコンパイルし、無駄なコンパイルを行わない技術が開示されている。具体的には、インタプリタで実行中のメソッドを検出し、インタプリタによる実行を中断し又はマルチスレッドを利用して、インタプリタで実行していたバイトコードをネイティブコードへコンパイルし、コンパイルが終了すると、インタプリタによる処理の中断箇所からバイトコードを用いて実行を再開し又は生成したネイティブコードを用いて処理を実行するという技術である。
（４）コンパイルの要否の判断を高速化する技術
下記特許文献２には、バイトコードとネイティブコードがメモリ上に混在する場合において、コンパイルされているか否か及びネイティブコードの格納アドレスの検索を容易にすることにより、処理の高速化を図る技術が開示されている。具体的には、バイトコードがコンパイルされているか否かを判断するための情報と、コンパイルされたネイティブコードのアドレスを検索する検索テーブルをメモリ上に備えておき、バイトコードの実行時に、この検索テーブルを検索することにより、コンパイルの要否の判断やネイティブコードの格納アドレスの検索を容易（高速）に行うという技術である。
【非特許文献１】"Introduction to JavaScript"、[online]、Refsnes Data、[2008年２月７日検索]、インターネット<URL：http://www.w3schools.com/js/js#intro.asp>
【非特許文献２】"Ajax(programming)"、[online]、2008年2月6日、Wikipedia、[2008年２月７日検索]、インターネット<URL：http://en.wikipedia.org/wiki/AJAX>
【非特許文献３】"Rich Internet application"、[online]、2008年2月3日、Wikipedia、[2008年２月７日検索]、インターネット<URL：http://en.wikipedia.org/wiki/Rich#Internet#application>
【非特許文献４】"Java processor"、[online]、2008年１月２２日、Wikipedia、[2008年２月７日検索]、インターネット<URL：http://en.wikipedia.org/wiki/Java#processor>
【特許文献１】ＵＳ６９９６８１４  Ｂ２
【特許文献２】特開２００６−２０２３１７号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
しかしながら、（１）及び（２）の技術には、消費電力及びコストが増大することから、組込み機器への適用が難しいという問題がある。
【００１２】
（３）の技術においては、インタープリタによる処理を中断してコンパイルを行う場合、インタープリタを中断するまでの時間とコンパイルに要する時間がオーバーヘッドとなり、実行時間が増大（実行速度が低下）する。一方、インタープリタによる処理を行いながらコンパイルを行う場合、マルチスレッド処理を行うことになるため、インタープリタによる実行速度が低下するという問題がある。
【００１３】
（４）の技術には、ＪＩＴコンパイル時のオーバーヘッドが解消されていないうえに、検索テーブルの検索時にＣＰＵによるメモリへのアクセスが頻発することにより、実行速度が低下するという問題がある。
【課題を解決するための手段】
【００１４】
本発明は、組込み機器への適用に適しており、コンテンツの実行速度を向上させ、また、低消費電力を実現する技術を提供する。
【００１５】
本発明の情報処理装置は、コンテンツに含まれる複数のサブルーチンごとに、プロセッサで実行可能なネイティブコード、前記ネイティブコードの元となるＯＳに依存しない第１コード、前記第１コードを前記ネイティブコードへ変換する過程で生成される第２コードのうち、存在するコードの種類を管理するサブルーチン管理表を記憶するメモリと、前記第１コードをインタプリタ方式で実行するインタプリタ機能、及び前記第２コードをネイティブコードへ変換してから実行するＪＩＴコンパイル機能を備えた仮想マシンと、前記第１コードから前記第２コードを生成するプリコンパイル回路と、前記コンテンツの実行中に呼び出されたサブルーチンについて、前記サブルーチン管理表を参照した結果、ネイティブコードが存在するときは、該ネイティブコードがプロセッサで実行され、第２コードが存在するときは、該第２コードが前記仮想マシンのＪＩＴコンパイル機能で実行され、生成されたネイティブコードが前記メモリに格納され、又は第１コードが存在するときは、該第１コードが前記仮想マシンのインタプリタ機能で実行されるとともに、前記プリコンパイル回路で第２コードに変換され、該第２コードが前記メモリに格納されるように実行制御を行い、それらの制御によりサブルーチン実行する際に参照するコードの種類が変化したときは、変化後の種類が前記サブルーチン管理表に記録されるように記録制御を行うサブルーチン管理手段とを備えたことを特徴とする。
【００１６】
本発明の実施形態では、上記サブルーチン管理手段は、前記サブルーチンごとに所定の基準に基づいて定められる、第１コードを第２コードへ変換する優先度の高いサブルーチンから順に、その第１コードが第２コードに変換されるように前記実行制御を行う。
【００１７】
また別の実施形態では、前記メモリは、前記優先度に応じて、前記プリコンパイル回路の動作速度を定めた動作速度定義表を記憶し、さらに、前記プリコンパイル回路で処理される第１コードに対応するサブルーチンの優先度を用いて、前記動作速度定義表から動作速度を判断し、該動作速度に従って前記プリコンパイル回路が動作するように制御を行うプリコンパイル制御手段を備えたことを特徴とする。
【００１８】
前記優先度としては、前記コンテンツの実行中に呼び出されたサブルーチンごとの回数であり、又は前記コンテンツの実行中に各サブルーチンが呼び出された際のスタックフレームの数を所定の値から減じた値を採用することができる。または、前記優先度として、前記コンテンツに含まれる各サブルーチンの第１コードを第２コードへ変換するのに要する時間に基づいて、又は前記コンテンツの実行中に各サブルーチンが呼び出される頻度に基づいて、各サブルーチンの第１コード内に予め記述された値を採用することができる。
【００１９】
本発明におけるプリコンパイル制御手段は、前記プリコンパイル回路の動作速度を下げたとき、該プリコンパイル回路への供給電圧を、その動作を維持できる電圧値の範囲内で下げるように構成することができる。
【００２０】
本発明の実施形態では、前記プリコンパイル制御手段は、バス内のデータ伝送量又はプロセッサによる前記メモリへのアクセス頻度を監視し、前記データ伝送量又は前記アクセス頻度が所定の基準を超えている間、前記プリコンパイル回路の動作を停止するように構成してもよい。
【００２１】
また別の実施形態では、さらに、前記サブルーチン管理表の内容をサブルーチン管理表キャッシュとして記憶するキャッシュメモリを備え、前記サブルーチン管理手段は、前記サブルーチン管理表に替えて前記サブルーチン管理表キャッシュに基づいて前記実行制御及び前記記録制御を行い、所定のタイミングで、前記サブルーチン管理表と前記サブルーチン管理表キャッシュの間でデータの転送及び書き換えが行われるようにキャッシュ制御を行うことを特徴とする。
【００２２】
この実施形態においては、前記サブルーチン管理手段は、前記コンテンツの実行開始時には、実行対象のコンテンツに含まれるサブルーチンの情報が、前記優先度の高いものから順に、前記サブルーチン管理表から前記サブルーチン管理表キャッシュへ書き込まれ、前記コンテンツの実行中において、呼び出されたサブルーチンの情報が前記サブルーチン管理表キャッシュにない場合は、サブルーチン管理表キャッシュにある前記優先度の最も低いサブルーチンの情報が前記サブルーチン管理表へ書き戻され、前記呼び出されたサブルーチンの情報が前記サブルーチン管理表から前記サブルーチン管理表キャッシュへ書き込まれるように前記キャッシュ制御を行うように構成することができる。
【００２３】
本発明の実施形態では、前記第１コードは、スタックマシン用のコードであり、前記第２コードは、前記第１コードから生成されるレジスタマシン用のコードを含むことができる。
【００２４】
また別の実施形態では、前記第２コードは、前記サブルーチンの実行過程で呼び出される他のサブルーチンの第１コードを、呼び出し元のサブルーチンの第１コード内にインライン展開して成るコードを含んでもよい。
【００２５】
さらに別の実施形態では、前記メモリは、前記第１コードにおける不要な記述、文法上の瑕疵、又は誤記の修正方法を定めた修正辞書を記憶し、前記第２コードは、前記修正辞書に基づいて、前記第１コードを最適化したコードを含むことができる。
【００２６】
本発明におけるＪＩＴコンパイル機能は、前記第２コードの実行過程で呼び出される他のサブルーチンの第１コードのプリコンパイル結果である第２コードを、呼び出し元の第２コード内にインライン展開し、これをネイティブコードへ変換するように構成することができる。
【００２７】
本発明の実施形態では、前記メモリは、前記サブルーチンごとに複数のコンテンツとの対応関係を表すサブルーチン共用表を記憶し、前記サブルーチン管理手段は、前記優先度に替えて、前記サブルーチン共用表に基づいて、対応するコンテンツの数が多いサブルーチンから順に、その第１コードが第２コードに変換されるように前記実行制御を行うように構成することができる。
【００２８】
また別の実施形態では、前記サブルーチン管理手段は、前記優先度に替えて、前記コンテンツの実行中に呼び出されたサブルーチンのうち最後に呼び出されたサブルーチンから順に、その第１コードが第２コードに変換されるように前記実行制御を行うことができる。
【００２９】
さらに別の実施形態では、前記第１コードには、対応するサブルーチンの処理の内容を表す属性が予め記載されており、前記メモリは、前記属性ごとに前記第１コードから前記第２コードを生成する優先順位を定めた属性管理表を記憶し、前記サブルーチン管理手段は、前記コンテンツンの実行中に呼び出されたサブルーチンの第１コードに記載された属性を用いて前記属性管理表から前記優先順位を特定し、前記優先度に替えて、該優先順位に従って第１コードが第２コードに変換されるように前記実行制御を行うように構成してもよい。
【００３０】
またさらに別の実施形態では、前記コンテンツに対応する表示物を表示するディスプレイを備え、前記サブルーチン管理手段は、前記優先度に替えて、前記ディスプレイ上で、中央の表示物、最前面の表示物、又は最も大きい表示物に対応するコンテンツに含まれるサブルーチンの第１コードから優先的に第２コードが生成されるように前記実行制御を行うように構成してもよい。この場合には、前記ディスプレイ上に表示される矢印等の指示部を移動させ、及び前記表示物を前記指示部によって選択するための操作部をさらに備え、前記サブルーチン管理手段は、前記ディスプレイ上で、前記指示部と重っている表示物又は前記指示部によって選択された表示物に対応するコンテンツに含まれるサブルーチンの第１コードから優先的に第２コードが生成されるように前記実行制御を行うように構成してもよい。
【００３１】
本発明が実行対象として扱うコンテンツは、その一部若しくは全部がスクリプト若しくはJavaプログラムであってもよい。
【発明の効果】
【００３２】
本発明によれば、ネイティブコードへのコンパイルを高速化することによりコンテンツの実行速度を格段に向上させ、また、低消費電力処理を実現することができる。
【発明を実施するための最良の形態】
【００３３】
以下、本発明の実施例において、複数のサブルーチンを含んで構成されるコンテンツとして、Javaプログラムを携帯電話機で実行する方法を説明する。その説明において、音声通話機能、メール送受信機能、スケジュール管理機能、及び撮像機能など、携帯電話機が通常備える機能については、図示及び説明を省略する。また、一般に、オブジェクト指向プログラミングでは、サブルーチンに相当するプログラムをメソッドと呼ぶことがあるが、ここではプログラミングの指向性にかかわらず、いずれもサブルーチンと呼ぶこととする。
［実施例１］
【００３４】
図１は、本発明を適用した携帯電話機１０１の基本構成を示す。
携帯電話機１０１は、バス１０３を解して互いに接続された各種のハードウェア１０５、並びにこれを制御するプログラム及び携帯電話機１０１で実行される複数のコンテンツ１０７等の各種のソフトウェア１０９を含んで構成される。
【００３５】
具体的には、携帯電話機１０１は、
ユーザによる操作の受け付け、画面表示、通信、及び入出力等の機能を有する周辺機能部１１１と、
ソフトウェア１０９に含まれる再生アプリ１２５等の各種のプログラムを実行するプロセッサ１１３と、
携帯電話機１０１の電源遮断中においても、ソフトウェア１０９の一部又は全部のデータを記録する不揮発性記録媒体１１５と、
起動中のソフトウェア１０９に関するデータを格納するメモリ１１７と、
Javaプログラムを構成する、プロセッサ１１３で実行可能なネイティブコードの元となるＯＳに依存しないJavaバイトコード（以下「第１コード」という。）１１９を、ネイティブコードに変換する過程で生成されるコード（以下「第２コード」という。）１２１に変換する第１コード処理部１２３と
を含んで構成される。
【００３６】
周辺機能部１１１としては、例えば、操作ボタン、タッチパネル、ディスプレイ、マイク、スピーカー、及びネットワーク接続手段を採用することができる。
【００３７】
不揮発性記録媒体１１５としては、例えば、フラッシュメモリ、ハードディスク読取装置（HDD）、Magnetoresistive Random Access Memory（MRAM）、Ferroelectric Random Access Memory（FeRAM）等の記録媒体を採用することができる。メモリ１１７としては、Static Random Access Memory（SRAM）、Dynamic Random Access Memory（DRAM）、MRAM等の記録媒体を採用することができる。これらのハードウェアは、製造時点における価格、記憶容量、消費電力、読み書きの速度等の条件を考慮して選ぶのがよい。
【００３８】
携帯電話機１０１は、ハードウェア１０５を制御するプログラム及び携帯電話機１０１で実行されるJavaプログラム等のソフトウェア１０９をメモリ１１７上に持つ。具体的には、ソフトウェア１０９には、Javaプログラム等のコンテンツ１０７（後述の第１コード１１９を含む。）、再生アプリ１２５、及びＯＳ１２７、並びにコンテンツ１０７の実行時に適時参照される三種類の表として、コンテンツ管理表２０１、サブルーチン管理表２０３、及び動作速度定義表３０１が含まれる。
【００３９】
ソフトウェア１０９には、このほかにも、後述する、第１コード処理部１２３の処理により生成される第２コード１２１、及び仮想マシン１２９の処理により生成されるネイティブコード１３１が含まれる。さらに、サブルーチンのコードの種類（第１コード１１９、第２コード１２１、ネイティブコード１３１）に応じた処理命令や上記サブルーチン管理表２０３等の表の更新命令等の各種命令が組み合わされたサブルーチン管理プログラム１３３と、第１コード１１９から第２コード１２１を生成する後述のプリコンパイル回路１７３の制御命令等の各種命令が組み合わされたプリコンパイル制御プログラム１３５とを含む。
【００４０】
プロセッサ１１３は、サブルーチン管理プログラム１３３を実行することで、後述のサブルーチン管理回路１７１を制御し、サブルーチン管理回路１７１とともにサブルーチン管理手段を構成する。プロセッサ１１３は、また、プリコンパイル制御プログラム１３５を実行することで、プリコンパイル制御回路１７５を制御し、プリコンパイル制御回路１７５とともにサブルーチン制御手段を構成する。  コンテンツ１０７は、Javaプログラムを実行するのに必要なプログラム及びデータとして、例えば、第１コード１１９、各種バイナリデータ１４１、及びテキストデータ１４３により構成される。コンテンツ１０７の種類としては、ゲーム、動画、アニメーション、文書編集ソフト、及び表計算ソフトなど、機能の高低を問わず、様々なアプリケーションを採用することができる。
【００４１】
第１コード１１９は、コンテンツ１０７を実行する携帯電話機１０１のアーキテクチャ（例えば、ＯＳ）に依存しない形式のプログラムコードであり、複数のサブルーチンで構成される。なお、本実施例でいうサブルーチンには、メインルーチンが含まれる。Javaプログラムの第１コード１１９は、携帯電話機１０１のプロセッサ１１３が実行できる形式（ネイティブコード１３１）ではなく、アーキテクチャに依存しない形式にコンパイルされており、実行時には、携帯電話機１０１のプロセッサ１１３に対応する形式に再度コンパイルする必要がある。
【００４２】
各種バイナリデータ１４１は、動画、静止画、音声、ベクトル、３Ｄ描画データ、各種設定データ、及び文字列を含むことができる。テキストデータ１４３は、文字列形式のデータであり、例えばＸＭＬ等の言語を用いれば、テキストデータを直接組み込んだ状態で、各種データを表現することができる。
【００４３】
再生アプリ１２５は、コンテンツ１０７を実行するブラウザや各種メディアプレイヤー等のプログラムである。この再生アプリ１２５は、コンテンツ１０７に含まれる動画、音声、静止画などのデータを再生する各種データ再生部１５１と、第１コード１１９及び第２コード１２１を実行するコード実行部１５３（仮想マシン）１５３、そしてこれらの機能がＯＳ１２７及びハードウェア１０５にアクセスする際に利用するドライバＩ／Ｆ１５５を含んで構成されている。
【００４４】
コード実行部１５３（仮想マシン）１５３は、インタプリタ１５７及びＪＩＴコンパイラ１５９で構成され、後述する条件に応じていずれかを起動するとともに、必要に応じて第１コード処理部１２３にアクセスする。
【００４５】
インタプリタ１５７は、コンテンツ１０７の実行中に呼び出されたサブルーチンについて、その第１コード１１９を解析してネイティブコード１３１へ変換しながらプロセッサ１１３に順次実行させる処理を、例えば、コード単位で逐次実行するプログラムである。
【００４６】
ＪＩＴコンパイラ１５９は、コンテンツ１０７の実行中に呼び出されたサブルーチンについて、その第２コードをネイティブコードへ一旦変換してから、そのネイティブコード１３１をＣＰＵに実行させる処理を、例えば、サブルーチン単位又はループ処理単位で実行するプログラムである。
【００４７】
ドライバＩ／Ｆ１５５は、コード実行用Ｉ／Ｆ１６１及びデータ再生用Ｉ／Ｆ１６３で構成されている。コード実行用Ｉ／Ｆ１６１は、ハードウェア１０５の第１コード処理部１２３へアクセスするために利用される。データ再生用Ｉ／Ｆ１６３は、各種データ再生部１５１がコンテンツデータを再生する際に各種ハードウェア１０５へアクセスするために利用される。
【００４８】
ＯＳ１２７は、携帯電話機１０１等の組込み機器向けの基本ソフトウェアである。ＯＳ１２７の例としては、Linux、WindowsEmbedded、Symbian等のソフトウェアが挙げられる。また、ＯＳ１２７は、再生アプリ１２５がハードウェア１０５にアクセスするために必要なドライバ１６５を搭載している。
【００４９】
ドライバ１６５は、コード実行用ドライバ１６７及びデータ再生用ドライバ１６９で構成される。コード実行用ドライバ１６７は、コンテンツ１０７の実行時に再生アプリ１２５がハードウェア１０５へアクセスするための機能を提供する。データ再生用ドライバ１６９は、コンテンツ１０７の実行以外のデータ処理時に、再生アプリ１２５がハードウェア１０５へアクセスするための機能を提供する。
【００５０】
コード実行部１５３のインタプリタ１５７及びＪＩＴコンパイラ１５９は、必要に応じて、コード実行用Ｉ／Ｆ１６１を介してコード実行用ドライバ１６７へアクセスし、各種ハードウェア１０５を呼び出すことができる。その際、必要なハードウェア１０５が存在しなければ、ソフトウェアエミュレータを起動し、必要な機能を再現させることができる。従って、ハードウェア１０５では実現されない他のハードウェアの機能が必要になる場合は、ソフトウェア１０９として、ソフトウェアエミュレータを備えておくのがよい。
【００５１】
コンテンツ管理表２０１は、各コンテンツ１０７のＩＤとコンテンツ名を管理する。サブルーチン管理表２０３は、コンテンツ１０７を構成する各サブルーチンについて、第１コード１１９、第２コード１２１、及びネイティブコード１３１のうちで存在するコードの種類や、呼び出され（参照され）た回数、及び実行開始位置を表すメモリアドレス（先頭アドレス）等の情報を管理する。動作速度定義表３０１は、第１コード処理部１２３による処理の制御方法を定める。これらの表の詳細については後述する。
【００５２】
第１コード処理部１２３は、
サブルーチン管理プログラム１３３を実行するプロセッサ１１３の制御のもと、コンテンツ１０７を構成する各サブルーチンについて、第１コード、第２コード、及びネイティブコードのうち、存在するコードの種類や、呼び出された回数、及び先頭アドレス等の情報を、サブルーチン管理表２０３からキャッシュして管理するとともに、サブルーチンのコードの種類に応じた処理が実行されるように制御を行うサブルーチン管理手段を構成するサブルーチン管理回路１７１と、
第１コード１１９を第２コード１２１へ変換するプリコンパイル回路１７３と、
プリコンパイル制御プログラム１３５を実行するプロセッサ１１３の制御のもと、プリコンパイル回路１７３の動作を制御するプリコンパイル制御手段を構成するプリコンパイル制御回路１７５と
を含んで構成される。
【００５３】
サブルーチン管理回路１７１は、上記の情報を格納し、その内容を高速に検索するための記憶装置としてキャッシュメモリ（例えば、連想メモリ）１７７を備えている。本実施例では、キャッシュメモリ１７７上に格納される上記の情報をサブルーチン管理表キャッシュと呼ぶ。サブルーチン管理表とサブルーチン管理表キャッシュとの間では、所定のタイミングで、内容の書き換え又は入れ替えが行われる。これにより、サブルーチン管理表キャッシュには、少なくともメモリ１１７上に格納されるサブルーチン管理表２０３の情報の一部若しくは全部が格納される。サブルーチン管理表キャッシュの内容については後述する。
【００５４】
また、サブルーチン管理回路１７１は、コンテンツ１０７の実行中に呼び出されたサブルーチンについて、サブルーチン管理表キャッシュ２０５を参照した結果に応じて、以下の制御を行う。
【００５５】
（１）ネイティブコード１３１が存在するときは、そのネイティブコード１３１がプロセッサ１１３で実行されるように実行制御を行う。具体的には、実施例１では、呼び出されたサブルーチンのネイティブコード１３１の先頭アドレスをプロセッサ１１３に返す。
【００５６】
（２）第２コード１２１が存在するときは、その第２コード１２１が仮想マシン１５３のＪＩＴコンパイラ１５９で実行され、生成されたネイティブコード１３１がメモリ１１７に格納されるように実行制御を行う。具体的には、実施例１では、呼び出されたサブルーチンのコードの種類（第２コード１２１）をプロセッサ１１３に通知する。これにより、プロセッサ１１３が、ＪＩＴコンパイラ１５９を動作させ、生成されるネイティブコード１３１をメモリ１１７へ格納させる。また、メモリ１１７への格納については、サブルーチン管理回路１７１が行ってもよい。
【００５７】
（３）第１コード１１９が存在するときは、その第１コード１１９が仮想マシン１５３のインタプリタ１５７で実行されるとともに、プリコンパイル回路１７３で第２コード１２１に変換され、その第２コード１２１がメモリ１１７に格納されるように実行制御を行う。具体的には、実施例１では、呼び出されたサブルーチンのコードの種類（第１コード１１９）をプロセッサ１１３に通知する。これにより、プロセッサ１１３が、インタプリタ１５７を動作させる。また、サブルーチン管理回路１７１は、プリコンパイル制御回路１７５にプリコンパイル回路１７３を制御させ、プリコンパイル回路１７３が呼び出されたサブルーチンの第１コード１１９から第２コード１２１を生成させる。生成された第２コード１２１のメモリ１１７への格納は、サブルーチン管理回路１７１、プリコンパイル制御回路１７５、及びプリコンパイル回路１７３のどれが行ってもよい。
【００５８】
さらに、上記（２）又は（３）の制御により、サブルーチン実行時の実行対象コードの種類が変化し（第１コード１１９が第２コード１２１に、第２コード１２１がネイティブコード１３１に変化し）たときは、変化後の種類がサブルーチン管理表キャッシュ２０５に記録されるように記録制御を行う。具体的には、実施例１では、サブルーチン管理回路１７１が、サブルーチン管理表キャッシュ２０５を書き換えることとする。
【００５９】
プリコンパイル回路１７３は、第１コード１１９をネイティブコード１３１にコンパイルする際に生成される第２コード１２１を得るための手段である。プリコンパイル回路１７３によるプリコンパイルにより生成される第２コード１２１とは、例えば、以下のとおりである。
【００６０】
（１）スタックマシン用の第１コード１１９から生成されるレジスタマシン用のコード
（２）サブルーチンの実行過程で呼び出される他のサブルーチンの第１コード１１９を、呼び出し元のサブルーチンの第１コード１１９内にインライン展開して成るコード
（３）メモリ１１７上に、第１コード１１９における不要な記述、文法上の瑕疵、又は誤記の修正方法を定めた修正辞書を記憶させておき、その修正辞書に基づいて第１コードを最適化したコード
ただし、上記以外の方法であっても、プリコンパイルの従来の方法があれば、それをプリコンパイル回路１７３によるプリコンパイルに適用することも勿論可能である。
【００６１】
図２は、メモリ１１７に格納されるコンテンツ管理表２０１及びサブルーチン管理表２０３と、キャッシュメモリ１７７に格納されるサブルーチン管理表キャッシュ２０５の構成を示す。以下、これらの表の内容について説明する。
【００６２】
コンテンツ管理表２０１は、コンテンツＩＤ欄２０７及びコンテンツ名欄２０９で構成される各種の項目を有する。コンテンツＩＤ欄２０７には、携帯電話機１０１内に保存されているコンテンツ１０７を識別するコンテンツＩＤが格納される。コンテンツ名欄２０９には、各コンテンツの名前が格納される。コンテンツ管理表２０１は、各コンテンツのＩＤと名前を管理するのに用いられる。
【００６３】
コンテンツＩＤの付与方法としては、例えば、携帯電話機１０１で利用可能なコンテンツダウンロードサービス等の各種サービス内で共通のＩＤを、サービス提供者が一元的に定める方法と、携帯電話機１０１内でのみ通用するＩＤを、携帯電話機１０１が独自に又はサービス提供者が付与する方法がある。後者の場合、例えば、コンテンツをダウンロードした順に、通し番号を付す方法がある。
【００６４】
サブルーチン管理表２０３は、各サブルーチンのコンパイルの状況等に応じた処理を選択する機能など、携帯電話機１０１の基本的な機能を実現するのに必要な基本構成２１１と、ハッシュ値管理等の付随的な機能を実現するために実装される拡張構成２１３を含んで構成される各種の項目を有する。
【００６５】
サブルーチン管理表２０３の基本構成２１１は、コンテンツＩＤ欄２１５、サブルーチンＩＤ欄２１７、ＪＩＴフラグ欄２１９、優先度欄２２１、キャッシュ欄２２３、第１コードアドレス欄２２５、処理アドレス欄２２７で構成される各種の項目を有する。
【００６６】
コンテンツＩＤ欄２１５には、コンテンツ管理表２０１で管理するコンテンツ１０７ごとのコンテンツＩＤが格納される。
【００６７】
サブルーチンＩＤ欄２１７には、コンテンツ１０７に含まれる各サブルーチンを識別するＩＤが格納される。このＩＤの付与方法としては、携帯電話機１０１で利用可能なコンテンツダウンロードサービス等の各種サービス内で共通のＩＤを、サービス提供者が一元的に定める方法と、携帯電話機１０１内でのみ通用するＩＤを、携帯電話機１０１が独自に又はサービス提供者が付与する方法がある。後者の場合、例えば、コンテンツのダウンロード時に若しくはコンテンツの最初の実行時に、サブルーチンの先頭から通し番号若しくはランダムな番号を付す方法がある。
【００６８】
ＪＩＴフラグ欄２１９には、各サブルーチンのコンパイル状況（存在するコードの種類）を表すＪＩＴフラグが格納される。ＪＩＴフラグの種類及びその意味は、以下のとおりである。
【００６９】
（１）yes：ＪＩＴコンパイル済みであり、ネイティブコード１３１が存在する
（２）pre：プリコンパイル済みであり、第２コード１２１が存在する
（３）no：コンパイルされておらず、第１コード１１９が存在する
（４）req：コンパイルされておらず（ただし、プロセッサ１１３からコンパイルの要求があった）、第１コード１１９が存在する。
【００７０】
そして、コンテンツ１０７の実行中にサブルーチンが呼び出されたときは、各サブルーチンのＪＩＴフラグのステータスに応じて、以下の処理が行われる。
【００７１】
（１）yes：プロセッサ１１３が、参照先のネイティブコードへジャンプする。また、２回目以降、呼び出し元が呼び出し先へ直接アクセスできるようにするため、呼び出し元のコードに呼び出し先のアドレスを記入する
（２）pre：プロセッサ１１３が、ＪＩＴコンパイラ１５９を呼び出す。また、コンパイル完了後、生成されたネイティブコードへジャンプする
（３）no：プロセッサ１１３が、インタプリタを呼び出す
（４）req：プロセッサ１１３が、インタプリタを呼び出す。これとは別に、サブルーチン管理回路１７１が、プリコンパイル回路１７３に、その第１コード１１９から第２コード１２１を生成させる。
【００７２】
優先度欄２２１には、サブルーチン管理表２０３からサブルーチン管理表キャッシュ２０５に転送するサブルーチンの情報（以下「エントリ」という。）を決定するための判断材料、及びプリコンパイル回路１７３の制御方法を決定するための判断材料として用いられる、各サブルーチンのプリコンパイルの優先度が格納される。この実施例では、優先度として、コンテンツ１０７の実行中に呼び出されたサブルーチンごとの回数（参照回数）を用いる。従って、各サブルーチンが呼び出されるたびに、優先度に１が加算される。
【００７３】
優先度を扱う際の注意点として、メモリ１１７及びキャッシュメモリ１７７のいずれにおいても、格納できる優先度の範囲（桁数）が有限であることが挙げられる。対処方法としては、格納する優先度の上限を決めておき、いずれかのサブルーチンの優先度がその上限に達したら、全てのサブルーチンの優先度を所定の基準で小さくするのがよい。例えば、各優先度から一定の値を減算する方法や各優先度を一定の値で除算する方法を適用することができる。この優先度の調整処理は、処理のオーバーヘッドを軽減するため、例えば、プロセッサ１１３がアイドル時に行うのがよい。
【００７４】
キャッシュ欄２２３は、サブルーチン管理表キャッシュ２０５への各エントリのキャッシュ状況を管理するため、サブ項目として、ステート欄２３１と回数欄２３３を持つ。ステート欄２３１には、各エントリがサブルーチン管理表キャッシュ２０５に存在するかどうかを表すフラグが格納される。”yes”の場合は、サブルーチン管理表キャッシュ２０５にエントリが存在し、”no”の場合は、サブルーチン管理表キャッシュ２０５にエントリが存在しないことを表す。回数欄２３３には、各エントリがキャッシュメモリ１７７上に読み込まれた回数が格納される。
【００７５】
第１コードアドレス欄２２５には、各サブルーチンの第１コードの先頭アドレスが格納される。
【００７６】
処理アドレス欄２２７には、ネイティブコード１３１があるときはネイティブコード１３１の実行開始位置を表すメモリアドレス（先頭アドレス）、第２コード１２１があるときは第２コード１２１の先頭アドレスが格納される。
【００７７】
サブルーチン管理表２０３は、サブルーチン管理プログラム１３３を実行するプロセッサ１１３の制御のもとでサブルーチン管理回路１７１によって、変更内容の書き換えが行われる。サブルーチン管理回路１７１は、この処理のほかに、後述する各種機能を提供する。
【００７８】
次に、サブルーチン管理表２０３の拡張構成２１３について説明する。この拡張構成２１３には、ハッシュ値管理表２３７、第１コードサイズ管理表２３９、ダウンロード元管理表２４１、サブルーチン共用表２４３の４種類の表がある。これらの表は、必要な機能に応じて適宜組み合わせて利用される。
【００７９】
ハッシュ値管理表２３７は、サブルーチンＩＤ欄２４５とハッシュ値欄２４７で構成される各種の項目を有する。
【００８０】
サブルーチンＩＤ欄２４５には、各サブルーチンのサブルーチンＩＤが格納される。ハッシュ値欄２４７には、各サブルーチンの第１コードに付与されるハッシュ値が格納される。このハッシュ値の生成方法としては、例えば、それぞれの第１コード１１９全文に基づいてハッシュ関数を用いて生成する方式、又は各第１コードの改変を検出できる最小限の間隔で抽出した１バイトの値に基づいてハッシュ関数を用いて生成する方式が適用可能である。上記改変を検出できる最小限の間隔は、例えば、数バイトから数十バイトの間隔である。このハッシュ値は、コンテンツ１０７を提供するサーバ側で付与してもよいし、携帯電話機１０１内で、上記の方法により付与するように構成してもよい。
【００８１】
第１コードサイズ管理表２３９は、ブルーチンＩＤ欄２５１と第１コードサイズ欄２５３で構成される各種の項目を有する。サブルーチンＩＤ欄２５１には、各サブルーチンのサブルーチンＩＤが格納される。第１コードサイズ欄２５３には、各サブルーチンの第１コードのサイズが格納される。
【００８２】
ダウンロード元管理表２４１は、サーバＵＲＬ欄２５５、サブルーチンＩＤ欄２５７、及びサーバ通知欄２５９で構成され各種の項目を有し、サブルーチンを含むコンテンツ１０７のダウンロード元であるサーバに関する情報を管理する。
【００８３】
サーバＵＲＬ欄２５５には、ダウンロード元であるサーバのＵＲＬが格納される。サブルーチンＩＤ欄２５７には、各サブルーチンのサブルーチンＩＤが格納される。サーバ通知欄２５９には、各サブルーチンが携帯電話機１０１に存在すること（たとえば、ダウンロードが完了したこと）をサーバに通知したか否かを示すフラグが格納される。このフラグが、“ｙｅｓ”の場合は通知済み、“ｎｏ”の場合は未通知であることを示す。
【００８４】
サブルーチン共用表２４３は、サブルーチンＩＤ欄２６１、共用数欄２６３、及び対応コンテンツＩＤ欄２６５で構成される各種の項目を有し、各サブルーチンを共用している複数のコンテンツ１０７を把握するために利用される。
【００８５】
サブルーチンＩＤ欄２６１には、各サブルーチンのサブルーチンＩＤが格納される。共用数欄２６３には、各サブルーチンを利用しているコンテンツの数が格納される。対応コンテンツＩＤ欄２６５には、各サブルーチンを利用するコンテンツのコンテンツＩＤが格納される。
【００８６】
サブルーチン共用表２４３は、コンテンツのダウンロード時及び削除時に、そのコンテンツに含まれる各サブルーチンが他のコンテンツで利用されているかどうかがサブルーチン管理回路１７１によって判断され、更新される。
【００８７】
サブルーチン管理表キャッシュ２０５は、コンテンツＩＤ欄２７１、サブルーチンＩＤ欄２７３、ＪＩＴフラグ欄２７５、実行アドレス欄２７７、優先度欄２７９、及びキャッシュアウトカウント欄２８１で構成される各種の項目を有する。このサブルーチン管理表キャッシュ２０５は、サブルーチン管理表２０３の内容の一部又は全部を含んで構成されており、所定のタイミングで、サブルーチン管理手段を構成するサブルーチン管理回路１７１によって、サブルーチン管理表２０３との間でデータの入れ替え及び書き換えが行われる。
【００８８】
コンテンツＩＤ欄２７１には、各サブルーチンに対応するコンテンツＩＤが格納される。サブルーチンＩＤ欄２７３には、各サブルーチンのサブルーチンＩＤが格納される。ＪＩＴフラグ欄２７５には、各サブルーチンのＪＩＴが格納される。実行アドレス欄２７７には、ＪＩＴフラグの種類、すなわち各サブルーチンのコードの種類に応じて、以下のアドレスが格納される。
【００８９】
（１）yes：ネイティブコードの先頭アドレス
（２）pre：第２コードの先頭アドレス
（３）no，req：第１コードの先頭アドレス
ＪＩＴフラグが変化した場合、上記の基準に基づいて、サブルーチン管理回路１７１によって、実行アドレス欄２７７が書き換えられる。
【００９０】
優先度欄２７９には、各サブルーチンの優先度（参照回数）が格納され、各サブルーチンが呼び出されるたびに、サブルーチン管理回路１７１によって１が加算される。キャッシュアウトカウント欄２８１には、優先度と同じ基準で増加する値であるキャッシュアウトカウントが格納される。
【００９１】
また、実施例では、優先度はコンテンツが終了しても値が保持されるが、キャッシュアウトカウントは、サブルーチン管理表２０３へのエントリの書き戻し時に値が０にクリアされるという相違点を持たせた。これにより、優先度は、１つのコンテンツ１０７内における各サブルーチンのプリコンパイルすべき順番を表し、キャッシュアウトカウントは、サブルーチン管理表キャッシュ２０５内における各サブルーチンのプリコンパイルすべき順番を表すことができる。
【００９２】
キャッシュアウトカウントをコンテンツ終了時まで保持させたい場合、サブルーチン管理表２０３の基本構成２１１内にキャッシュアウトカウントを記録する欄を別途設け、サブルーチン管理表キャッシュ２０５から書き戻されたエントリのキャッシュアウトカウントを管理すればよい。なお、キャッシュアウトカウントは、０以下には減算されず、一定の値を超えると加算されない。
【００９３】
図３は、プリコンパイル回路１７３の動作速度を定める動作速度定義表３０１の一例を示す。この表は、プリコンパイル対象のサブルーチンの第１コードを処理する際に、プリコンパイル制御回路１７５がプリコンパイル回路１７３の動作速度を制御するために利用される。
【００９４】
動作速度定義表３０１は、動作速度欄３０３、優先度範囲欄３０５、及びサブルーチン定義値欄３０７で構成される各種の項目を有する。
【００９５】
動作速度欄３０３には、プリコンパイル回路１７３の動作速度を表す値が格納される。本実施例では、この値が大きいほど、プリコンパイル回路１７３が高速で動作することを意味する。
【００９６】
優先度範囲欄３０５には、各動作速度が適用されるサブルーチンの優先度の範囲が格納される。例えば、優先度（実施例では参照回数）が０〜５０の範囲内にあるサブルーチンの第１コードは、対応する動作速度“１”で動作するプリコンパイル回路１７３によってプリコンパイルされる。
【００９７】
サブルーチン定義値欄３０７には、例えば、以下の（１）〜（３）の情報に基づいて、各サブルーチンの第１コード１１９の生成時に付与される値が格納される。
【００９８】
（１）コンテンツ１０７に含まれる各サブルーチンの第１コード１１９を第２コード１２１へ変換するのに要する時間
（２）コンテンツ１０７に含まれる各サブルーチンの第１コード１１９をネイティブコード１３１へ変換するのに要する時間
（３）コンテンツ１０７の実行中に各サブルーチンが呼び出される頻度。
【００９９】
上記の情報に基づいて付与されるサブルーチン定義値は、例えば、Javaバイトコード等の第１コード１１９を生成する際に用いるコンパイラの機能によって、第１コード１１９内に記述することができる。例えば、任意の箇所にコメントとして埋め込んだり、ヘッダ情報として埋め込むことができる。実施例では、コンテンツ１０７の実行中に呼び出されたサブルーチンの第１コード１１９にサブルーチン定義値が記述されていれば、プリコンパイル回路１７３の動作速度をサブルーチン定義値で判断し、記述されていなければ優先度で判断することとしている。なお、サブルーチン定義値として“３”が付与されているサブルーチンの第１コード１１９は、動作速度“３”で動作するプリコンパイル回路１７３によってプリコンパイルされる。
【０１００】
動作速度定義表３０１を作成する際には、例えば、サブルーチンの優先度及びサブルーチン定義値の値が大きくなるに連れて、プリコンパイル回路１７３の動作速度が大きくなるようにするのがよい。具体的には、サブルーチンの優先度又はサブルーチン定義値の値が大きくなるに連れて、プリコンパイル回路１７３のクロック（動作周波数）を増加させる方法を採用することができる。また、サブルーチンの優先度又はサブルーチン定義値の値が小さくなるに連れて、プリコンパイル回路１７３のクロックを大きな値で分周する方法を採用することができる。
【０１０１】
そして、サブルーチンの優先度又はサブルーチン定義値に基づいて決定される動作速度が小さければ、プリコンパイル制御回路１７５がプリコンパイル回路１７３を低速で動作させることにより、消費電力を低く抑えることができる。これに加えて、プリコンパイル回路１７３の動作速度を小さくするだけでなく、プリコンパイル回路１７３の動作を維持できる電圧値の範囲内で供給電圧を下げることにより、消費電力をさらに低く抑えることができる。
【０１０２】
なお、本実施例では、プリコンパイル回路１７３の動作速度を決定するための判断材料として、サブルーチンごとの優先度とサブルーチン定義値を採用しているが、いずれか一方だけを、サブルーチンの第１コード１１９を第２コード１２１へ変換する優先度として採用し、その値によって動作速度を判断するように構成してもよい。
【０１０３】
図４は、コンテンツ１０７の実行時におけるメモリ１１７、不揮発性記録媒体１１５、キャッシュメモリ１７７の構成、及びこれらを利用したハードウェア１０５の基本動作を示す。
【０１０４】
メモリ１１７には、コンテンツ１０７、再生アプリ１２５、ＯＳ１２７、第２コード１２１、ネイティブコード１３１、サブルーチン管理表２０３、コンテンツ管理表２０１、動作速度定義表３０１、サブルーチン管理プログラム１３３、及びプリコンパイル制御プログラム１３５が格納されており、携帯電話機１０１の動作時に適宜参照され又は実行される。この図では、コンテンツ１０７として、Ａコンテンツ１０７ａ，Ｂコンテンツ１０７ｂ等の複数のコンテンツが格納されている状態を示す。また、メモリ１１７上のこれらのデータのうち、第２コード１２１及びネイティブコード１３１以外のデータについては、携帯電話機１０１の起動時及びコンテンツ１０７の起動時に、不揮発性記録媒体１１５からメモリ１１７上にロードされる。
【０１０５】
キャッシュメモリ１７７上には、サブルーチン管理表２０３の一部又は全部を含んで構成されるサブルーチン管理表キャッシュ２０５が格納されている。
【０１０６】
不揮発性記録媒体１１５には、ＯＳイメージ４０１、再生アプリ１２５、コンテンツ１０７、その他のアプリ／データ４０３、サブルーチン管理プログラム１３３、及びプリコンパイル制御プログラム１３５等のデータが保存されている。これらのデータは、例えば、携帯電話機１０１の起動時やコンテンツ１０７の起動時等のタイミングで、メモリ１１７上に読み込まれ、携帯電話機１０１の電源遮断時やコンテンツ１０７の実行終了時等のタイミングで、メモリ１１７から変更箇所が書き戻される。
【０１０７】
次に、第１コード処理部１２３の基本動作について説明する。まず、コンテンツ１０７の実行時にサブルーチンの呼び出しが発生すると、プロセッサ１１３がサブルーチン管理表キャッシュ２０５を参照する。サブルーチン管理回路１７１は、これに応じてサブルーチン管理表キャッシュ２０５内を検索し、呼び出し先のサブルーチンの情報をプロセッサ１１３に返す。プロセッサ１１３は、その情報に基づいて処理を実行する。
【０１０８】
また、サブルーチン管理回路１７１は、サブルーチン管理表キャッシュ２０５を更新し、プリコンパイル制御回路１７５へ更新を通知する。
【０１０９】
プリコンパイル制御回路１７５は、この更新内容とシステムの状態などを判断して、プリコンパイル回路１７３に、特定の第１コード１１９をプリコンパイルさせ、生成された第２コード１２１をメモリ１１７に保存させる。
【０１１０】
なお、第２コード１２１は、後述するタイミングで、再生アプリ１２５内のＪＩＴコンパイラ１５９によってコンパイルされ、ネイティブコード１３１としてメモリ１１７上に格納される。
【０１１１】
図５は、コンテンツ１０７の実行開始時におけるプロセッサ１１３及びサブルーチン管理回路１７１の処理のフローチャートを示す。携帯電話機１０１で、ユーザが操作ボタン等の周辺機能部１１１を操作するなど、何らかのきっかけによりコンテンツ１０７の実行が指示されると、プロセッサ１１３がサブルーチン管理回路１７１に本処理を要求し、これにより本処理が開始する。
【０１１２】
まず、サブルーチン管理表キャッシュ２０５から、実行するコンテンツ１０７のコンテンツＩＤに対応しないエントリをサブルーチン管理表２０３へ書き戻する（ＳＴ５０１）。なお、実行対象のコンテンツ１０７のほかに、別のコンテンツを実行していなかった場合、サブルーチン管理表キャッシュ２０５にはエントリが存在しないと思われるため、このステップを省略することができる。
【０１１３】
次に、サブルーチン管理表２０３から、実行するコンテンツ１０７のコンテンツＩＤに対応するエントリのうち、サブルーチン管理表キャッシュ２０５に存在しないものを、優先度の高いものから順に、サブルーチン管理表キャッシュ２０５に転送する（ＳＴ５０２）。
【０１１４】
そして、コンテンツ１０７の実行開始時に実行されるサブルーチン（例えば、メインルーチン）のサブルーチンＩＤを、コンテンツ１０７から取得する（ＳＴ５０３）。
【０１１５】
ＳＴ５０３の後、プロセッサ１１３及び第１コード処理部１２３によって実行されるサブルーチン管理表検索・実行処理が開始する（ＳＴ５０４）。
【０１１６】
なお、携帯電話機１０１でコンテンツ１０７を初めて実行する場合において、サブルーチン管理表２０３内の優先度欄２２１の各エントリの値が“０”のときは、ＳＴ５０２の処理として、実行対象のコンテンツ１０７内で予め決めておいたサブルーチンのエントリをサブルーチン管理表キャッシュ２０５に転送すればよい。例えば、コンテンツ１０７に含まれるサブルーチンの先頭のエントリから順に所定の数のエントリを転送することができる。この場合、第１コード１１９の生成時に、呼び出し関係のあるサブルーチン同士をコンテンツ１０７内で隣接させておくことで、最初の実行においても効率的にサブルーチンの呼び出しが行えるようになり、キャッシュ効率が向上する。
【０１１７】
図６は、プロセッサ１１３及びサブルーチン管理回路１７１によるサブルーチン管理表検索・実行処理（図５のＳＴ５０４）のフローチャートを示す。この処理では、サブルーチンの呼び出しが発生したときに、サブルーチン管理表２０３及びサブルーチン管理表キャッシュ２０５から該当するサブルーチンの情報を抽出して処理方式を選択し、その処理方式に応じて各コードが実行される。
【０１１８】
まず、サブルーチン管理回路１７１は、サブルーチンの呼び出しが発生すると、サブルーチンＩＤを用いて、該当するサブルーチンをサブルーチン管理表キャッシュ２０５内で検索し（ＳＴ６０１）、該当するエントリが存在するかどうかを判断する（ＳＴ６０２）。この検索処理は、プロセッサ１１３が実行しても良いが、実施例のように、サブルーチン管理回路１７１が実行する構成にすれば、検索が終了するまでの間、プロセッサ１１３はＩ／Ｏ等の他の処理を実行することが可能となる。
【０１１９】
サブルーチン管理回路１７１は、検索の結果、対応するエントリが存在しなければ（ＳＴ６０２の判断が“Ｎ”の場合）、後述するサブルーチン管理表キャッシュ更新処理を実行し（ＳＴ６０３）、ＳＴ６０２へ戻る。該当するエントリが存在すれば（ＳＴ６０２の判断が”Ｙ”の場合）、エントリのキャッシュアウトカウントに“１”を加算し（ＳＴ６０４）、そのエントリの優先度に“１”を加算する（ＳＴ６０５）。このキャッシュアウトカウントと優先度の加算処理は、プロセッサ１１３で実行されるように構成してもよい。
【０１２０】
次に、サブルーチン管理回路１７１は、エントリからＪＩＴフラグの情報を抽出し（ＳＴ６０６）、その値に応じて処理を分岐する（ＳＴ６０７）。ＪＩＴフラグが“yes”の場合、サブルーチン管理表キャッシュ２０５から、対応するエントリの実行アドレスとして、サブルーチンのネイティブコード１３１の先頭アドレスを取得し、プロセッサ１１３へ渡す。これにより、プロセッサ１１３は、実行対象のサブルーチンのネイティブコード１３１へジャンプし（ＳＴ６０８）、このネイティブコードを実行する（ＳＴ６０９）。ＳＴ６０８又はＳＴ６０９の処理を行うとき、２回目以降の呼び出しを高速化するため、呼び出し元のコードがこのサブルーチンのネイティブコード１３１へジャンプできるように、呼び出し元のコードを変更してジャンプ先のアドレスを書き加えるように構成してもよい。このコード書き換え処理は、プロセッサ１１３及びサブルーチン管理回路１７１のどちらが行ってもよい。
【０１２１】
プロセッサ１１３は、サブルーチンのネイティブコード１３１の実行中に別のサブルーチンの呼び出しがあるかどうかを判断し（ＳＴ６１０）、別のサブルーチンの呼び出しがさらに発生した場合（ＳＴ６１０の判断が“Ｙ”の場合）、サブルーチン管理表検索・実行処理が再帰的に実行され（ＳＴ６１１）、ＳＴ６０９及びＳＴ６１０を繰り返す。一方、プロセッサ１１３は、別のサブルーチンの呼び出しがないままサブルーチンのネイティブコード１３１の実行が完了すると（ＳＴ６１０の判断が“Ｎ”の場合）、呼び出し元のサブルーチンの処理へ戻る。
【０１２２】
サブルーチン管理回路１７１は、ＳＴ６０７の処理において、ＪＩＴフラグが“pre”と判断された場合、サブルーチン管理表キャッシュ２０５の実行アドレスとして、サブルーチンの第２コード１２１の先頭アドレスをプロセッサ１１３へ渡す。プロセッサ１１３は、これに基づいて、第２コード１２１をＪＩＴコンパイラ１５９にコンパイルさせ（ＳＴ６１２）、エラーが発生しないかどうかをチェックする（ＳＴ６１３）。エラーの内容としては、例えば、ネイティブコード格納用のメモリ領域が不足した場合、及びコンパイルエラーが発生した場合などが考えられる。ＪＩＴコンパイラ１５９によって生成されるネイティブコード１３１は、ＪＩＴコンパイラ１５９によって、メモリ１１７へ順次格納され、又はＪＩＴコンパイルが完了してからまとめて格納される。
【０１２３】
プロセッサ１１３は、ＪＩＴコンパイル中にエラーが発生した場合（ＳＴ６１３の判断が“Ｙ”の場合）、その第２コード１２１に対応する第１コード１１９をインタプリタ１５７に実行させる（ＳＴ６１７）。
【０１２４】
プロセッサ１１３は、ＪＩＴコンパイル中にエラーが発生しなかった場合（ＳＴ６１３の判断が“Ｎ”の場合）、それをサブルーチン管理回路１７１に通知する。これにより、サブルーチン管理回路１７１は、サブルーチン管理表キャッシュ２０５内のＪＩＴフラグを“yes”に変更し、生成されたネイティブコード１３１の先頭アドレスを実行アドレスとして記録する（ＳＴ６１４）。そして、プロセッサ１１３は、ＪＩＴコンパイラ１５９に生成させたネイティブコード１３１へジャンプし、これを実行する（ＳＴ６０９）。以後、前述のとおり、ＳＴ６０９からＳＴ６１１の処理が繰り返される。なお、ネイティブコード１３１のメモリ１１７への格納は、図示のようにネイティブコード１３１への変換が完了してから行ってもよいし、コンパイルされたコードを逐次格納するように構成してもよい。
【０１２５】
サブルーチン管理回路１７１は、ＳＴ６０７の処理において、ＪＩＴフラグが“no”又は“req”と判断された場合、プリコンパイル回路１７３が別のサブルーチンの第１コード１１９をプリコンパイルしているかどうか、すなわちプリコンパイルをすぐに行える状態かどうかを判断する（ＳＴ６１５）。このような判断は、プリコンパイル回路１７３がいずれかのサブルーチンの第１コード１１９をプリコンパイルしているかどうかを示す、いわゆるフラグ等の情報を利用して行うことができる。
【０１２６】
サブルーチン管理回路１７１は、プリコンパイル回路１７３が他のサブルーチンの第１コード１１９をプリコンパイルしている（ＪＩＴフラグが“req”を示す別のサブルーチンのエントリが存在する）ことにより、すぐにはプリコンパイルを行えないと判断した場合（ＳＴ６１５の判断が“Ｎ”の場合）、サブルーチン管理表キャッシュ２０５のＪＩＴフラグを“req”に変更し（ＳＴ６１６）、プリコンパイル待ちの状態にする。この場合、後述の方法により選択されるサブルーチンの第１コード１１９から順に第２コード１２１が生成されることになる。なお、ＳＴ６０７の処理でＪＩＴフラグが“req”と判断された場合、呼び出されたサブルーチンは、それより前にも呼び出されたことがあり、且つ未だその第１コード１１９が第２コード１２１に変換されていないこと（プリコンパイル待ちの状態）を示す。この場合には、ＳＴ６１６の処理において、ＪＩＴフラグ（req）を維持するように構成すればよい。
【０１２７】
一方、サブルーチン管理回路１７１は、プリコンパイル回路１７３でプリコンパイルを行えると判断した場合（ＳＴ６１５の判断が“Ｙ”の場合）、後述の方法により、プリコンパイル回路１７３に対し、処理対象のサブルーチンの第１コード１１９から第２コード１２１を生成させる。
【０１２８】
その後、サブルーチン管理回路１７１は、呼び出されているサブルーチンの実行アドレスとして、そのサブルーチンの第１コード１１９の先頭アドレスをサブルーチン管理表キャッシュ２０５から抽出し、プロセッサ１１３へ渡す。プロセッサ１１３は、第１コード１１９の実行アドレスに基づいて、インタプリタ１５７に第１コード１１９を実行させる（ＳＴ６１７）。
【０１２９】
プロセッサ１１３は、インタプリタ１５７に第１コード１１９を実行させている間、別のサブルーチンの呼び出しがさらに発生したかどうかを判断し（ＳＴ６１８）、別のサブルーチンの呼び出しがさらに発生した場合（ＳＴ６１８の判断が“Ｙ”の場合）、サブルーチン管理表検索・実行処理が再帰的に実行され（ＳＴ６１９）、ＳＴ６１７及びＳＴ６１８を繰り返す。一方、プロセッサ１１３は、別のサブルーチンの呼び出しがないままインタプリタ１５７による処理（ＳＴ６１７）が完了すると（ＳＴ６１８の判断が“Ｎ”の場合）、呼び出し元のサブルーチンの処理へ戻る。
【０１３０】
図７は、プリコンパイル時における第１コード処理部１２３の動作のフローチャートを示す。まず、携帯電話機１０１が起動すると、プリコンパイル制御回路１７５に対し、パラメータの初期設定が行われる（ＳＴ７０１）。パラメータの設定は、サブルーチン管理回路１７１及びプロセッサ１１３のどちらが行ってもよい。このパラメータとしては、例えば、動作速度定義表３０１の値である。なお、動作速度定義表３０１は、メモリ１１７上に格納されているので、パラメータを設定する処理を省略し、プリコンパイル制御回路１７５が必要に応じてメモリ１１７上の動作速度定義表３０１を参照するように構成してもよい。また、動作速度定義表３０１をキャッシュメモリ１７７上に格納しておき、これを参照するように構成してもよい。
【０１３１】
パラメータの設定（ＳＴ７０１）が完了すると、サブルーチン管理回路１７１は、サブルーチン管理表キャッシュ２０５の内容が変更（更新）されるまで待機し（ＳＴ７０２の判断が“Ｎ”の場合）、サブルーチン管理表キャッシュ２０５の変更（更新）を検出すると（ＳＴ７０２の判断が“Ｙ”の場合）、プリコンパイル制御回路１７５を起動する（ＳＴ７０３）。
【０１３２】
次に、サブルーチン管理回路１７１は、メモリ１１7の空き容量が不十分かどうかを調べる（ＳＴ７０４）。メモリ１１７の空き容量が不十分であれば（ＳＴ７０４の判断が“Ｎ”の場合）、処理を終了する。メモリ１１７の空き容量の判定方法としては、例えば、メモリ１１７の使用量があらかじめ定めた閾値を超えた場合にメモリ不足と判定するなどの方法を適用することができる。
【０１３３】
メモリ１１７の空き容量が十分あれば（ＳＴ７０４の判断が“Ｙ”の場合）、メモリ１１７上にプリコンパイル対象のサブルーチンを利用するコンテンツ１０７が存在するかどうかを調べる（ＳＴ７０５）。メモリ１１７上に対応するコンテンツ１０７が存在しない場合（ＳＴ７０５の判断が“Ｙ”の場合）は、処理を終了する。
【０１３４】
メモリ１１７上にコンテンツ１０７が存在する場合（ＳＴ７０５の判断が“Ｎ”の場合）、サブルーチン管理回路１７１は、サブルーチン管理表キャッシュ２０５の更新（変更）をプリコンパイル制御回路１７５に通知する（ＳＴ７０６）。
【０１３５】
プリコンパイル制御回路１７５は、サブルーチン管理回路１７１からの通知があると、サブルーチン管理表キャッシュ２０５内のエントリの更新（変更）部分を検査し（ＳＴ７０７）、ＪＩＴフラグが“no”又は“req”のエントリが存在するかどうかを判断する（ＳＴ７０８）。
【０１３６】
ＪＩＴフラグが”no”又は”req”のエントリが存在しない場合（ＳＴ７０８の判断が“Ｙ”の場合）は、処理を終了する。ＪＩＴフラグが”no”又は”req”のエントリが存在する場合（ＳＴ７０８の判断が“Ｎ”の場合）、サブルーチン管理回路１７１は、プリコンパイル対象のエントリが複数存在するかどうか、すなわちＪＩＴフラグが“req”のエントリが複数存在するかどうかを調べる（ＳＴ７０９）。
【０１３７】
プリコンパイル対象のエントリが複数存在する場合（ＳＴ７０９の判断が“Ｙ”の場合）、サブルーチン管理回路１７１は、プリコンパイルの優先度を判断して対象エントリ選択する（ＳＴ７１０）。優先度としては、例えば、サブルーチン管理表２０３又はサブルーチン管理表キャッシュ２０５内にある優先度欄２７９の値を採用することができる。この場合、優先度の高いサブルーチンから順に、第１コード１１９を第２コード１２１へ変換するのがよい。
【０１３８】
プリコンパイルの対象エントリが１つしかない場合（ＳＴ７０９の判断が“Ｎ”の場合）、又はＳＴ７１０でプリコンパイルの対象エントリを選択した場合、プリコンパイル制御回路１７５は、インタプリタ実行のバックグラウンドでプリコンパイルを実行できるシステム状態かどうかを調べる（ＳＴ７１１）。バックグラウンドで実行できない場合とは、例えば、
（１）バス１０３の負荷が予め定めた閾値より高い場合
（２）メモリ１１７を複数搭載する場合において、プリコンパイル対象の第１コード１１９が存在するメモリ１７へのプロセッサ１１３によるアクセス頻度が、予め定めた閾値より高い場合
などが考えられる。
【０１３９】
プリコンパイルをインタプリタ実行のバックグラウンドで実行できない場合（ＳＴ７１１の判断が“Ｙ”の場合）は、システム状態が回復するまで待機する。プリコンパイルをインタプリタ実行のバックグラウンドで実行できる場合（ＳＴ７１１の判断が“Ｎ”の場合）、プリコンパイル制御回路１７５は、プリコンパイル回路１７３を起動し（ＳＴ７１２）、後述（図９）のプリコンパイル回路１７３の動作速度制御を開始する（ＳＴ７１３）。
【０１４０】
プリコンパイル制御回路１７５は、プリコンパイル回路１７３の動作速度制御を開始すると、さらにシステム状態を監視し、システム状態が悪化したかどうかを検査する（ＳＴ７１４）。システム状態が悪化すると（ＳＴ７１４の判断が“Ｙ”の場合）、プリコンパイル回路１７３にプリコンパイルを一時停止させる（ＳＴ７１５）。ここで、システム状態の悪化とは、例えば、バス１０３の負荷があらかじめ定めた閾値より高い場合や、メモリ１１７を複数搭載する場合において、プリコンパイル対象の第１コード１１９が存在するメモリ１１７へのプロセッサ１１３によるアクセス頻度が予め定めた基準より高い場合などが考えられる。
【０１４１】
システム状態が悪化しなければ（ＳＴ７１４の判断が“Ｎ”の場合）、プリコンパイルを継続させ（ＳＴ７１６）、プリコンパイルが完了したかどうかを判断する（ＳＴ７１７）。プリコンパイルが完了していなければ（ＳＴ７１７の判断が“Ｎ”の場合）、ＳＴ７１３へ戻る。プリコンパイルが完了した場合（ＳＴ７１７の判断が“Ｙ”の場合）、サブルーチン管理回路１７１は、プリコンパイル待ちの他のサブルーチンのエントリが存在するかどうかを調べる（ＳＴ７１８）。
【０１４２】
プリコンパイル待ちの他のサブルーチンのエントリが存在する場合（ＳＴ７１８の判断が“Ｙ”の場合）、ＳＴ７０９へ戻る。プリコンパイル待ちの他のサブルーチンのエントリが存在しない場合（ＳＴ７１８の判断が“Ｎ”の場合）、プリコンパイル制御回路１７５は、プリコンパイル回路を停止する（ＳＴ７１９）。そして、プリコンパイル制御回路１７５の動作が停止し（ＳＴ８２０）、処理が終了する。
【０１４３】
図８は、プリコンパイルの開始から終了までの間におけるプリコンパイル回路１７３による処理のフローチャートを示す。この処理は、プリコンパイル制御回路１７５によってプリコンパイル回路１７３が起動されること（図７のＳＴ７１２）により開始する。
【０１４４】
プリコンパイル回路１７３は、処理対象のサブルーチンの第１コード１１９のプリコンパイルを開始すると（ＳＴ８０１）、エラーが発生したかどうかを検出する（ＳＴ８０２）。エラーが発生した場合（ＳＴ８０２の判断が“Ｙ”の場合）、途中まで生成したコードを破棄し（ＳＴ８０３）、プリコンパイル処理を中止する。エラーの内容としては、例えば、第２コード格納用のメモリ領域が不足した場合や、第１コードに不正な値が入っていた等の理由によりコンパイルエラーが発生した場合などの不具合が考えられる。
【０１４５】
一方、プリコンパイルが正常に終了すると（ＳＴ８０２が“Ｎ”、ＳＴ８０４が“Ｙ”の場合）、プリコンパイル回路１７３は、
（１）ＪＩＴフラグを“pre”に変更すること
（２）実行アドレス欄２７７にサブルーチンの第２コード１２１の先頭アドレスを格納すること
をサブルーチン管理回路１７１へ指示する（ＳＴ８０５）。これに基づいて、サブルーチン管理回路１７１は、サブルーチン管理表キャッシュ２０５内のＪＩＴフラグを“pre”に変更し、生成された第２コード１２１の先頭アドレスを実行アドレス欄２７７に保存する。
【０１４６】
そして、プリコンパイル回路１７３は、生成した第２コード１２１をメモリ１１７へ格納する（ＳＴ８０６）。メモリ１１７への格納方法としては、プリコンパイルの最中に生成される第２コード１２１をメモリ１１７へ逐次格納するように構成してもよい。また、メインルーチンについては、コンテンツ１０９の実行時に一度しか実行されない場合が多いため、プリコンパイルを行わず、インタプリタ１５７でのみ実行するように構成するのがよい。
【０１４７】
図９は、プリコンパイル制御回路１７５によるプリコンパイル回路１７３の動作速度制御のフローチャートを示す。
【０１４８】
プリコンパイル制御回路１７５は、プリコンパイル回路１７３が第１コード１１９のプリコンパイルを行う際（例えば、図７のＳＴ７１６など）、その第１コード１１９内にサブルーチン定義値が書き込まれているかどうかを調べる（ＳＴ９０１）。第１コード１１９内にサブルーチン定義値が存在する場合（ＳＴ９０１の判断が“Ｙ”の場合）、その値を動作速度定義表（図３）に照らし、その値に応じた動作速度を抽出する（ＳＴ９０２）。
【０１４９】
第１コード１１９内にサブルーチン定義値が存在しない場合（ＳＴ９０１の判断が“Ｎ”の場合）、その第１コード１１９に対応するサブルーチンの優先度を、サブルーチン管理表キャッシュ２０５から抽出し（ＳＴ９０３）、取得した優先度を動作速度定義表（図３）に照らし、その優先度に応じた動作速度を抽出する（ＳＴ９０４）。
【０１５０】
プリコンパイル制御回路１７５は、ＳＴＳＴ９０２又はＳＴ９０４で抽出した動作速度の値に従って、プリコンパイル回路１７３の動作速度を制御するとともに、動作速度を下げる場合は、プリコンパイル回路１７３の動作を維持できる電圧値の範囲内で同回路１７３への供給電圧値を下げる（ＳＴ９０５）。
【０１５１】
図１０は、サブルーチン管理回路１７１によるサブルーチン管理表キャッシュ２０５の更新処理（図６のＳＴ６０３）のフローチャートを示す。この処理では、サブルーチンの呼び出しが発生した際に、必要に応じて、サブルーチン管理表２０３とサブルーチン管理表キャッシュ２０５との間のデータの入れ替えが行われる。
【０１５２】
本処理が呼ばれると、まず、以下のようにパラメータを初期化する（ＳＴ１００１）。
【０１５３】
（１）探索位置［pos］＝キャッシュの先頭
（２）最小キャッシュアウトカウント値［min］＝予め定めた値（例えば、格納可能なキャッシュアウトカウントの最大値［max］）
（３）最小キャッシュアウトカウント値を持つエントリ位置［posmin］＝キャッシュの先頭。
【０１５４】
続いて、posのエントリ［ent］のキャッシュアウトカウント［ent.Cnt］から１を減算し（ＳＴ１００２）、最小キャッシュアウトカウント値［min］より小さいかどうかを判断する（ＳＴ１００３）。
【０１５５】
ent.Cntがminより小さい場合（ＳＴ１００３の判断が“Ｙ”の場合）、minにent.Cntを設定し（ＳＴ１００４）、posminにposを設定する（ＳＴ１００５）。
【０１５６】
ent.Cntがminより大きい場合（ＳＴ１００３の判断が“Ｎ”の場合）又はＳＴ１００５の後、ent.Cntが０かどうかを判断し（ＳＴ１００６）、ent.Cntが０ではない場合（判断が“Ｎ”の場合）は、全てのエントリを検索し終わったかどうかを判断する（ＳＴ１００７）。全エントリの検索が終了していない場合（ＳＴ１００７の判断が“Ｎ”の場合）、posに１を加算し（ＳＴ１００８）、次のエントリについて上記の処理を行う。
【０１５７】
ent.Cntが０の場合（ＳＴ１００６の判断が“Ｙ”の場合）、そのエントリをサブルーチン管理表２０３へ書き戻す（ＳＴ１００７）。また、全エントリの検索が終了した場合（ＳＴ１００７の判断が“Ｙ”の場合）、posminのエントリをサブルーチン管理表２０３へ書き戻し（ＳＴ１０１０）、posにposminを設定する（ＳＴ１０１１）。
【０１５８】
これらの処理により、キャッシュアウトカウント値の最も小さいエントリが、殆ど参照されていないエントリとして検出され、サブルーチン管理表キャッシュ２０５からサブルーチン管理表キャッシュ２０３へ書き戻すべきエントリを合理的に判断することができる。
【０１５９】
ＳＴ１００９又はＳＴ１０１１の後、プロセッサ１１３が参照しようとしているサブルーチンに対応するエントリをサブルーチン管理表２０３内で検索し（ＳＴ１０１２）、そのエントリをサブルーチン管理表キャッシュ８０５内のposが示す位置へ読み込み（ＳＴ１０１３）、サブルーチン管理表キャッシュ２０５の更新処理が終了する。
【０１６０】
図１１は、携帯電話機１０１の基本動作のシーケンシャル図を示す。このシーケンシャル図は、携帯電話機１０１が起動（電源ＯＮなど）してからシステム停止に至るまでの処理の流れを表している。
【０１６１】
まず、携帯電話機１０１が起動すると、プロセッサ１１３が携帯電話機１０１を初期化する（ＳＴ１１０１）。この処理では、各種のハードウェア１０５の初期化、及びメモリ１１７の内容の０クリア等の処理が行われる。
【０１６２】
プロセッサ１１３は、初期化が完了すると、不揮発性記録媒体１１５から、ＯＳ１２７、再生アプリ１２５、コンテンツ管理表２０１、サブルーチン管理表２０３、及び動作速度定義表３０１をメモリ１１７へ転送する（ＳＴ１１０２）。
【０１６３】
そして、サブルーチン管理回路１７１は、サブルーチン管理表２０３内のエントリを、優先度（実施例では参照回数）の多いものから順に、キャッシュメモリ１７７上のサブルーチン管理表キャッシュ２０５へ転送する（ＳＴ１１０３）。転送が完了すると、サブルーチン管理回路１７１は、サブルーチン管理表２０３から転送したエントリのキャッシュ欄２２３のサブ項目について、ステート欄２３１を“yes”に変更し、回数欄２３３に“１”を加算する（ＳＴ１１０４）。
【０１６４】
次に、プロセッサ１１３は、サブルーチン管理表２０３内でキャッシュフラグ（ステート欄２３１）が“yes”のエントリに対応するコンテンツ１０７を、不揮発性記録媒体１１５からメモリ１１７へ転送する（ＳＴ１１０５）。これが完了すると、プロセッサ１１３及び第１コード処理部１２３によるコンテンツ１０７の実行等の通常動作が行われる（ＳＴ１１０６）。
【０１６５】
通常動作（ＳＴ１１０６）の途中で、例えばユーザの操作により携帯電話機１０１の終了（電源ＯＦＦなど）が指示されると、サブルーチン管理回路１７１は、サブルーチン管理表キャッシュ２０５内の全エントリをサブルーチン管理表２０３へ書き戻す（ＳＴ１１０７）。そして、サブルーチン管理回路１７１は、サブルーチン管理表２０３内で、キャッシュ回数が“０”のエントリの優先度の値を半減させる（ＳＴ１１０８）。これにより、利用頻度の低いエントリのプリコンパイルの優先度を下げることができる。なお、優先度の半減は一例であり、例えば、優先度から一定の値を減算したり、一定の値で除算してもよい。
【０１６６】
ＳＴ１１０８の後、プロセッサ１１３は、サブルーチン管理表２０３を不揮発性記録媒体１１５へ書き戻し（ＳＴ１１０９）、携帯電話機１０１を停止する（ＳＴ１１１０）。この際、サブルーチン管理表２０３の変更箇所のみを不揮発性記録媒体１１５へ書き戻すように構成してもよい。
【０１６７】
図１２は、サブルーチン管理回路１７１によるコンテンツ終了処理のフローチャートを示す。この処理は、例えば、ユーザによってコンテンツ１０７の終了が指示されたとき、別のコンテンツを実行するとき、及びサーバから別のコンテンツをダウンロードして実行するときのいずれかのタイミングで実行される。実施例の携帯電話機１０１は携帯型の組込み機器であるため、プロセッサ１１３やメモリ１１７等のハードウェア１０５のリソースが厳しく制限されるため、別のコンテンツを実行する際には、この終了処理を行うことにより、実行中のコンテンツ１０７を強制的に終了する。
【０１６８】
まず、コンテンツ１０７の終了が指示されると、サブルーチン管理表キャッシュ２０５から終了するコンテンツ１０７に対応するエントリをサブルーチン管理表２０３へ書き戻す（ＳＴ１２０１）。そして、メモリ１１７の空き容量が十分にあるかどうかを検査する（ＳＴ１２０２）。容量が十分ある状態とは、例えば、別のコンテンツをメモリ１１７上にロードできるだけの容量が空いていることをいう。メモリ１１７上に十分な空き容量がある場合（ＳＴ１２０２の判断が“Ｙ”の場合）、コンテンツ終了処理を終了する。
【０１６９】
メモリ１１７上に十分な空き容量がない場合（ＳＴ１２０２の判断が“Ｎ”の場合）、不揮発性記録媒体１１５内にこのコンテンツ１０７が存在するかどうかを判断する（ＳＴ１２０３）。不揮発性記録媒体１１５内にこのコンテンツ１０７が存在する場合（ＳＴ１２０３の判断が“Ｙ”の場合）、このコンテンツ１０７をメモリ１１７上から削除し（ＳＴ１２０４）、コンテンツ終了処理を終了する。
【０１７０】
不揮発性記録媒体１１５内にこのコンテンツ１０７が存在しない場合（ＳＴ１２０４の判断が“Ｎ”の場合）、ユーザによる保存の指示があったかどうかを判断する（ＳＴ１２０５）。ユーザによる保存の指示があった場合（ＳＴ１２０５の判断が“Ｙ”の場合）、不揮発性記録媒体１１５にコンテンツ１０７を保存し（ＳＴ１００７）、そのコンテンツ１０７をメモリ１１７上から削除し（ＳＴ１２０４）、コンテンツ終了処理を終了する。
【０１７１】
一方、ユーザによる保存の指示がなかった場合（ＳＴ１２０５の判断が“Ｎ”の場合）、コンテンツ１０７をメモリ１１７上から削除し（ＳＴ１２０４）、コンテンツ終了処理を終了する。なお、ＳＴ１２０４の処理では、サブルーチン共用表２４３に基づいて、終了するコンテンツ１０７の第１コード１１９が他のコンテンツとの間で共用されていると判断される場合、その共用されている第１コード１１９をメモリ１１７上に保持するように構成することができる。
【０１７２】
なお、ＳＴ１２０２〜ＳＴ１２０６の処理は、プロセッサ１１３が行うように構成してもよい。
【０１７３】
以上の説明（図１〜図１２）を整理すると、実施例の携帯電話機１０１は、以下の構成を有する。
【０１７４】
（１）Javaプログラム（コンテンツ）１０７に含まれる複数のサブルーチンごとに、プロセッサ１１３で実行可能なネイティブコード１３１、ネイティブコード１３１の元となるＯＳに依存しない第１コード（Javaバイトコード）１１９、第１コード１１９をネイティブコード１３１へコンパイルする過程で生成される第２コード１２１のうち、存在し実行するコードの種類を管理するサブルーチン管理表２０３を記憶するメモリ１１７を備える。また、このメモリ１１７には、サブルーチンごとに所定の基準に基づいて定められる、第１コード１１９から第２コード１２１を生成する優先度に応じて、プリコンパイル回路１７３の動作速度を定めた動作速度定義表が記憶される。
【０１７５】
（２）サブルーチン管理表２０３の内容の一部をサブルーチン管理表キャッシュ２０５として記憶するキャッシュメモリ１７７を備える。
【０１７６】
（３）第１コード１１９をインタプリタ方式で実行するインタプリタ１５７、及び第２コード１２１をコンパイルしてから実行するＪＩＴコンパイラ１５９を有する仮想マシン１５３を備える。
【０１７７】
（４）第１コード１１９から第２コード１２１を生成するプリコンパイル回路１７３を備える。
【０１７８】
（５）コンテンツ１０７の実行中に呼び出されたサブルーチンについて、サブルーチン管理表キャッシュ２０５を参照した結果、ネイティブコード１３１が存在するときは、そのネイティブコード１３１がプロセッサ１１３で実行され、第２コード１２１が存在するときは、その第２コード１２１が仮想マシン１５３のＪＩＴコンパイラ１５９で実行され、生成されたネイティブコード１３１がメモリ１１７に格納され、又は第１コード１１９が存在するときは、その第１コード１１９が仮想マシン１５３のインタプリタ１５７で実行されるとともに、プリコンパイル回路１７３で第２コード１２１に変換され、その第２コード１２１がメモリ１１７に格納されるように実行制御を行うサブルーチン管理手段（サブルーチン管理プログラム１３３及びサブルーチン管理回路１７１）を備える。
【０１７９】
（６）また、サブルーチン管理回路１７１は、それらの制御によりサブルーチンのコードの種類が変化したときは、変化後の種類がサブルーチン管理表キャッシュ２０５に記録されるように記録制御を行う。また、この記録制御として、サブルーチン管理回路１７１は、コンテンツ１０７の実行中に呼び出されたサブルーチンごとの回数が、サブルーチン管理表キャッシュ２０５に優先度として記録されるように制御を行う。
【０１８０】
（７）さらに、サブルーチン管理回路１２３は、コンテンツ１０７の起動時やサブルーチンの呼び出し時等の所定のタイミングで、サブルーチン管理表２０３とサブルーチン管理表キャッシュ２０５との間でデータの転送及び書き換えが行われるようにキャッシュ制御を行う。
【０１８１】
（８）サブルーチン管理回路１７１は、サブルーチン管理プログラム１３３を実行するプロセッサ１１３の制御のもとで、サブルーチンごとに所定の基準に基づいて定められる、第１コード１１９を第２コード１２１へ変換する優先度の高いサブルーチンから順に、その第１コード１１９が第２コード１２１に変換されるように実行制御を行う。
【０１８２】
（９）サブルーチンの優先度を用いて、動作速度定義表３０１から動作速度を判断し、その動作速度に従ってプリコンパイル回路１７３が動作するように制御を行うプリコンパイル制御手段（プリコンパイル制御プログラム１３５及びプリコンパイル制御回路１７５）を備える。また、プリコンパイル制御回路１７５は、プリコンパイル回路１７３の動作速度を下げたとき、プリコンパイル回路１７３への供給電圧を、その動作を維持できる電圧値の範囲内で下げる。実施例では、優先度として、コンテンツ１０７の実行中に呼び出されたサブルーチンごとの回数を採用している。
【０１８３】
（１０）サブルーチン管理回路１７１は、コンテンツの実行開始時において、サブルーチン管理表２０３に優先度が記録されている場合は、実行対象のコンテンツ１０７に含まれるサブルーチンの情報が、優先度の高いものから順に、サブルーチン管理表２０３からサブルーチン管理表キャッシュ２０５へ書き込まれるようにキャッシュ制御を行う。また、コンテンツ１０７の実行中において、呼び出されたサブルーチンの情報がサブルーチン管理表キャッシュ２０５にない場合は、サブルーチン管理表キャッシュ２０５にある優先度（実施例では、キャッシュアウトされるたびに値がクリアされる各エントリの参照回数であるキャッシュアウトカウントの値）の最も低いサブルーチンの情報がサブルーチン管理表２０３へ書き戻され、呼び出されたサブルーチンの情報がサブルーチン管理表２０３からサブルーチン管理表キャッシュ２０５へ書き込まれるようにキャッシュ制御を行う。
【０１８４】
このように、第１コード１１９を第２コード１２１へ変換する処理（プリコンパイル）を、プリコンパイル専用の回路（プリコンパイル回路１７３）を用いて行うことにより、インタプリタ１５７による第１コード１１９の処理とは完全に独立した状態（プロセッサ１１３が使用されない状態）で、プリコンパイルを行うことができる。従って、プリコンパイル回路１７３とインタプリタ１５７による各処理を、同時に且つ高速に実行することができるため、コンテンツ１０７の実行速度の高速化を図ることができる。さらに、ＪＩＴコンパイラ１５９は、予めプリコンパイルされた第２コード１２１をコンパイルすることになるため、ＪＩＴコンパイル（ネイティブイコード１３１の生成）の処理速度の向上を図ることができる。
［実施例２］
【０１８５】
次に、実施例２として、本発明を適用した携帯電話機１０１を用いて、コンテンツ配信サーバ１３０１から既存コンテンツ１０７の一部又は新しいコンテンツ１３０３の全部を受信する方法を説明する。実施例２においては、実施例１で説明した携帯電話機１０１の機能については説明を省略するとともに、同じ要素については同一の符号を付した。
【０１８６】
図１３は、携帯電話機１０１及びコンテンツ配信サーバ１３０１のそれぞれの構成及び連携方法を示す。携帯電話機１０１とコンテンツ配信サーバ１３０１は、インターネット等の通信ネットワークを介して接続される。
【０１８７】
携帯電話機１０１は、サブルーチン管理表２０３の拡張構成２１３のうち、ハッシュ値管理表２３７及びダウンロード元管理表２５９については、これらを組み合わせて構成したクライアントサブルーチンリスト１３０５として有している。
【０１８８】
クライアントサブルーチンリスト１３０５は、各サブルーチンのダウンロード元のＵＲＬ（サーバＵＲＬ）、サブルーチンＩＤ、ハッシュ値、及びサーバ通知状況を格納する。実施例２では、サブルーチンＩＤ、サブルーチン名、及びハッシュ値は、コンテンツ配信サーバ１３０１側でサブルーチンごとに付与される。
【０１８９】
コンテンツ配信サーバ１３０１は、複数のコンテンツ１０７，１３０３等のほかに、
コンテンツ１０７，１３０３に含まれるサブルーチンごとに、サブルーチンＩＤ、サブルーチン名、及びハッシュ値を管理するサーバサブルーチンリスト１３０７と、
各サブルーチンに対して一意なＩＤを割り当てるサブルーチンＩＤカウンタ１３０９と、
サーバサブルーチンリスト１３０７に、各サブルーチンの情報が初めて登録されるとき及び変更されたサブルーチンの情報が登録されたときに、そのサブルーチンに対してハッシュ値を生成し、サーバサブルーチンリストへ登録するハッシュ値生成部１３１０と、
Ｗｅｂサーバが通常備える各種機能を有するとともに、携帯電話機１０１との間でコンテンツ等の情報通信を行うために必要な各種機能を有する配信機能部１３１１と
を含んで構成される。
【０１９０】
サーバ側のコンテンツ１３０３も、第１コード１３１３と、テキストデータ及び各種バイナリデータ等で構成されるその他のデータ１３１５によって構成される。
【０１９１】
ハッシュ値生成部１３１０によるハッシュ値の生成方法としては、例えば、各サブルーチンの第１コード１３１３の全文に基づいてハッシュ関数を用いて生成する方式、又は各第１コード１３１３の改変を検出できる最小限の間隔で抽出した１バイトの値に基づいてハッシュ関数を用いて生成する方式が適用可能である。上記改変を検出できる最小限の間隔は、例えば、数バイトから数十バイトの間隔である。
【０１９２】
また、コンテンツ配信サーバ１３０１は、コンテンツ１０７，１３０１等のコンテンツＩＤとこれらに含まれるサブルーチンごとのサブルーチンＩＤとを管理する、コンテンツ管理表（図２）２０１と同様のサーバコンテンツ表（図示省略）を備えている。コンテンツ配信サーバ１３０１は、携帯電話機１０１へコンテンツ１０７，１３０１のサブルーチンの第１コード１１９，１３１３等のデータを送信する際に、各サブルーチンに対応するコンテンツＩＤの情報も併せて送信する。
【０１９３】
次に、図１３及び図１４を用いて、携帯電話機１０１がコンテンツ配信サーバ１３０１からコンテンツ１０７，１３０３をダウンロードする方法を説明する。図１３には、図１４で説明する処理を図示したので、適時参照されたい。
【０１９４】
図１４は、携帯電話機１０１のサブルーチン管理部１７１（図１）によるコンテンツ登録処理のフローチャートを示す。この処理は、ユーザの指示により、携帯電話機１０１からコンテンツ配信サーバ１３０１側へコンテンツの配信を要求した場合に実行される。具体的には、ユーザが携帯電話機１０１を用いて、ダウンロード可能な複数のコンテンツ１０７，１３０３等が表示されたウェブサイトへアクセスし、所望のコンテンツをダウンロードする操作を行った場合に実行される。
【０１９５】
まず、サブルーチン管理回路１７１は、ユーザの指示に応じて、コンテンツ配信サーバ１３０１に対し、ダウンロードしようとするコンテンツに関するサーバサブルーチンリスト１３０７の情報の送信を要求し（ＳＴ１４０１）、その情報が送信されるまで待機する（ＳＴ１４０２）。
【０１９６】
サーバサブルーチンリスト１３０７の情報を受信すると（ＳＴ１４０２の判断が“Ｙ”の場合）、サーバサブルーチンリスト１３０７とクライアントサブルーチンリスト１３０５とを比較し、ハッシュ値に基づいて、両リスト１３０５，１３０７内で重複するサブルーチンを検出する（ＳＴ１４０３）。ここで、重複するサブルーチンがない場合、そのコンテンツは、新しくダウンロードするコンテンツ１３０３である。
【０１９７】
一方、重複するサブルーチンが存在する場合、ダウンロードしようとしているコンテンツは、既に携帯電話機１０１にダウンロードされているが、そのダウンロードの後に修正され若しくは追加されたサブルーチンを含むコンテンツ１０７、又は携帯電話機１０１にダウンロードされていないが、幾つかのサブルーチンが既にインストールされている別のコンテンツとの間で共用されているコンテンツ１３０３である。
【０１９８】
サブルーチン管理回路１７１は、ＳＴ１４０３で検出したサブルーチンの重複情報をコンテンツ配信サーバ１３０１へ通知し（ＳＴ１４０５）、サーバ側から送信されるデータの受信が開始するまで待機する（ＳＴ１４０５）。コンテンツ配信サーバ１３０１からは、重複しないサブルーチンの第１コード１１９，１３１３等のデータが送信される。サブルーチン管理回路１７１は、受信を開始すると（ＳＴ１４０５の判断が“Ｙ”の場合）、そのデータを不揮発性記録媒体１１５へダウンロードする（ＳＴ１４０６）。そして、ダウンロードが完了すると、ダウンロードしたデータをメモリ１１７上に転送する（ＳＴ１４０７）。
【０１９９】
次に、サブルーチン管理回路１７１は、ダウンロードしたデータが、新しいコンテンツのデータかどうかを判断する（ＳＴ１４０８）。そして、新しいコンテンツ１３０３のデータ１３１３，１３１５をダウンロードした場合（ＳＴ１４０８の判断が“Ｙ”の場合）、そのコンテンツ１３０３にコンテンツＩＤを割り当て、コンテンツ管理表２０１（図２）にその情報を登録する（ＳＴ１４０９）。この際、既存のコンテンツ１０７との間で幾つかのサブルーチンを共用することになった場合、その共用関係を動的にライブラリ化する（サブルーチン共用表２４３に登録する）ように構成しておくのがよい。
【０２００】
既存のコンテンツ１０７のデータをダウンロードした場合（ＳＴ１４０８の判断が“Ｎ”の場合）、又はＳＴ１４０９の後、サブルーチン管理手段を構成するサブルーチン管理回路１７１は、ダウンロードしたコンテンツ１３０３の各サブルーチンに関する情報に基づいて、サブルーチン管理表２０３を更新する（ＳＴ１４１０）。
【０２０１】
サブルーチン管理表２０３の更新処理の際には、各項目に対して以下の値を格納する。
【０２０２】
（１）コンテンツＩＤ欄２１５：サーバで割り当てられたコンテンツＩＤを格納する
（２）サブルーチンＩＤ欄２１７：サーバで割り当てられたサブルーチンＩＤを格納する
（３）ＪＩＴフラグ欄２１９：“no”に設定する
（４）キャッシュ欄２２３：ステートは“no“、回数は“０”に設定する
（５）第１コードアドレス欄２２５：第１コード１１９の先頭アドレスを格納する
（６）処理アドレス欄２２７：“null（例えば、“−１”）”を格納する
次に、クライアントサブルーチンリスト１３０５を更新し（ＳＴ１４１１）、処理を終了する。具体的には、クライアントサブルーチンリスト１３０５の各項目に対して以下の値を格納する。
【０２０３】
（１）サーバＵＲＬ欄：ダウンロード元であるコンテンツ配信サーバ１３０１のＵＲＬを格納する
（２）サブルーチンＩＤ欄：サーバで割り当てられたサブルーチンＩＤを格納する
（３）ハッシュ値欄：サーバから受信したサーバサブルーチンリストの情報に基づいて、ハッシュ値を格納する
（４）サーバ通知欄：ＳＴ１４０４で重複するサブルーチンとして通知された場合は、“yes”に設定する。新たにダウンロードしたサブルーチンの場合は、“no”に設定する。
【０２０４】
上記の構成によれば、携帯電話機１０１でコンテンツ１０７，１３０３をダウンロードするとき、そのコンテンツ１０７，１３０３に含まれる各サブルーチンの識別子（ここではハッシュ値）を用いて、サブルーチン単位でダウンロード済みかどうかを判断することができる。そして、ダウンロード済みのサブルーチンに関する情報をコンテンツ配信サーバ１３０１へ通知し、サーバ側で重複しない（未送信の）サブルーチンを特定して送信するように構成することにより、必要なデータだけをダウンロードすることができ、コンテンツ１０７，１３０３のダウンロード時の通信量を大幅に削減することができる。
【０２０５】
また、携帯電話機１０１では、クライアントサブルーチンリスト１３０５内でサブルーチンの重複情報の通知の有無をフラグ（サーバ通知）で管理しているため、コンテンツのダウンロード時にコンテンツ配信サーバ１３０１から送信されるサーバサブルーチンリスト１３０７への返答の際には、未通知の重複情報だけを送信すればよくなり、通信量を削減することができる。
【０２０６】
さらに、コンテンツ配信サーバ１３０１側で、携帯電話機１０１から送信されるサブルーチンの重複情報を携帯電話機１０１等の端末別に管理するのがよい。これにより、それ以降のコンテンツ１０７，１３０３等のダウンロード時には、そのコンテンツに関するサーバサブルーチンリスト１３０７のうち、未送信の情報だけを携帯電話機１０１側へ送信すればよくなり、通信量を削減することができる。
【０２０７】
以上、本発明の実施例を説明したが、実現可能な実施形態はこれに限られない。以下、本発明の実施形態の変形例を示す。
［情報処理装置の例］
【０２０８】
上記実施例では、本発明を携帯電話機に適用したが、本発明は、各種の情報処理装置に適用が可能である。特に、ＰＣと比較して、ＣＰＵの処理速度、メモリの容量、及び画像表示能力など、実装可能な各種デバイスの能力が厳しく制限されるいわゆる組込み機器に適用すれば、本発明の効果が一層高まる。組込み機器の例としては、例えば、ＰＤＡや携帯ゲーム機等の携帯情報端末、携帯電話機、カーナビゲーション装置、家庭用電話機、家庭用ゲーム機、テレビ受像機、ＨＤＤレコーダ等の個人用機器、及びカラオケ機器、ロボット、鉄道等の輸送機器、ロケット、プラント制御装置等の業務用機器が挙げられる。これらのなかでも、携帯用に作られた組込み機器は、上記リソースの制限の問題が大きいため、本発明を適用するのが特に好ましい。
［キャッシュメモリを用いない構成］
【０２０９】
実施例では、キャッシュメモリ１７７上にサブルーチン管理表キャッシュ２０５を持ち、このキャッシュ上でサブルーチンの形式の判断や優先度の検索を行ったが、キャッシュメモリ１７７を備えない構成も可能である。この場合、サブルーチン管理表キャッシュ２０５を用いて行う処理に替えて、メモリ１１７上のサブルーチン管理表２０３を用いて前述の各種の処理を行えばよい。
［プリコンパイルの有無の判断］
【０２１０】
実施例では、各エントリーに関するコンパイルの状況については、ＪＩＴフラグを用いて判断していたが、次のように行うこともできる。例えば、第１コード１１９を第２コード１２１へプリコンパイルしたとき、及び第２コード１２１をネイティブコード１３１へコンパイルしたときに、その変更内容を検出してハッシュ値をそれぞれ算出しておき、サブルーチン管理表キャッシュ２０５に別途設けた二つの欄でそれぞれ管理しておく。これにより、コンパイルの状況（サブルーチンのコードの種類）についての判断を、ＪＩＴフラグの種類ではなく、プリコンパイルに関するハッシュ値の有無及びコンパイルに関するハッシュ値の有無に基づいて判定することができる。
［ＪＩＴコンパイルの方法］
【０２１１】
実施例では、仮想マシン１２９のＪＩＴコンパイラ１５９は、実行対象のサブルーチン（第２コード１２１）をネイティブコード１３１へ変換するだけであったが、次のような処理も可能である。すなわち、ＪＩＴコンパイラ１５９は、実行対象のサブルーチンの実行過程で参照される他のサブルーチンがあるときは、その第１コード１１９のプリコンパイル結果である第２コード１２１を参照元のサブルーチンの第２コード１２１内にインライン展開し、これをネイティブコード１３１へ変換することができる。
［プリコンパイルの方法］
【０２１２】
実施例では、プリコンパイルの方法として、サブルーチンの実行過程で参照される他のサブルーチンの第１コードを、参照元のサブルーチンの第１コード内にインライン展開する方法を示したが、この処理をさらに細かく制御することも可能である。例えば、各サブルーチンのファイル容量を、サブルーチン管理表２０３若しくはサブルーチン管理表キャッシュ２０５で管理することにより、又は第１コード１１９の所定の箇所（例えば、ヘッダ）に記述することにより、予め定めた閾値より容量の小さい第１コードだけをインライン展開することも可能である。
［プロセッサ１１３との接続方法］
【０２１３】
実施例では、各種のハードウェア１０５を、バス１０３を介して接続する例を示したが、周辺機能部１１１とプロセッサ１１３間、サブルーチン管理回路１７１とプロセッサ１１３間など、各種のハードウェア１０５間を直結することも可能である。特に、サブルーチン管理回路１７１内のサブルーチン管理表キャッシュ２０５は、サブルーチンの呼び出しのたびにプロセッサ１１３によって参照されるため、サブルーチン管理回路１７１とプロセッサ１１３間を直結すれば、アクセス速度の向上及びバス１０３の負荷の低減を図ることができる。
［第１コード処理部１２３の構成］
【０２１４】
実施例では、第１コード処理部１２３の構成として、サブルーチン管理回路１７１、プリコンパイル回路１７３、及びプリコンパイル制御回路１７５をそれぞれ別個に図示したが、これに限られない。これら三つの回路は、任意に組み合わせて１個の回路として又は２個の回路として構成することもできる。
［優先度］
【０２１５】
優先度の変形例としては、以下の値を採用することができる。
【０２１６】
（１）コンテンツ１０７の実行中に各サブルーチンが呼び出された際のメモリ１１７のスタックフレームの数を所定の値から減じた値
（２）サブルーチンごとの対応するコンテンツ１０７の数
（３）各サブルーチンの処理内容に応じて定められた値。
【０２１７】
上記（１）の値を採用する場合、各サブルーチンに関する上記スタックフレームの数が、サブルーチン管理手段を構成するサブルーチン管理回路１７１によって、サブルーチン管理表２０３又はサブルーチン管理表キャッシュ２０５に書き込まれるように構成しておくのがよい。また、実施例における動作速度定義表３０１で定めた動作速度の値を基準にして、プリコンパイル回路１７３の動作速度が適切となるように、上記所定の値を調整するのがよい。或いは、これとは逆に、所定の値に基づいて算出される優先度を基準とし、動作速度定義表３０１における動作速度の値を調整してもよい。いずれの場合においても、プリコンパイル制御回路１７５は、サブルーチン管理表２０３又はサブルーチン管理表キャッシュ２０５に書き込まれている優先度を用いて、動作速度定義表３０１から動作速度を判断し、この動作速度でプリコンパイル回路１７３を動作させることができる。
【０２１８】
この変形例においては、例えば、複数のサブルーチンが入れ子になっている場合、最後のほうで参照されるサブルーチンについては、そのスタックフレームが未処理の複数のサブルーチンのスタックフレーム上にプッシュされ（積み上げられ）るため、スタックフレームの数が大きくなり、これを所定の値から減じると、結果的に小さな値が得られる。これとは逆に、頻繁に参照され（早い段階で呼び出され）るサブルーチンについては、スタックフレームの数が小さくなり、これを所定の値から減じると、結果的に大きな値が得られる。従って、早くプリコンパイルすべきである頻繁に参照されるサブルーチンの優先度が高くなり、プリコンパイルを急ぐ必要のないあまり参照されないサブルーチンの優先度が低くなる。これにより、プリコンパイルの優先度の低いサブルーチンをプリコンパイルする際には、プリコンパイル回路１７５の動作速度を落とすことにより、消費電力を低く抑えることができる。
【０２１９】
上記（２）の値を採用する場合、サブルーチンと複数のコンテンツ１０７との対応関係を表すサブルーチン共用表２４３（図２）を、少なくともメモリ１１７上又はキャッシュメモリ１７７があるときはキャッシュメモリ１７７上のいずれかに持たせておく。そして、サブルーチン管理回路１７１は、複数のコンテンツ１０７を同時に実行する場合において、いずれかのコンテンツ１０７の実行中にサブルーチンが呼び出されたが、処理待ちのサブルーチンの第１コード１１９があるときは、サブルーチン共用表２４３に基づいて、それらのサブルーチンのうち対応するコンテンツ１０７の数が多いサブルーチンから順に、プリコンパイル回路１７３がその第１コードから第２コードを生成するように制御を行うのがよい。
【０２２０】
上記（３）の値を採用する場合、サブルーチンの第１コード１１９に、処理の内容を表す属性を予め記載しておく。また、メモリ１１７に、その属性ごとに第１コード１１９から第２コード１２１を生成する優先順位を定めた属性管理表を記憶しておく。そして、コンテンツの実行中にサブルーチンが呼び出されたが、プリコンパイル待ち（ＪＩＴフラグが“req”）のサブルーチンが存在するときは、サブルーチン管理回路１７１は、それらのサブルーチンの第１コード１１９に記載された属性を用いて属性管理表から優先順位を特定し、その優先順位に従って第１コード１１９から第２コード１２１が生成されるように実行制御を行うことができる。
【０２２１】
なお、実施例において優先度を用いて説明したその他の処理についても、上記（１）〜（３）の値を用いて実行することができる。
［ＪＩＴフラグ］
【０２２２】
実施例では、ＪＩＴフラグが“pre”の場合は、存在する第２コードをＪＩＴコンパイラ１５９で実行していたが、図２に示すように、サブルーチン管理表２０３内の第１コードサイズ管理表２３９で各サブルーチンの第１コード１１９のサイズを管理している場合には、次のような処理を実行してもよい。例えば、ＪＩＴコンパイラ１５９による処理対象の第２コード１２１の元となる第１コード１１９のサイズを、第１コードサイズ管理表２３９から判断し、第１コード１１９のサイズが、予め決めておいた閾値より大きい場合、以下のいずれかの処理を実行する。
【０２２３】
（１）第１コード１１９をインタプリタ１５７で実行すると同時に、別スレッドで第２コード１２１をＪＩＴコンパイラ１５９によってネイティブコード１３１へ変換してメモリ１１７に格納する
（２）インタプリタ１５７で実行する。
【０２２４】
コードサイズが大きい場合、ＪＩＴコンパイルが完了するまで実行を待つよりも、上記のように第１コード１１９をインタプリタ１５７で逐次実行した方が、コンテンツの実行速度が向上するというメリットがある。
［コンテンツの種類］
【０２２５】
実施例では、実行するコンテンツとしてJavaプログラムを採用しているが、採用するコンテンツは、その一部又は全部がJS（JavaScript）、PHP（Hypertext Preprocessor）、Perl（Practical Extraction and Report Language）、ActionScript、又はVBScript（Visual Basic Script）等のスクリプト言語で記述されたプログラム（スクリプト）であってもよい。従って、その一部にスクリプトを含むHtmlファイルを扱うことも可能である。これらのプログラムを採用する場合、ソースコードを第１コードとして扱い、前述のように、例えば呼び出し先のサブルーチンの第１コードを、呼び出し元の第１コード内にインライン展開するなどの方法により、第２コードを生成することができる。また、各スクリプトを実行するためのコード実行部１５３をソフトウェアで構成するのがよい。この場合において、いわゆるサーバサイドスクリプトに該当するプログラムを採用する場合には、再生アプリ１２５に又はこれとは別にサーバサイドスクリプトをクライアント端末で実行するための機能を持たせればよい。代替手段としては、コード実行部１５３にWEBサーバの機能を持たせることにより対応可能である。
【０２２６】
また、HTMLファイルを第１コード１１９として扱う場合には、サブルーチン管理回路１７１が特定のタグで囲まれた領域をサブルーチンとして識別できるように構成しておき、識別したサブルーチンごとにハッシュ値を計算しておく構成を採用することができる。これにより、例えば、携帯電話機１０１がコンテンツ１０７としてHTMLファイルをダウンロードする際に、そのハッシュ値に基づいて、変更された（重複しない）サブルーチンを特定し、その変更部分だけをダウンロードすることができる。この方法を採用することにより、差分データの取得処理を高速化することができる。なお、このような処理を利用する組み込みシステムとしては、例えば、予め決められたウェブサイトのデータを定期的に取得するように構成されたＷｅｂ巡回ロボットなどが考えられる。
［キャッシュ更新処理］
【０２２７】
実施例では、サブルーチン管理表キャッシュ２０５内の先頭位置から順にエントリを参照し、キャッシュアウトカウント値が０又は最小のエントリを１つ検出し、サブルーチン管理表２０３内にある対応するサブルーチンのエントリと書き換えていたが、次のようなアルゴリズムを採用することができる。すなわち、サブルーチン管理表２０３へ書き戻す方法としては、サブルーチン管理表キャッシュ２０５内を検索し、キャッシュアウトカウントが０のエントリを全て書き戻す方法、起動してから一定時間実行されていないコンテンツに対応するエントリを優先的に書き戻す方法がある。サブルーチン管理表キャッシュ２０５へ格納する方法としては、各サブルーチンから参照される別のサブルーチンを特定する呼び出し関係表を作成しておき、この表に基づいて、呼び出されたサブルーチンとそのサブルーチンから参照される別のサブルーチンの各エントリを格納する方法がある。
［サブルーチン定義値］
【０２２８】
実施例では、第１コード生成時にコンパイラを用いてサブルーチン定義値を第１コード内に埋め込む方法を提示したが、これに限られない。例えば、プログラマ自身がソースコードにサブルーチン定義値を書き込んでもよい。或いは、或るサブルーチンの第１コードから呼び出される別のサブルーチンの数や頻度及び別のサブルーチンからこのサブルーチンが呼び出される回数や頻度を判断してサブルーチン定義値を付与するプログラムを用意し、これを用いてサブルーチン定義値をサブルーチンの第１コード内に書き込んでもよい。そのプログラムは、サブルーチンの第１コードを第２コードへ変換するのに要する時間に基づいてサブルーチンを定義値を付与するものであってもよい。
［プリコンパイルの順序］
【０２２９】
実施例では、プリコンパイル対象の第１コード１１９が複数存在する場合、すなわちＪＩＴフラグが“req”のサブルーチンのエントリが処理待ちの状態で複数存在する場合、優先度の高いサブルーチンから順に第１コードをプリコンパイルしたが、これに限られない。プリコンパイルは、例えば、以下のいずれかの方法で行うことが可能である。
【０２３０】
（１）コンテンツ１０７の実行中にサブルーチンが呼び出されたが、それより前に呼び出されたサブルーチンの第１コード１１９が第２コード１２１へ変換されていないとき（ＪＩＴフラグが“req”のエントリが存在するとき）は、プリコンパイル回路１７３は、それらのサブルーチンのうち最後に呼び出されたサブルーチンの第１コード１１９から順に第２コード１２１へ変換することができる。
【０２３１】
（２）コンテンツ１０７に対応する表示物を表示するディスプレイを備えておく。そして、コンテンツ１０７の実行中にサブルーチンが呼び出されたが、それより前に呼び出されたサブルーチンの第１コード１１９から第２コード１２１が生成されていないとき（プリコンパイル待ちのサブルーチンが存在するとき）は、サブルーチン管理回路１７１は、上記ディスプレイ上で、中央の表示物、最前面の表示物、又は最も大きい表示物に対応するコンテンツに含まれるサブルーチンの第１コード１１９から優先的に第２コード１２１が生成されるように実行制御を行うことができる。
【０２３２】
（３）ディスプレイ上に表示される矢印等の指示部を移動させ、及び表示物を指示部によって選択するための操作部をさらに備えておく。そして、コンテンツ１０７の実行中にサブルーチンが呼び出されたが、プリコンパイル待ちのサブルーチンが存在するときは、サブルーチン管理回路１７１は、ディスプレイ上で、指示部と重っている表示物又は指示部によって選択された表示物に対応するコンテンツ１０７に含まれるサブルーチンの第１コード１１９から優先的に第２コード１２１が生成されるように実行制御を行うことができる。
【図面の簡単な説明】
【０２３３】
【図１】本発明を適用した携帯電話機の基本構成を示す図。
【図２】コンテンツ管理表、サブルーチン管理表、及びサブルーチン管理表キャッシュの構成を示す図。
【図３】プリコンパイル回路の動作速度を定める動作速度定義表。
【図４】コンテンツの実行時におけるメモリ、不揮発性記録媒体、キャッシュメモリの構成、及びこれらを利用したハードウェアの基本動作を示す図。
【図５】コンテンツの実行開始時におけるサブルーチン管理回路の処理のフローチャート。
【図６】プロセッサ及びサブルーチン管理回路によるサブルーチン管理表検索・実行処理のフローチャート。
【図７】プリコンパイル時における第１コード処理部の動作のフローチャート。
【図８】プリコンパイルの開始から終了までの間におけるプリコンパイル回路１７３による処理のフローチャート。
【図９】プリコンパイル制御回路によるプリコンパイル回路の動作速度制御のフローチャート。
【図１０】サブルーチン管理回路によるサブルーチン管理表キャッシュの更新処理のフローチャート。
【図１１】携帯電話機の基本動作のシーケンシャル図。
【図１２】サブルーチン管理回路によるコンテンツ終了処理のフローチャート。
【図１３】携帯電話機及びコンテンツ配信サーバのそれぞれの構成及び連携方法を示す図。
【図１４】サブルーチン管理部によるコンテンツ登録処理のフローチャート。
【符号の説明】
【０２３４】
１０１…携帯電話機
１０３…バス
１０５…ハードウェア
１０７，１３０３…コンテンツ
１０９…ソフトウェア
１１１…周辺機能部
１１３…プロセッサ
１１５…不揮発性記録媒体
１１７…メモリ
１１９，１３１３…第１コード
１２１…第２コード
１２３…第１コード処理部
１２５…再生アプリ
１２７…ＯＳ、１２９…仮想マシン
１３１…ネイティブコード
１３３…サブルーチン管理プログラム
１３５…プリコンパイル制御プログラム
１５３…仮想マシン
１５９…ＪＩＴコンパイラ
１７１…サブルーチン管理回路
１７３…プリコンパイル回路
１７７…連想メモリ
２０１…コンテンツ管理表
２０３…サブルーチン管理表
２０５…サブルーチン管理表キャッシュ
２３７…ハッシュ値管理表
２３９…第１コードサイズ管理表
２４１…ダウンロード元管理表
２４３…サブルーチン共用表
３０１…動作速度定義表
１３０１…コンテンツ配信サーバ
１３０５…クライアントサブルーチンリスト
１３０７…サーバサブルーチンリスト
【図１】
2009211190.tif 000003
【図２】
2009211190.tif 000004
【図３】
2009211190.tif 000005
【図４】
2009211190.tif 000006
【図５】
2009211190.tif 000007
【図６】
2009211190.tif 000008
【図７】
2009211190.tif 000009
【図８】
2009211190.tif 000010
【図９】
2009211190.tif 000011
【図１０】
2009211190.tif 000012
【図１１】
2009211190.tif 000013
【図１２】
2009211190.tif 000014
【図１３】
2009211190.tif 000015
【図１４】
2009211190.tif 000016