(57)【要約】プログラムをクラスファイルからランタイム実行形式に変換するローダ部（１０２）と、ランタイム実行形式をテンポラリランタイム実行形式に変換するランタイムセービング処理を行うランタイムセービング部（１０３）と、テンポラリランタイム実行形式を記憶するテンポラリランタイム実行形式記憶部（３０２）と、テンポラリランタイム実行形式をランタイム実行形式に変換するポストロード処理を行うポストローダ部（１０５）とを備え、プログラムの起動が指示された際に、テンポラリランライム実行形式記憶部にテンポラリランタイム実行形式が存在するか否かを判断し、存在しない場合にはローダ部にランタイム実行形式への変換を要求し、存在する場合にはポストローダ部にランタイム実行形式への変換を要求する。これにより、プログラム配信サービスにおいて、ダウンロードプログラムの起動時間を短縮することが可能となる。
2003107186.tif 000002
【特許請求の範囲】
【請求項１】
受信したプログラムを解釈実行処理する端末装置であって、
前記受信したプログラムを記憶するプログラム記憶部と、
前記プログラム記憶部に記憶されているプログラムをランタイム実行形式に変換するローダ部と、
前記ローダ部が変換したランタイム実行形式もしくは前記プログラム記憶部に記憶されているプログラムに基づいて生成されたテンポラリランタイム実行形式を記憶するテンポラリランタイム実行形式記憶部と、
前記テンポラリランタイム実行形式記憶部に記憶されているテンポラリランタイム実行形式をランタイム実行形式に変換するポストローダ部と、
ランタイム実行形式を解釈実行するインタプリタ部と、
プログラムの起動が指示された際に、前記テンポラリランライム実行形式記憶部にテンポラリランタイム実行形式が存在するか否かを判断し、存在しない場合には前記ローダ部にランタイム実行形式への変換を要求し、存在する場合には前記ポストローダ部にランタイム実行形式への変換を要求する制御部とを備えることを特徴とするプログラム実行処理端末装置。
【請求項２】
前記ローダ部が変換したランタイム実行形式をテンポラリランタイム実行形式に変換するランタイムセービング部をさらに備え、
前記テンポラリランタイム実行形式記憶部は、前記ランタイムセービング部が変換したテンポラリランタイム実行形式を記憶することを特徴とする、請求項１記載のプログラム実行処理端末装置。
【請求項３】
前記プログラム記憶部に記憶されているプログラムをテンポラリランタイム実行形式に変換するプレロード処理を行うプレローダ部をさらに備え、
前記テンポラリランタイム実行形式記憶部は、前記プレローダ部が変換したテンポラリランタイム実行形式を記憶することを特徴とする、請求項１記載のプログラム実行処理端末装置。
【請求項４】
前記ローダ部によって変換されたランタイム実行形式を記憶するランタイム実行形式記憶部をさらに備え、
ランタイム実行形式は、前記ランタイム実行形式記憶部における、当該ランタイム実行形式に含まれる所定データの格納アドレスを示すポインタを含み、
前記テンポラリランタイム実行形式は、前記ポインタに相当する情報を間接参照表現により示した参照値データを含むことを特徴とする、請求項１記載のプログラム実行処理端末装置。
【請求項５】
前記テンポラリランタイム実行形式は、当該テンポラリランタイム実行形式がランタイム実行形式に変換されたときのサイズを示すデータを含むことを特徴とする、請求項１記載のプログラム実行処理端末装置。
【請求項６】
前記プログラム記憶部に記憶されているプログラムをテンポラリランタイム実行形式に変換するプレローダ部を更に備え、
前記テンポラリランタイム実行形式記憶部は、前記ランタイムセービング部と前記プレローダ部が変換したテンポラリランタイム実行形式を記憶することを特徴とする、請求項２記載のプログラム実行処理端末装置。
【請求項７】
前記ローダ部がプログラムをランタイム実行形式に変換する処理中と、前記ランタイムセービング部がランタイム実行形式をテンポラリランタイム実行形式に変換する処理中とを、同一の表示画面出力にすることを特徴とする、請求項２記載のプログラム実行処理端末装置。
【請求項８】
前記プログラム記憶部に記憶されているプログラムに対する高速起動設定情報を記憶する設定情報記憶部を更に備え、
前記ランタイムセービング部は、前記設定情報記憶部に記憶している高速起動設定情報に基づいて、テンポラリランタイム実行形式に変換するプログラムを選択決定することを特徴とする、請求項２記載のプログラム実行処理端末装置。
【請求項９】
前記プログラム記憶部に記録されているプログラムを解釈実行した履歴情報を記憶するインタプリット履歴記憶部を更に備え、
前記ランタイムセービング部は、前記インタプリット履歴記憶部に記憶している履歴情報に基づいて、テンポラリランタイム実行形式に変換するプログラムを選択決定することを特徴とする、請求項２記載のプログラム実行処理端末装置。
【請求項１０】
プログラムを受信する処理と、前記プレローダ部がプログラムをテンポラリランタイム実行形式に変換してテンポラリランタイム実行形式を生成する処理とを、連続して行うことを特徴とする、請求項３記載のプログラム実行処理端末装置。
【請求項１１】
プログラムを受信する処理中と、前記プレローダ部がプログラムをテンポラリランタイム実行形式に変換してテンポラリランタイム実行形式を生成する処理中とを、同一の表示画面出力にすることを特徴とする、請求項１０記載のプログラム実行処理端末装置。
【請求項１２】
前記プログラム記憶部に記憶されているプログラムに対する高速起動設定情報を記憶する設定情報記憶部を更に備え、
前記プレローダ部は、前記設定情報記憶部に記憶している高速起動設定情報に基づいて、テンポラリランタイム実行形式に変換するプログラムを選択決定することを特徴とする、請求項３記載のプログラム実行処理端末装置。
【請求項１３】
前記プログラム記憶部に記録されているプログラムを解釈実行した履歴情報を記録するインタプリット履歴記憶部を更に備え、
前記プレローダ部は、前記インタプリット履歴記憶部に記憶している履歴情報に基づいて、テンポラリランタイム実行形式に変換するプログラムを選択決定することを特徴とする、請求項３記載のプログラム実行処理端末装置。
【請求項１４】
前記情報端末装置の機器状態に基づいて、テンポラリランタイム実行形式への変換を行う開始タイミングを決定し、前記プレローダ部に処理の開始を要求するプレロード制御部を更に備え、
前記プレローダ部は、前記プレロード制御部から開始が要求された際に、プログラムをテンポラリランタイム実行形式に変換する処理を行うことを特徴とする請求項３記載のプログラム実行処理端末装置。
【請求項１５】
前記機器状態は、前記情報端末装置に対してユーザの操作が加えられていない待ち受け状態の連続経過時間であって、
前記プレロード制御部は、前記待ち受け状態の連続経過時間と、前もって設定されている開始時間長とを比較した結果に基づいて、開始タイミングを決定することを特徴とする、請求項１４記載のプログラム実行処理端末装置。
【請求項１６】
前記機器状態は、前記情報端末装置が内部で管理している現在時刻であって、
前記プレロード制御部は、前記現在時刻と、前もって設定されている開始時刻とを比較した結果に基づいて、開始タイミングを決定することを特徴とする、請求項１４記載のプログラム実行処理端末装置。
【請求項１７】
前記機器状態は、折りたたみ式の情報端末装置における折りたたみ端末閉開状態であって、
前記プレロード制御部は、前記折りたたみ端末閉開状態の変化に基づいて、開始タイミングを決定することを特徴とする、請求項１４記載のプログラム実行処理端末装置。
【請求項１８】
前記機器状態は、前記情報端末装置に対するユーザの入力操作に応じて遷移する端末内部遷移状態であって、
前記プレロード制御部は、前記端末内部遷移状態に基づいて、開始タイミングを決定することを特徴とする、請求項１４記載のプログラム実行処理端末装置。
【請求項１９】
前記プレローダ部がプログラムをテンポラリランタイム実行形式に変換する処理を開始する条件と、変換の対象となるプログラムとの対応を示した対応情報を記録するプレロード処理対応記憶部を備え、
前記プレロード制御部は、前記プレロード処理対応記憶部に記憶している対応情報に基づいて、開始タイミングを決定とテンポラリランタイム実行形式に変換する対象となるプログラムを選択決定することを特徴とする、請求項１４記載のプログラム実行処理端末装置。
【請求項２０】
前記プレロード処理対応記憶部に記憶される対応情報において、前記プレローダ部がプログラムをテンポラリランタイム実行形式に変換する処理を開始する条件と、当該条件を満たした後にユーザによって実行されることが予想されるプログラムとが対応付けられていることを特徴とする、請求項１９記載のプログラム実行処理端末装置。
【請求項２１】
前記情報端末装置は、プログラムを受信することなしに動作可能なアプリケーションを保持しており、
前記アプリケーションからの指示通知を受信し、受信した前記アプリケーションからの指示通知に基づいて、テンポラリランタイム実行形式への変換を行う開始タイミングを決定し、前記プレローダ部に処理の開始を要求するプレロード指示通知部を更に備え、
前記プレローダ部は、前記プレロード指示通知部から開始が要求された際に、プログラムをテンポラリランタイム実行形式に変換する処理を行うことを特徴とする、請求項３記載のプログラム実行処理端末装置。
【請求項２２】
前記アプリケーションからの指示通知には、前記プログラム記憶部に記憶されているプログラムから特定のプログラムを判別するためのプログラム識別子を含み、
前記プレロード指示通知部は、受信した指示通知に含まれるプログラム識別子を指定して、前記プレローダ部に処理の開始を要求し、
前記プレローダ部は、前記プレロード指示通知部からの開始の要求に含まれるプログラム識別子に基づいて、テンポラリランタイム実行形式に変換する対象となるプログラムを決定することを特徴とする、請求項２１記載のプログラム実行処理端末装置。
【請求項２３】
受信したプログラムを解釈実行処理する方法であって、
前記受信したプログラムをプログラム記憶部に記憶するプログラム記憶ステップと、
前記プログラム記憶部に記憶されているプログラムをランタイム実行形式に変換するロードステップと、
前記ロードステップで変換したランタイム実行形式もしくは前記プログラム記憶部に記憶されているプログラムをテンポラリランタイム実行形式に変換する変換ステップと、
前記変換ステップで変換したテンポラリランタイム実行形式をテンポラリランタイム実行形式記憶部に記憶するテンポラリランタイム実行形式記憶ステップと、
プログラムの起動が指示された際に、前記テンポラリランライム実行形式記憶部にテンポラリランタイム実行形式が存在するか否かを判断する判断ステップと、
前記判断ステップの判断の結果、前記テンポラリランライム実行形式記憶部にテンポラリランタイム実行形式が存在した場合に、前記テンポラリランタイム実行形式記憶部に記憶されているテンポラリランタイム実行形式をランタイム実行形式に変換するポストロードステップと、
前記ポストロードステップで変換したランタイム実行形式を解釈実行する解釈ステップとを備えることを特徴とする、プログラム実行処理方法。
【請求項２４】
前記ロードステップで変換したランタイム実行形式はランタイム実行形式記憶部に記憶され、
ランタイム実行形式は、前記ランタイム実行形式記憶部における、当該ランタイム実行形式に含まれる所定データの格納アドレスを示すポインタを含み、
前記テンポラリランタイム実行形式は、前記ポインタに相当する情報を間接参照表現により示した参照値データを含むことを特徴とする、請求項２３記載のプログラム実行処理方法。
【請求項２５】
前記テンポラリランタイム実行形式は、当該テンポラリランタイム実行形式がランタイム実行形式に変換されたときのサイズを示すデータを含むことを特徴とする、請求項２３記載のプログラム実行処理方法。
【請求項２６】
受信したプログラムを解釈実行処理するためのプログラムであって、コンピュータに、
前記受信したプログラムをプログラム記憶部に記憶するプログラム記憶ステップと、
前記プログラム記憶部に記憶されているプログラムをランタイム実行形式に変換するロードステップと、
前記ロードステップで変換したランタイム実行形式もしくは前記プログラム記憶部に記憶されているプログラムをテンポラリランタイム実行形式に変換する変換ステップと、
前記変換ステップで変換したテンポラリランタイム実行形式をテンポラリランタイム実行形式記憶部に記憶するテンポラリランタイム実行形式記憶ステップと、
プログラムの起動が指示された際に、前記テンポラリランライム実行形式記憶部にテンポラリランタイム実行形式が存在するか否かを判断する判断ステップと、
前記判断ステップの判断の結果、前記テンポラリランライム実行形式記憶部にテンポラリランタイム実行形式が存在した場合に、前記テンポラリランタイム実行形式記憶部に記憶されているテンポラリランタイム実行形式をランタイム実行形式に変換するポストロードステップと、
前記ポストロードステップで変換したランタイム実行形式を解釈実行する解釈ステップとを実行させるためのプログラム。
【請求項２７】
前記ロードステップで変換したランタイム実行形式はランタイム実行形式記憶部に記憶され、
ランタイム実行形式は、前記ランタイム実行形式記憶部における、当該ランタイム実行形式に含まれる所定データの格納アドレスを示すポインタを含み、
前記テンポラリランタイム実行形式は、前記ポインタに相当する情報を間接参照表現により示した参照値データを含むことを特徴とする、請求項２６記載のプログラム。
【請求項２８】
前記テンポラリランタイム実行形式は、当該テンポラリランタイム実行形式がランタイム実行形式に変換されたときのサイズを示すデータを含むことを特徴とする、請求項２６記載のプログラム。
【発明の詳細な説明】
技術分野
本発明は、受信したプログラムを解釈実行処理する情報端末装置、プログラム実行処理方法及びプログラムに関するものであり、特に、高速なプログラムの起動を実現する情報端末装置、プログラム実行処理方法及びプログラムに関する。
背景技術
近年、携帯電話やＰＨＳ（Ｐｅｒｓｏｎａｌ  Ｈａｎｄｙｐｈｏｎｅ  Ｓｙｓｔｅｍ）、ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｃｅ）などに代表される携帯情報端末に備わっている通信機能を用いたデータ配信サービスが普及している。
その代表例として、画像や着信メロディなどのコンテンツの配信サービスがあげられる。また、単なるデータではなくプログラムをダウンロードし、携帯情報端末上でアプリケーションとして実行させることができる。つまり、プログラムをダウンロードすることによって、携帯情報端末に最初から用意された機能（アプリケーション）だけではなく、後から新たにさまざまな機能を追加し、使用することが可能となる。
このプログラム配信サービスでは、例えば、電子電話帳や電子スケジュール帳などのＰＩＭ（Ｐｅｒｓｏｎａｌ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｍａｎａｇｅｒ）アプリケーションや、ゲームアプリケーションなどの提供を行う。ユーザは、自分の使用したい機能、あるいは自分の使いやすいユーザインタフェース、自分の気に入った画面構成などを備えたアプリケーションを自由に選択し、プログラムをダウンロードすることにより、選択したアプリケーションを使用することが可能となる。
プログラム配信の仕組みを実現するために、有望なソフトウェアアーキテクチャとしてＪａｖａ（ＴＭ）がある。Ｊａｖａ（ＴＭ）は仮想マシンの仕組みを備え、機器のハードウェアやＯＳに依存せずにプログラムを動作させることができるため、ワークステーションやパーソナルコンピュータ（以下、ＰＣと略称する）などのコンピューティング分野においてのみならず、家電機器に対しても有効なアーキテクチャと見なされている。
また、携帯情報端末において、既に多くの機種にＪａｖａ（ＴＭ）仮想マシンが搭載されており、プログラム配信サービスが開始されている。今後、仮想マシンの仕組みを前提としたプログラム配信サービスは、さらに普及していくものと予想される。
しかしながら、携帯情報端末上で、仮想マシンの仕組みを用いて、ダウンロードしたアプリケーションを実行させる場合に問題になるのが、その起動時間の長さである。
ここでの起動時間とは、ユーザあるいは携帯情報端末に搭載されている他のアプリケーション（ブラウザ、メーラ、電話など）が、携帯情報端末内部の仮想マシンに対して、特定のアプリケーションの解釈実行を開始するという指示を与えてから、携帯情報端末の表示画面上に開始が指示されたアプリケーションの初期画面が出力されるまでの経過時間を指す。つまり、起動時間とは、アプリケーションが使用可能になるまでの待ち時間であり、ユーザにとって、実際にアプリケーションを利用していない余分な時間であるため、起動時間が長くなるほど、アプリケーションの実行効率が低下する。
例えば、一般的なＪａｖａ（ＴＭ）仮想マシンの起動処理は、大きく以下の３つの処理から構成される。以下、Ｊａｖａ（ＴＭ）を用いて説明するが、他の仮想マシンあってもよいことを、予め記述しておく。
（１）初期化処理
（２）クラス検証処理
（３）クラスロード処理
それぞれの処理についての詳細は、文献（Ｔｉｍ  Ｌｉｎｄｈｏｌｍ  ａｎｄ  Ｆｒａｎｋ  Ｙｅｌｌｉｎ：“Ｔｈｅ  Ｊａｖａ（ＴＭ）  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ”，Ａｄｄｉｓｏｎ−Ｗｅｓｌｅｙ，１９９７）を参照されたい。ここでは以降の説明に必要な、処理の概要のみ述べることとする。
Ｊａｖａ（ＴＭ）では、プログラムはクラスファイルと呼ばれる１つ以上のファイルから構成される。プログラムがダウンロードされる際には、通常クラスファイルは１つのファイルにパッケージされた形式で提供されるが、ダウンロード後、これは１つ以上のクラスファイルとして展開され、携帯情報端末内のファイルとして保存される。
（１）初期化処理は、Ｊａｖａ（ＴＭ）仮想マシンの実行を可能にするために必要な初期作業である。具体的には、仮想マシンが使用するメモリ領域（Ｊａｖａヒープ領域など）を確保する処理、ガーベジコレクション処理の初期化、クラスローダの初期化、スレッド管理の初期化などを行う。
（２）クラス検証処理は、実行の対象であるプログラムの安全性を保証するために行う処理である。具体的には、クラスファイルの形式の検査と、クラスファイルに含まれるバイトコードなどがＪａｖａ（ＴＭ）の仕様に準拠していることを検査する。
（３）クラスロード処理は、クラスファイルを、Ｊａｖａ（ＴＭ）仮想マシンが実行可能な記録形式（以下ランタイム実行形式と呼ぶ）として、仮想マシンが使用するメモリ領域上に展開する処理である。対象となるクラスファイルは、実行するプログラムの最初の実行メソッドとなるｍａｉｎメソッドを持ったクラスファイルと、そのクラスファイルから参照を辿ることのできる全てのクラスファイルである。
以上のような各処理が含まれるため、仮想マシンの仕組みを用いたアプリケーションの起動時間は、携帯情報端末の機械語で記述されたアプリケーション（ネイティブアプリケーション）を起動するのに比して、長いものになっていた。
起動時間のうち、（２）クラス検証処理や（３）クラスロード処理は、概してアプリケーション（プログラム）のサイズが大きくなればなるほど、その処理に長い時間を要するようになり、アプリケーションの実行効率が低下する。特に、ＰＩＭアプリケーションのように、頻繁に何度も立ち上げが行われるような種類のアプリケーションは、起動時間が長くなることで、大きく利便性を欠いたものになりがちである。
これに対し、Ｊａｖａ（ＴＭ）処理系のクラスファイル形式に対して、前もって何らかの処理を行うことによって、アプリケーションの実行効率を高めるための技術が、特開２０００−２９７０６号公報「クラスファイルのプリプロセシング及びパツケージングのための方法及び装置」および特開平１１−３２７９０６号公報「動的リンキングおよび動的ローデイングの存在下において動的にデイスパツチされたコールの静的結合」に開示されている。
しかしながら、上述した特開２０００−２９７０６号公報および特開平１１−３２７９０６号公報で開示された技術は、いずれもアプリケーションの解釈実行速度の高速化や、メモリの効率的な利用を目的としたものであり、ハードウェア資源に関して価格やサイズなどの制約が厳しい携帯情報端末などの情報家電機器において、Ｊａｖａ（ＴＭ）などの処理系を適用した場合に問題になりがちな、起動時間の短縮を達成するためのものではなかった。
本発明は、上記問題を解決するためになされたものであり、起動処理の中の（３）クラスロード処理を「アプリケーションを初めて起動するときにだけ必要なクラスロード処理」と「アプリケーションの２度目以降の起動でも必要なクラスロード処理」の２つに分け、「初めてのクラスロード処理」による処理結果を、クラスファイル形式とは別の記録形式（以下、テンポラリランタイム実行形式と呼ぶ）として格納しておくことにより、そのプログラムの起動の際に「２度目以降のクラスロード処理」しか行わなくてもよいようにし、プログラムの起動時間の短縮を図ることを目的としている。
発明の開示
上記課題を解決するために、本発明のプログラム実行処理端末装置は、プログラムを例えばＪａｖａ（ＴＭ）のクラスファイルからランタイム実行形式に変換するローダ部と、前記ローダ部が変換したランタイム実行形式もしくは前記プログラム記憶部に記憶されているプログラムに基づいて生成されたテンポラリランタイム実行形式を記憶するテンポラリランタイム実行形式記憶部と、前記テンポラリランタイム実行形式記憶部に記憶されているテンポラリランタイム実行形式をランタイム実行形式に変換するポストロード処理を行うポストローダ部とを備え、プログラムの起動が指示された際に、前記テンポラリランライム実行形式記憶部にテンポラリランタイム実行形式が存在するか否かを判断し、存在しない場合には前記ローダ部にランタイム実行形式への変換を要求し、存在する場合には前記ポストローダ部にランタイム実行形式への変換を要求する。
なお、前記ローダ部が変換したランタイム実行形式をテンポラリランタイム実行形式に変換することによってテンポラリランタイム実行形式を得てもよい。このように、プログラムは最初の１回目に起動される時は、通常のロード処理を行い、ロード処理の後にランタイムセービング処理を行い、テンポラリランタイム実行形式を生成しておくことで、そのプログラムは２回目以降の起動では、テンポラリランタイム形式からランタイム形式を生成するポストロード処理を通常のロード処理に置き換えることが可能となり、２回目以降のプログラムの起動に要する処理時間を短縮することができる。
また、前記プログラム記憶部に記憶されているプログラムをテンポラリランタイム実行形式に変換することによってテンポラリランタイム実行形式を得てもよい。このように、予めプログラムをプレロード処理して、テンポラリランタイム実行形式を生成しておくことによって、プログラムの起動は最初の１回目から、ポストロード処理によって通常のロード処理に置き換えることが可能となり、プログラムの起動に要する処理時間を短縮することができる。
また、本発明のプログラム実行処理方法は、前記受信したプログラムをプログラム記憶部に記憶するプログラム記憶ステップと、前記プログラム記憶部に記憶されているプログラムをランタイム実行形式に変換するロードステップと、前記ロードステップで変換したランタイム実行形式もしくは前記プログラム記憶部に記憶されているプログラムをテンポラリランタイム実行形式に変換する変換ステップと、前記変換ステップで変換したテンポラリランタイム実行形式をテンポラリランタイム実行形式記憶部に記憶するテンポラリランタイム実行形式記憶ステップと、プログラムの起動が指示された際に、前記テンポラリランライム実行形式記憶部にテンポラリランタイム実行形式が存在するか否かを判断する判断ステップと、前記判断ステップの判断の結果、前記テンポラリランライム実行形式記憶部にテンポラリランタイム実行形式が存在した場合に、前記テンポラリランタイム実行形式記憶部に記憶されているテンポラリランタイム実行形式をランタイム実行形式に変換するポストロードステップと、前記ポストロードステップで変換したランタイム実行形式を解釈実行する解釈ステップとを備える。
また、本発明のプログラムは、上記のプログラム実行処理方法をコンピュータに実行させるためのものである。このプログラムはコンピュータ読み取り可能な記録媒体に格納された状態で情報端末装置等のコンピュータに供給されてもよいし、通信回線を通じて情報端末装置等のコンピュータに供給されてもよい。
発明を実施するための最良の形態
以下、本発明の実施の形態について、図面を用いて詳細に説明する。
（実施の形態１）
携帯情報端末を用いたプログラムのダウンロードサービスでは、既にＪａｖａ（ＴＭ）の仕組みを用いたものが普及しているため、本発明はその仕組みを拡張することで実現することができる。本説明においては、Ｊａｖａ（ＴＭ）の仕組みを用いた場合にはどのような実施の形態になるかを適宜交えながら説明を行う。
図１は、本発明の実施の形態１における、携帯情報端末のハードウェア構成を示す図である。図１において、中央演算装置（ＣＰＵ）１と、記憶装置２と、入力装置３と、出力装置４と、送受信装置５を備えており、それぞれシステムバス６を介して接続されている。
記憶装置２は、ＲＯＭ、ＲＡＭ、およびハードディスクなどで構成され、ＣＰＵ１が処理する際に用いられる記憶領域やプログラム自体を記憶する領域として用いられる。入力装置３は、キーボードやキーボタン、マウス、マイクなどで構成され、ユーザからの指示の入力処理を行う。出力装置４は、ディスプレイなどの表示装置やスピーカーなどで構成され、ＣＰＵ１から出力されるデータの画面表示や、音声データの再生などの処理を行う。送受信装置５は、無線あるいは有線伝送路を介してデータ通信を行い、ＣＰＵ１は、送受信装置５を介して外部装置（図示せず）からプログラムなどのデータをダウンロードすることができる。
図２は、本実施の形態のプログラム実行処理端末装置の構成を示すブロック図である。プログラム実行処理端末装置は、プログラムダウンロード部１０１と、ローダ部１０２と、ランタイムセービング部１０３と、プレローダ部１０４と、ポストローダ部１０５と、インタプリタ部１０６と、制御部１０７と、プログラム記憶部３０１と、テンポラリランタイム実行形式記憶部３０２と、ランタイム実行形式記憶部３０３を備えている。
プログラムダウンロード部１０１は、プログラム配信先よりプログラムを受信し、受信したプログラムを制御部１０７を介してプログラム記憶部３０１に記憶格納する。プログラムダウンロード部１０１は、従来の携帯情報端末が備えるプログラムのダウンロードの仕組みを用いて実現することができる。
ローダ部１０２は、制御部１０７からの要求に従い、プログラム記憶部３０１に格納されたプログラムをランタイム実行形式に変換し、ランタイム実行形式記憶部３０３に格納する処理を行う。また、インタプリタ部１０６にプログラムの実行開始を通知する。さらに、変換したランタイム実行形式をランタイムセービング部１０３に通知し、ランタイムセービング処理を要求する。
ランタイムセービング部１０３は、ローダ部１０２からの要求に従い、ランタイム実行形式記憶部３０３に格納されたランタイム実行形式をテンポラリランタイム実行形式に変換し、テンポラリランタイム実行形式記憶部３０２に格納する処理を行う。
プレローダ部１０４は、制御部１０７からの要求に従い、プログラム記憶部３０１に格納されたプログラムをテンポラリランタイム実行形式に変換し、テンポラリランタイム実行形式記憶部３０２に格納する処理を行う。
ポストローダ部１０５は、テンポラリランタイム実行形式記憶部３０２に記憶されたテンポラリランタイム実行形式を、ランタイム実行形式に変換し、ランタイム実行形式記憶部３０３に格納する処理を行う。また、インタプリタ部１０６にプログラムの実行開始を通知する。
インタプリタ部１０６は、ローダ部１０２またはポストローダ部１０５からの実行開始の通知に従い、ランタイム実行形式記憶部３０３に格納されているランタイム実行形式を解釈実行する。Ｊａｖａ（ＴＭ）の仕組みを用いた場合、このインタプリタ部１０６は、従来のＪａｖａ（ＴＭ）仮想マシンを用いて実現することができる。
制御部１０７は、プログラムの起動が指示された際に、テンポラリランタイム実行形式記憶部３０２に起動対象のプログラムのテンポラリランタイム実行形式が存在するか否かを判断し、存在しない場合にはローダ部１０２にランタイム実行形式への変換を要求し、存在する場合にはポストローダ部１０５にランタイム実行形式への変換を要求する。テンポラリランタイム実行形式をランタイム実行形式へ変換するには、後述するように、大部分のデータをコピーするとともに、間接参照表現のアドレスデータを実際のアドレスへ変換するだけでよいため、プログラムをランタイム実行形式に変換する場合と比較して処理時間は短い。これにより、既にランタイム実行形式を保持しているプログラムに関しては、起動時間を短縮することが可能となる。
プログラム記憶部３０１は、プログラムダウンロード部１０１がプログラム配信先より受信したプログラムを格納する。なお、フラッシュメモリ等に代表される不揮発性メモリ、すなわち携帯情報端末の電源がＯＦＦになっても記録が保持され続けるデバイスによって実現された場合、携帯情報端末の電源がＯＦＦになった場合にプログラムの再ダウンロードを防ぐことが可能となる。また、ダウンロードしたプログラムだけでなく、前もって特定のプログラムが格納されていてもよい。さらに、ＲＯＭなどの格納データが消去不能なメモリを用いて、前もって格納されているプログラムは固定であってもよい。
ランタイム実行形式記憶部３０３は、ローダ部１０２またはポストローダ部１０５が変換したランタイム実行形式を格納する。ランタイム実行形式は解釈実行を行う対象として、インタプリタ部１０６から直接アクセスされる記憶領域であるため、高速なアクセスが可能な記憶デバイスによって実現されたほうがよい。例えば揮発性のＲＡＭなどがこれに使用される。
テンポラリランタイム実行形式記憶部３０２は、ランタイムセービング部１０３が変換したテンポラリランタイム実行形式を格納する。テンポラリランタイム実行形式記憶部３０２は、特に揮発性・不揮発性を問わない。プログラムの起動時間の短縮を実現するためには、データのアクセス速度が、プログラム記憶部３０１の実現に用いられているものよりは高速な記憶デバイスが用いられることが望ましい。なお、テンポラリランタイム実行形式記憶部３０２として例えばフラッシュメモリのような不揮発性のメモリを用いれば、携帯情報端末の電源を切る直前にテンポラリランタイム実行形式記憶部３０２に記憶されていたテンポラリランタイム実行形式を、一旦電源を切ってから次に電源を入れたときに利用することができるため好ましい。
なお、本実施の形態ではランタイムセービング部１０３とプレローダ部１０４を共に備えているとしたが、本発明はこれに限定されない。すなわち、どちらか一方のみを備えていてもよい。この場合にも本実施の形態と同様に、プログラムの起動時間を短縮することができる。
図３は、ローダ部１０２、ランタイムセービング部１０３、プレローダ部１０４、ポストローダ部１０５の各処理部で行う、データの流れの一例を示す図である。プログラム配信先からプログラム２０１をダウンロードしてから、ランタイム実行形式２０３が解釈実行されるまでの、データの変換の流れを示している。
まず、プログラム配信先から送信されたプログラム２０１をプログラムダウンロード部１０１が受信し、プログラム記憶部３０１に格納する。
次に、プログラム２０１の起動が指示されると、制御部１０７からの指示に従い、ローダ部１０２がプログラム２０１をランタイム実行形式２０３に変換し、インタプリタ部１０６がランタイム実行形式２０３を解釈実行する。また、同時にランタイムセービング部１０３がランタイム実行形式２０３をテンポラリランタイム実行形式２０２に変換し、テンポラリランタイム実行形式記憶部３０２に格納する。再度、プログラム２０１の起動が指示されると、制御部１０７からの指示に従い、ポストローダ部１０５がテンポラリランタイム実行形式２０２をランタイム実行形式２０３に変換し、インタプリタ部１０６がランタイム実行形式２０３を解釈実行する。
また、プレロード処理を行う場合のデータの変換の流れを以下に示す。プレローダ部１０４がプログラム２０１をテンポラリランタイム実行形式２０２に変換し、テンポラリランタイム実行形式記憶部３０２に格納する。プログラム２０１の起動が指示されると、制御部１０７からの指示に従い、ポストローダ部１０５がテンポラリランタイム実行形式２０２をランタイム実行形式２０３に変換し、インタプリタ部１０６がランタイム実行形式２０３を解釈実行する。
図４から図８は、図３で説明したプログラム２０１、ランタイム実行形式２０３、テンポラリランタイム実行形式２０２の構造の一例を示した。以下、順に説明する。
プログラム２０１は、携帯電話によって解釈実行が可能な形式を持ったデータとして獲得することができる。携帯電話にＪａｖａ（ＴＭ）の仕組みが用いられている場合には、Ｊａｖａ（ＴＭ）の実行形式であるクラスファイルがプログラム２０１としてダウンロードされる。
プログラム２０１の構造の一例を図４に示す。図４はプログラム２０１に記録されたデータ内容をＣ言語に倣って構造体表現したものである。ｕ１型、ｕ２型、ｕ４型はそれぞれ符号なしの１バイト、２バイト、４バイトのデータ量を表現している。Ｊａｖａ（ＴＭ）では、プログラム２０１は通常、１つ以上のクラスファイルから構成されるが、クラスファイル自体の構造はどのクラスファイルも同じである。クラスファイルの構造自体は、文献（Ｔｉｍ  Ｌｉｎｄｈｏｌｍ  ａｎｄ  Ｆｒａｎｋ  Ｙｅｌｌｉｎ：“Ｔｈｅ  Ｊａｖａ（ＴＭ）  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ”，Ａｄｄｉｓｏｎ−Ｗｅｓｌｅｙ，１９９７）に詳説されている。図４では特に、最上位に位置付けられる構造体のみ示している。
次に、ランタイム実行形式２０３の構造の一例を図５および図６に示す。ランタイム実行形式２０３は、ランタイム実行形式記憶部３０３に格納される連続したメモリイメージとして実現される。クラスファイルのフォーマット自体は先に述べたように規定されているが、ランタイム形式のフォーマットに関してはＪａｖａ（ＴＭ）仮想マシンの実装依存とされており、何ら規定はされていない。
図５および図６では、ランタイム実行形式２０３を、クラス単位のメモリイメージとして示している。Ｊａｖａ（ＴＭ）の実際のプログラムは、２つ以上のクラスファイルから構成されることも多いが、その場合には同様のメモリイメージがクラスファイルの数だけ生成されることになる。クラスを表現したメモリイメージはその中に、さらに下位の構造であるコンスタントプール構造のランタイム形式、インタフェース構造のランタイム形式、フィールド構造のランタイム形式、メソッド構造のランタイム形式、アトリビュート構造のランタイム形式を含んでいる。
図５および図６のメモリイメージの中で白い箱で示されたデータは、図４における同名のデータの値がそのまま記録されることを意味している。図５および図６のメモリイメージの中で網掛けで表現されているデータは、そのデータがメモリイメージの中の、他のデータ格納場所のアドレスを指す参照値（ポインタ）であることを表現している。具体的には、次の通りになっている。
「＊ｃｏｎｓｔａｎｔ＿ｐｏｏｌ」は、コンスタントプール構造のランタイム形式の先頭を指すポインタ、「（ｃｏｎｓｔａｎｔ＿ｐｏｏｌ＊）ｔｈｉｓ＿ｃｌａｓｓ」および「（ｃｏｎｓｔａｎｔ＿ｐｏｏｌ＊）ｓｕｐｅｒ＿ｃｌａｓｓ」は、コンスタントプール構造の中のエントリのアドレスを指すポインタ、「＊ｉｎｔｅｒｆａｃｅｓ」は、インタフェース構造のランタイム形式の先頭を指すポインタ、「＊ｆｉｅｌｄｓ」は、フィールド構造のランタイム形式の先頭を指すポインタ、「＊ｍｅｔｈｏｄｓ」は、メソッド構造のランタイム形式の先頭を指すポインタ、「＊ａｔｔｒｉｂｕｔｅｓ」は、アトリビュート構造のランタイム形式の先頭を指すポインタである。
なお、ポインタ値は必ずしも、そのポインタが含まれるのと同じクラスのメモリイメージの中の構造を指しているとは限らず、他のクラスのメモリイメージの構造を指している場合もある。
ランタイム実行形式２０３のメモリイメージはポインタを含んでおり、このポインタ値はメモリイメージ生成の際に一定の値には決定付けられない（ランタイム実行形式記憶部３０３中でのメモリイメージの配置位置によって、ポインタ値は変動するからである）。
さらに詳細には、図５および図６の中で描いたポインタ以外でも、コンスタントプール構造の中のエントリ、インタフェース構造の中のエントリ、フィールド構造の中のエントリ、メソッド構造の中のエントリ、アトリビュート構造の中のエントリの其々のそれぞれのデータの中にもポインタ値が含まれている可能性があるが、本説明中では割愛する。
次に、テンポラリランタイム実行形式２０２の構造の一例を図７および図８に示す。テンポラリランタイム実行形式２０２は、テンポラリランタイム実行形式記憶部３０２に格納される。メモリイメージとして記録されても、データをバイト列としたファイルとして記録されてもどちらでもよいが、ここでは図５および図６の表現と同じくメモリイメージとして示すことにする。ここに示すのは図５および図６で示したランタイム実行形式２０３の実施の形態に対応した、テンポラリランタイム実行形式２０２の実現例である。
図７および図８のメモリイメージには、図５および図６と比較して新たに以下のデータが先頭に加わっている。
「ｃｌａｓｓ＿ｉｄ」は、メモリイメージに対してクラス単位に、一意に与えられる識別データ（クラスの識別番号）である。複数のクラスのメモリイメージが作成される場合、このｃｌａｓｓ＿ｉｄの値は重複してはならない。「ｒｕｎｔｉｍｅ＿ｉｍａｇｅ＿ｓｉｚｅ」は、本テンポラリランタイム実行形式から生成されるランタイム実行形式のメモリサイズを記録したものである。
また、図７および図８のメモリイメージには、図５および図６とは異なり、ポインタ値がない。図５および図６にてポインタとして表現されていたデータは、全て次の２つのデータの組に変換されている（図７および図８の中で網がけされている部分）。
「ｒｅｆ＿ｃｌａｓｓ＿ｉｄ」は、クラスの識別番号を指定する。この後続データには必ずエントリ番号が続く。「エントリ番号」は、コンスタントプール構造／インタフェース構造／フィールド構造／メソッド構造／アトリビュート構造の中のデータのエントリ番号を示す。
テンポラリランタイム実行形式２０２の実施の形態では、ランタイム実行形式２０３の中でポインタとして表現される部分を全て「クラスＩＤ」＋「エントリの番号」という形式（間接参照表現）に変換して記録を行っている。
先に述べたように、ランタイム実行形式２０３の中のポインタ表現は、時として別のクラスのメモリイメージの構造を指している場合がある。どのクラスのメモリイメージのものであるかを特定するために、エントリ番号は必ずｃｌａｓｓ＿ｉｄと組み合わせた形で表現される。
テンポラリランタイム実行形式２０３のメモリイメージはポインタを含んでいないため、テンポラリランタイム実行形式記憶部３０２の中でのメモリイメージの配置位置によらず、メモリイメージ生成の際に一意のデータ列に決定付けられる。すなわち、あるクラスを表現するテンポラリランタイム実行形式の記録内容は常に一意、という状態を保っている。
以上が、各データ形式の構造に関する説明である。
次に、図２の構成図に描かれた各処理部が行う、処理内容に関して説明する。
図９は、ローダ部１０２におけるデータ変換の処理の流れの一例を示す。
まず、ローダ部１０２によって生成されるランタイム実行形式２０３のメモリ使用量を計算する（ステップ６０１）。これはプログラム２０１に含まれるクラスファイルを検査し、ｃｏｎｓｔａｎｔ＿ｐｏｏｌ＿ｃｏｕｎｔ、ｉｎｔｅｒｆａｃｅｓ＿ｃｏｕｎｔ、ｆｉｅｌｄｓ＿ｃｏｕｎｔ、ｍｅｔｈｏｄｓ＿ｃｏｕｎｔ、ａｔｔｒｉｂｕｔｅｓ＿ｃｏｕｎｔといった、各構造のエントリ数を示す数値と、各構造のエントリ毎のサイズにより算出することが可能である。
ステップ６０１で算出した値に基づいて、ランタイム実行形式２０３の格納先であるランタイム実行形式記憶部３０３に、保存メモリ領域の空きが存在するか否かを検査する（ステップ６０２）。空きが存在しない場合（ステップ６０２がＮ）、ローダ部１０２によるデータ変換処理の続行を不可能と判断して、ロード処理そのものを取りやめ、プログラムの起動不可能であることをユーザに通知し、処理を終了する（ステップ６０３）。一方、空きが存在する場合（ステップ６０２がＹ）、ランタイム実行形式記憶部３０３に、ステップ６０１で計算した値の分だけのメモリ領域を確保する（ステップ６０４）。
次に、クラスファイルを検査し、ランタイム実行形式２０３の中でポインタ値として表現される部分以外のデータをコピーすることにより、ランタイム実行形式記憶部３０３にデータを格納する（ステップ６０５）。これは図５および図６のメモリイメージの中で白い箱で示されたデータに相当する。
最後に、クラスファイルから、ランタイム実行形式２０３の中でポインタ値として表現されるデータを計算し、算出したデータをランタイム実行形式記憶部３０３に格納し、プログラム２０１からランタイム実行形式２０３への変換処理を終了する（ステップ６０６）。これは図５および図６のメモリイメージの中で網掛けで表現した箱で示されたデータに相当する。
図１０は、ランタイムセービング部１０３におけるデータ変換の処理の流れの一例を示す。
まず、ランタイムセービング部１０３によって生成されるテンポラリランタイム実行形式２０２のメモリ使用量を計算する（ステップ７０１）。これはランタイム実行形式２０３を検査し、ｃｏｎｓｔａｎｔ＿ｐｏｏｌ＿ｃｏｕｎｔ、ｉｎｔｅｒｆａｃｅｓ＿ｃｏｕｎｔ、ｆｉｅｌｄｓ＿ｃｏｕｎｔ、ｍｅｔｈｏｄｓ＿ｃｏｕｎｔ、ａｔｔｒｉｂｕｔｅｓ＿ｃｏｕｎｔといった、各構造のエントリ数を示す数値と、各構造のエントリ毎のサイズにより算出することが可能である。
ステップ７０１で算出した値に基づいて、テンポラリランタイム実行形式２０２の格納先であるテンポラリランタイム実行形式記憶部３０２に、保存メモリ領域の空きが存在するか否かを検査する（ステップ７０２）。空きが存在しない場合（ステップ７０２がＮ）、ランタイムセービング部１０３によるデータ変換処理の続行を不可能と判断して、ランタイムセービング処理そのものを取りやめ、処理を終了する（ステップ７０３）。一方、空きが存在する場合（ステップ７０２がＹ）、テンポラリランタイム実行形式記憶部３０２に、ステップ６０１で計算した値の分だけのメモリ領域を確保する（ステップ７０４）。
次に、ランタイムセービング処理の対象となる全てのクラスに対して識別番号を与え、テンポラリランタイム実行形式２０２のｃｌａｓｓ＿ｉｄデータとしてテンポラリランタイム実行形式記憶部３０２にデータを格納する（ステップ７０５）。
ランタイムセービング処理の処理元となるデータであるランタイム実行形式２０３が、ランタイム実行形式記憶部３０３の中で、その記録のために使用しているメモリ量の数値を計算し、テンポラリランタイム実行形式２０２のｒｕｎｔｉｍｅ＿ｉｍａｇｅ＿ｓｉｚｅデータとしてテンポラリランタイム実行形式記憶部３０２に格納する（ステップ７０６）。
ランタイム実行形式２０３のメモリイメージを検査し、ランタイム実行形式２０３の中でポインタ値として表現される部分以外のデータを、テンポラリランタイム実行形式２０２のデータとしてコピーすることにより、テンポラリランタイム実行形式記憶部３０２にデータを格納する（ステップ７０７）。これは図７および図８のメモリイメージの中で白い箱で示されたデータに相当する。
最後に、ランタイム実行形式のメモリイメージを検査し、ランタイム実行形式２０３の中でポインタ値として表現されるデータに関して変換を行い、変換したデータをテンポラリランタイム実行形式記憶部３０２に格納し、ランタイム実行形式２０３からテンポラリランタイム実行形式２０２への変換処理を終了する（ステップ７０８）。ポインタ値のデータは、「そのポインタが指す構造を含むクラスの識別番号」と「構造の中のエントリ番号」という形に変換される。これは図７および図８のメモリイメージの中で、ｃｌａｓｓ＿ｉｄ、ｒｕｎｔｉｍｅ＿ｉｍａｇｅ＿ｓｉｚｅ以外の、網掛けで表現した箱で示されたデータに相当する。
図１１は、プレローダ部１０４におけるデータ変換の処理の流れの一例を示す。
まず、プレローダ部１０４によって生成されるテンポラリランタイム実行形式２０２のメモリ使用量を計算する（ステップ８０１）。これは処理前のクラスファイルを検査し、ｃｏｎｓｔａｎｔ＿ｐｏｏｌ＿ｃｏｕｎｔ、ｉｎｔｅｒｆａｃｅｓ＿ｃｏｕｎｔ、ｆｉｅｌｄｓ＿ｃｏｕｎｔ、ｍｅｔｈｏｄｓ＿ｃｏｕｎｔ、ａｔｔｒｉｂｕｔｅｓ＿ｃｏｕｎｔといった、各構造のエントリ数を示す数値と、各構造のエントリ毎のサイズにより算出することが可能である。
ステップ８０１で算出した値に基づいて、テンポラリランタイム実行形式２０２の格納先であるテンポラリランタイム実行形式記憶部３０２に、保存メモリ領域の空きが存在するか否かを検査する（ステップ８０２）。空きが存在しない場合（ステップ８０２がＮ）、プレローダ部１０４によるデータ変換処理の続行を不可能と判断して、プレロード処理そのものを取りやめ、処理を終了する（ステップ８０３）。一方、空きが存在する場合（ステップ８０２がＹ）、テンポラリランタイム実行形式記憶部３０２に、ステップ８０１で計算した値の分だけのメモリ領域を確保する（ステップ８０４）。
次に、プレロード処理の対象となる全てのクラスに対して識別番号を与え、テンポラリランタイム実行形式２０２のｃｌａｓｓ＿ｉｄデータとしてテンポラリランタイム実行形式記憶部３０２にデータを格納する（ステップ８０５）。
プレロード処理の処理元となるデータであるプログラム２０１が、ランタイム実行形式２０３に変換された場合に使用するメモリ量の数値を計算し、テンポラリランタイム実行形式２０２のｒｕｎｔｉｍｅ＿ｉｍａｇｅ＿ｓｉｚｅデータとしてテンポラリランタイム実行形式記憶部３０２に格納する（ステップ８０６）。
プログラム２０１を検査し、テンポラリランタイム実行形式２０２の中で、他の構造への参照値として表現される部分以外のデータをテンポラリランタイム実行形式２０２のデータとしてコピーする（ステップ８０７）。これは図７および図８のメモリイメージの中で白い箱で示されたデータに相当する。
最後に、プログラム２０１を検査し、テンポラリランタイム実行形式２０２の中で、他の構造への参照値として表現される部分のデータを、「参照先の構造を含むクラスの識別番号」と「構造の中のエントリ番号」という形のデータに変換し、プログラム２０１からテンポラリランタイム実行形式２０２への変換処理を終了する（ステップ８０８）。
これは図７および図８のメモリイメージの中で、ｃｌａｓｓ＿ｉｄ、ｒｕｎｔｉｍｅ＿ｉｍａｇｅ＿ｓｉｚｅ以外の、網がけの箱で示されたデータに相当する。
図１２は、ポストローダ部１０５におけるデータ変換の処理の流れの一例を示す。
まず、ポストローダ部１０５によって生成されるランタイム実行形式２０３のメモリ使用量を計算する（ステップ９０１）。これは、テンポラリランタイム実行形式２０２のデータｒｕｎｔｉｍｅ＿ｉｍａｇｅ＿ｓｉｚｅを参照することで簡単に得ることが出来る。
ステップ９０１で得た値に基づいて、ランタイム実行形式２０３の格納先であるランタイム実行形式記憶部３０３に、保存メモリ領域の空きが存在するか否かを検査する（ステップ９０２）。空きが存在しない場合（ステップ９０２がＮ）、ポストローダ部１０５による処理の続行を不可能と判断して、ポストロード処理そのものを取りやめ、プログラムの起動不可能であることをユーザに通知し、処理を終了する（ステップ９０３）。一方、空きが存在する場合（ステップ９０２がＹ）、ランタイム実行形式記憶部３０３に、ステップ９０１で計算した値の分だけのメモリ領域を確保する（ステップ９０４）。
次に、テンポラリランタイム実行形式２０２を検査し、ランタイム実行形式２０３の中でポインタ値として表現される部分以外のデータをコピーすることにより、ランタイム実行形式記憶部３０３にデータを格納する（ステップ９０５）。これは図５および図６のメモリイメージの中で白い箱で示されたデータに相当する。
最後に、ランタイム実行形式２０３の中でポインタ値として表現されるデータを計算し、算出したデータをランタイム実行形式記憶部３０３に格納し、テンポラリランタイム実行形式２０２からランタイム実行形式２０３への変換処理を終了する（ステップ９０６）。この計算は、テンポラリランタイム実行形式２０２の中の参照値、すなわち「参照先の構造を含むクラスの識別番号」と「構造の中のエントリ番号」という形のデータを、ポインタに変換することによって実現できる。このデータは図５および図６のメモリイメージの中で網掛けで表現した箱で示されたデータに相当する。
以上により、前もってテンポラリランタイム実行形式を保持していることにより、ポストロード処理のみでプログラムを起動実行することが可能となる。これにより、（１）生成されるランタイム実行形式２０３のメモリ使用量の計算が簡単である。（２）テンポラリランタイム実行形式２０２のメモリイメージは、プログラム２０１（クラスファイル形式）のデータと比較して、ランタイム実行形式２０３のメモリイメージに非常に近い形でデータを保存しており、ポインタ値以外はほとんどメモリイメージをコピーする形で簡単にランタイム実行形式２０３が得られる。という大きな２つの効果により、イメージの生成の処理量を大幅に少なくすることができ、プログラムの起動時間を短縮することが可能となる。
図１３は、ランタイムセービング処理時の画面表示について説明した図である。
なお、本発明の実施の形態１において、プログラムがロードされた後に、続けてランタイムセービング処理を行うものとする。つまり、ランタイムセービング部１０３は、ローダ部１０２によるロード処理の終了タイミングに、テンポラリランタイム実行形式を生成し格納するメモリ領域の空きが存在するか否かをチェックし、空きがあると判断された場合に直ちにランタイムセービング処理を行えばよい。
図１３（ａ）では、ローダ部１０２がプログラム２０１をランタイム実行形式２０３に変換する処理中における携帯情報端末の表示画面出力と、ランタイムセービング部１０３がランタイム実行形式２０３をテンポラリランタイム実行形式２０２に変換する処理中における携帯情報端末の表示画面出力とを変更し、ユーザに処理状況を通知する例を示している。この場合、ユーザがランタイムセービング処理を余計な処理と考え、プログラムが実行開始するまでの待ち時間に余分なストレスを感じる可能性がある。
図１３（ｂ）では、これら２つの処理の表示画面出力をあえて変更せずに同一にし、ユーザにこれらの処理の境界を通知しない例を示している。これにより、ランタイムセービング処理の処理時間をロード処理に隠蔽し、ユーザに無用なストレスを与えないようにすることができる。
図１４は、プレロード処理時の画面表示について説明した図である。
なお、本発明の実施の形態１において、プログラムがダウンロードされた時に、テンポラリランタイム実行形式を生成し格納するメモリ領域の空きが存在すれば、無条件にプレロード処理を行うものとする。つまり、プレローダ部１０４は、ダウンロード処理の終了後に、テンポラリランタイム実行形式を生成し格納するメモリ領域の空きが存在するか否かをチェックし、空きがあると判断された場合に直ちにプレロード処理を行えばよい。
図１４（ａ）では、プログラムダウンロード部１０１がプログラム２０１をダウンロードする処理中における携帯情報端末の表示画面出力と、プレローダ部１０４がプログラム２０１をテンポラリランタイム実行形式２０２に変換する処理中における携帯情報端末の表示画面出力とを変更し、ユーザに処理状況を通知する例を示している。この場合、ユーザがプレロード処理を余計な処理と考え、プログラムが実行開始するまでの待ち時間に余分なストレスを感じる可能性がある。
図１４（ｂ）では、これら２つの処理の表示画面出力をあえて変更せずに同一にし、ユーザにこれらの処理の境界を通知しない例を示している。これにより、プレロード処理の処理時間をダウンロード処理に隠蔽し、ユーザに無用なストレスを与えないようにすることができる。
以上により、ランタイムセービング部１０３またはプレローダ部１０４により、前もってテンポラリランタイム実行形式を保持することができ、ポストロード処理のみでプログラムの解釈実行が可能となることにより、起動時間を短縮することができる。
（実施の形態２）
本発明の実施の形態１では、ランタイムセービング部によるランタイムセービング処理は、プログラムがロードされた後に、続けてロードされたプログラムに対して行うものとした。しかし、これ以外の判断基準に基づき、ランタイムセービング処理の対象プログラムを選択決定することができる。以下に、図を用いて詳細を説明する。
図１５は、本発明の実施の形態２におけるプログラム実行処理端末装置の構成を示すブロック図である。プログラムダウンロード部１０１と、ローダ部１０２と、プレローダ部１０４と、ポストローダ部１０５と、インタプリタ部１０６と、制御部１０７と、ランタイムセービング部１１０と、プログラム記憶部３０１と、テンポラリランタイム実行形式記憶部３０２と、ランタイム実行形式記憶部３０３と、設定情報記憶部３０４と、インタプリット履歴記憶部３０５とから構成されている。プログラムダウンロード部１０１と、ローダ部１０２と、プレローダ部１０４と、ポストローダ部１０５と、インタプリタ部１０６と、制御部１０７と、プログラム記憶部３０１と、テンポラリランタイム実行形式記憶部３０２と、ランタイム実行形式記憶部３０３は、図２で説明したものと同じである。ここでは、新規に追加したランタイムセービング部１１０と、設定情報記憶部３０４と、インタプリット履歴記憶部３０５について説明する。
ランタイムセービング部１１０は、設定情報記憶部３０４またはインタプリット履歴記憶部３０５に格納されている設定情報または履歴情報に基づき、ランタイムセービング処理の開始タイミングと対象プログラムを選択決定する。
設定情報記憶部３０４は、ランタイムセービング処理を行う対象プログラムを識別する設定情報を格納する。この設定情報は、ランタイムセービング部１１０から参照され、ランタイムセービング処理対象と指定されているプログラム（高速起動指定のプログラム）がロードされた場合に、続けてランタイムセービング処理を実行する。
設定情報記憶部３０４に格納された設定情報は、例えば、ユーザの入力指定に基づいて決定する。図１６に、入力画面の一例を示す。ユーザは携帯情報端末の表示画面に表示したプログラム一覧から、各プログラムごとに高速起動のＯＮあるいはＯＦＦを指定することができる。図１６では、「Ｓｃｈｅｄｕｌｅ」および「ＭｅｍｏＰａｄ」というプログラムが高速起動ＯＮとして指定されている。高速起動ＯＮとして指定されているプログラムがロードされた場合には、ランタイムセービング処理を行い、それ以外のプログラムがロードされた場合にはランタイムセービング処理は行わない。なお、ユーザの入力指定に関係なく、常に特定のプログラムを高速起動指定することも可能である。
インタプリット履歴記憶部３０５は、各プログラムが過去に解釈実行された履歴情報を格納する。この履歴情報は、ランタイムセービング部１１０から参照され、履歴情報から使用頻度が高いと判断されるプログラムがロードされた場合に、続けてランタイムセービング処理を実行する。
インタプリット履歴記憶部３０５に格納された履歴情報の一例を、図１７に示す。図１７では、プログラム記憶部３０１に格納された全てのプログラムごとに、これまでに何回起動されたかという情報と、最後に起動された時刻はいつか、という情報をテーブルとして保持している。なお、平均起動時間や、起動間隔など、他の情報を含んでもよく、また、例えば起動回数だけといった、一つの情報のみでもよい。あるプログラムがロードされた場合に、そのプログラムについてランタイムセービング処理を行うか否かの判定については、例えば以下の判断基準を適用することが考えられる。なお、インタプリット履歴記憶部３０５の履歴情報を用いた他の判断基準であってもよい。
第１の判断基準は、３回以上起動されたことがあるプログラムがロードされた場合には、そのプログラムは頻繁に使用されるとみなし、ランタイムセービング処理を行う。選択基準の数値に関しては３回でなくとも、任意の数でも良い。
第２の判断基準は、全てのプログラムの中で、これまでに起動された回数の多い、上位２つのプログラムに関しては、そのプログラムは頻繁に使用されるとみなし、ランタイムセービング処理を行う。選択基準の数値に関しては上位２つでなくとも、任意の数でも良い。
以上により、ランタイムセービング処理の対象プログラムを選択することが可能となり、高速起動が必要なプログラムや使用頻度が高いプログラムを選択して、ランタイムセービング処理を実施することができる。よって、高速起動が不要なプログラムや使用頻度が低いプログラムのテンポラリランタイム実行形式によってテンポラリランタイム実行形式記憶部３０２の記憶領域が占有されてしまうのを防止できる。つまりテンポラリランタイム実行形式記憶部３０２の空き記憶領域不足によって高速起動が必要なプログラムや使用頻度が高いプログラムのランタイムセービング処理が失敗に終わるのを防止することができ、効率的なランタイムセービング処理を実施することができる。
（実施の形態３）
本発明の実施の形態１では、プレローダ部によるプレロード処理は、プログラムがダウンロードされた時に、続けてダウンロードされたプログラムに対して行うものとした。しかし、これ以外の判断基準に基づき、プレロード処理の開始タイミングと対象プログラムを選択決定することができる。
図１８は、本発明の実施の形態３におけるプログラム実行処理端末装置の構成を示すブロック図である。プログラムダウンロード部１０１と、ローダ部１０２と、ポストローダ部１０５と、インタプリタ部１０６と、制御部１０７と、ランタイムセービング部１１０と、プレローダ部１１１と、プレロード制御部１１２と、プログラム記憶部３０１と、テンポラリランタイム実行形式記憶部３０２と、ランタイム実行形式記憶部３０３と、設定情報記憶部３０４と、インタプリット履歴記憶部３０５とから構成されている。プログラムダウンロード部１０１と、ローダ部１０２と、ポストローダ部１０５と、インタプリタ部１０６と、制御部１０７と、ランタイムセービング部１１０と、プログラム記憶部３０１と、テンポラリランタイム実行形式記憶部３０２と、ランタイム実行形式記憶部３０３と、設定情報記憶部３０４と、インタプリット履歴記憶部３０５は、図１５で説明したものと同じである。ここでは、新規に追加したプレローダ部１１１と、プレロード制御部１１２について説明する。
プレローダ部１１１は、プレロード制御部１１２から通知を受信することにより、プログラム記憶部３０１に記録されたプログラムを、テンポラリランタイム実行形式に変換し、テンポラリランタイム実行形式記憶部３０２に格納するプレロード処理を行う。特に、特定プログラムを指定する識別子が通知された場合、プレロード処理対象として、通知されたプログラムを選択する。なお、制御部１０７からプレロード開始の指示を受信することにより、プログラムをダウンロードした際に、続けてプレロード処理を実施することも可能である。また、設定情報記憶部３０４またはインタプリット履歴記憶部３０５に格納されている設定情報または履歴情報に基づき、プレロード処理の対象プログラムを選択決定する。
プレロード制御部１１２は、携帯情報端末の機器状態に基づいて、プレロード開始のタイミングを決定し、プレローダ部１１１に処理の開始を通知する。なお、プレロード対象のプログラムをプレロード制御部１１２で決定し、決定済みのプログラムをプレローダ部１１１に通知してもよいし、プレロード対象のプログラムを指定せずに開始のタイミングのみを通知し、プレローダ部１１１が処理対象のプログラムを選択してもよい。また、機器状態としては、例えば以下の各判断基準を適用することが考えられる。
第１の判断基準は、携帯情報端末が一定時間以上、ユーザの入力操作を何も受け付けない（待ち受け）状態に入っていれば、プレロード処理を行う。この場合、プレロード制御部１１２は、前もって設定した時間長データ（基準時間）を保持しており、携帯情報端末に対してユーザの入力操作が加えられていない（待ち受け）状態の連続時間を計測し、基準時間と比較することにより、開始タイミングを決定する。
図１９に、プレロード制御部１１２における処理の流れの一例を示す。
まず、待ち受け状態の連続時間を初期化する（ステップ１５０１）。
携帯情報端末の機器状態として、一定時間以上ユーザの入力を何も受け付けていない（待ち受け）状態に入っているか否かを検出する（ステップ１５０２）。待ち受け状態でない場合（ステップ１５０２がＮ）、ステップ１５０１に遷移し、処理を繰り返す。一方、待ち受け状態である場合（ステップ１５０２がＹ）、待ち受け状態の連続時間を更新し（ステップ１５０３）、その連続時間の長さと、基準時間との比較を行う（ステップ１５０４）。
待ち受け状態の連続時間が基準時間を越えるまで（ステップ１５０４がＮ）、ステップ１５０２からステップ１５０４を繰り返す。待ち受け状態の連続時間が基準時間を越えた時（ステップ１５０４がＹ）、プレロード処理の開始タイミングと決定し、プレローダ部１１１に処理の開始を通知する。
なお、基準時間は、ＲＯＭ化されているなどして携帯情報端末に固有の値でもよいが、ユーザの入力によって数値を変更することができてもよい。ユーザによる設定時の表示画面の一例を図２０に示す。ここでは、基準時間として１５分が設定されており、待ち受け状態の連続時間が１５分を越えたタイミングで、プレロード処理を開始する。
第１の判断基準を用いれば、ユーザが携帯情報端末を操作していない間にプレロード処理が実行されるので、プレロード処理がユーザに対して隠匿される。よって、プレロード処理の実行によってユーザに何らのストレスを与えることがないという利点がある。
第２の判断基準は、携帯情報端末が待ち受け状態から脱した時に、プレロード処理を行う。この場合、プレロード制御部１１２は、携帯情報端末が待ち受け状態から、ユーザの入力操作が加わるなどして非待ち受け状態に入ったこと、すなわち待ち受け状態が終了したことを検出することにより、開始タイミングを決定する。
第３の判断基準は、携帯情報端末の中の内部時刻が一定のものになった場合、プレロード処理を行う。この場合、プレロード制御部１１２は、前もって設定した時刻データ（基準時刻）を保持しており、実際の現在時刻と基準時刻とを比較し、一致したことを検出することにより、開始タイミングを決定する。
なお、基準時刻は、ＲＯＭ化されているなどして携帯情報端末に固有の値でもよいが、ユーザの入力によって数値を変更することができてもよい。ユーザによる設定時の表示画面の一例を図２１に示す。ここでは、基準時刻として１３時１５分が設定されており、実際の現在時刻が１３時１５分になったタイミングで、プレロード処理を開始する。
第４の判断基準は、携帯情報端末の電源が入った時に、プレロード処理を行う。この場合、プレロード制御部１１２は、電源が入力されたことにより、開始タイミングを決定する。携帯情報端末の電源入力の検出の仕組み自体は、従来の携帯情報端末で用いられているデバイスからのイベント通知等の仕組みを用いて実現することが可能である。
第５の判断基準は、携帯情報端末が折りたたみ式の形状の端末（例えば折りたたみ式の携帯電話）であって、ユーザによる携帯情報端末の折りたたみの開閉があった時にプレロード処理を行う。この場合、プレロード制御部１１２は、携帯情報端末が閉じた状態から開いた状態へ移行した、あるいは、携帯情報端末が開いた状態から閉じた状態へ移行したことを検出することにより、開始タイミングを決定する。携帯情報端末の折りたたみの開閉の検出の仕組み自体は、従来の携帯情報端末で用いられているデバイスからのイベント通知等の仕組みを用いて実現することが可能である。
第６の判断基準は、携帯情報端末と別の電子機器との間で、通信が発生した時にプレロード処理を行う。この場合、プレロード制御部１１２は、携帯情報端末と別の電子機器との間にデータ通信が発生したことを検出することにより、開始タイミングを決定する。通信が発生したことを検出する仕組み自体は、従来の携帯電話で用いられているデバイスからのイベント通知等の仕組みを用いて実現することが可能である。
ここでの通信とは、具体的には、音声通話の着呼、ＨＴＴＰを用いたデータ通信、ＦＴＰを用いたデータ通信、ＳＳＬを用いたデータ通信、ＩｒＤＡを用いたデータ通信、などが考えられる。もちろん携帯情報端末がサポートするその他の種類の通信であっても良い。また、通信の発生に基づいて開始されるプレロード処理対象のプログラムは、発生した通信の種類に関連付けられたものが選択されても良い。このプログラムの選択に関しては後述する（図２３）。
第７の判断基準は、携帯情報端末と別の電子機器との着脱があった場合にプレロード処理を行う。この場合、プレロード制御部１１２は、携帯情報端末に別の電子機器が付加（装着）された、あるいは、携帯情報端末に付加（装着）されていた別の電子機器が外されたことを検出することにより、開始タイミングを決定する。外部デバイスの着脱が発生したことを検出する仕組み自体は、従来の携帯情報端末で用いられている外部デバイスからのイベント通知等の仕組みを用いて実現することが可能である。
ここでの外部デバイスとは、具体的には、ＳＤカード等外部記憶デバイス、Ｂｌｕｅｔｏｏｔｈ等の機能拡張ユニット、ＵＳＢコネクタ、イヤホン、マイク、電源コネクタ、充電器、キーボードなどが考えられる。もちろん携帯情報端末がサポートするその他の種類の外部デバイスであっても良い。また、外部デバイスの着脱に基づいて開始されるプレロード処理対象のプログラムは、外部デバイスの種類に関連付けられたものが選択されても良い。このプログラムの選択に関しては後述する（図２３）。
第８の判断基準は、携帯情報端末に実装されている別のアプリケーションの実行開始あるいは実行終了した場合にプレロード処理を行う。この場合、プレロード制御部１１２は、携帯情報端末に実装されている別のアプリケーションの実行が開始された、あるいは、別のアプリケーションの実行が終了したことを検出することにより、開始タイミングを決定する。別のアプリケーションの実行が開始あるいは終了したことを検出する仕組み自体は、従来の携帯情報端末で用いられているソフトウェア間通信の仕組みを用いて実現することが可能である。
ここでの別のアプリケーションとは、具体的には、ブラウザ、メーラ、スケジュール帳、メディアプレイヤーなど、携帯情報端末に搭載されるアプリケーションであれば何でも良い。また、この別のアプリケーションは機械語（ネイティブ）で記述されていても良いし、Ｊａｖａ（ＴＭ）など他の実行系を用いた仕組みによって記述されていても良い。また、別のアプリケーションの開始あるいは終了に伴ってプレロード処理されるプログラムは、実行が開始されたアプリケーションから連携起動される可能性があるなど、この別のアプリケーションの種類に関連付けられたものが選択されても良い。このプログラムの選択に関しては後述する（図２３）。
第９の判断基準は、携帯情報端末のユーザの入力操作に伴って、一定の画面遷移が行われた時にプレロード処理を行う。この場合、プレロード制御部１１２は、ユーザに入力操作に基づいて、携帯情報端末の内部状態の遷移が発生したことを検出することにより、開始タイミングを決定する。なお、内部状態ごとに、ユーザの入力操作可能な指示の組み合わせが設定されており、特定の入力操作が行われた際の次の処理動作が決定する。つまり、内部状態は、ユーザの入力操作や外部との通信状況などによって順次遷移していくものであり、内部状態の遷移に伴って表示画面が変化するものが多い。プレロード制御部１１２は、内部状態の遷移の中で、前もって設定されているある特定の遷移が行われた場合にそれを検出するものとする。内部状態の遷移の検出自体は、従来の携帯情報端末で用いられているソフトウェア間通信の仕組みを用いて実現することが可能である。
図２２に内部状態の遷移の一例を示す。この例では「（１）メニュー選択状態」「（２）アプリ選択状態」「（３）Ｊａｖａアプリ選択状態」という３つの内部状態を示している。プレロード制御部１１２は、特定の内部状態遷移（図２２（２）から（３）への遷移）が発生すると、これを検出し、プレローダ部１１１に処理の開始を通知する。プレローダ部１１１は、この通知を受けて、プログラムのプレロード処理を開始する。また、内部状態遷移に伴ってプレロード処理されるプログラムは、内部状態の遷移の種類に関連付けられたものが選択されても良い。このプログラムの選択に関しては後述する（図２３）。
以上により、各判断基準に基づいてプレロード処理の開始タイミングを決定することが可能となり、ダウンロード時のみだけでなく、効率的なプレロード処理を実施することができる。
次に、処理の対象となるプログラムをどのように選択するのかについて説明する。
大きくは２つの選択基準があり、（Ａ）プレローダ部１１１がプログラムを選択する場合と、（Ｂ）プレロード制御部１１２から処理対象のプログラムが通知される場合とに分けられる。（Ａ）の場合、例えば以下の各選択基準を適用することが考えられる。
第１の選択基準は、携帯情報端末にダウンロードされているプログラムの中から適当に（ランダムに）選択する。この場合、プレローダ部１１１は、プログラム記憶部３０１に記録されているプログラムの中から適当に選択してプレロード処理を行えば良い。
第２の選択基準は、設定情報記憶部３０４に格納された設定情報に基づいて、携帯情報端末にダウンロードされているプログラムの中から、高速起動指定のプログラムとして設定されているプログラムを選択し、プレロード処理を行う。それ以外のプログラムに関しては、プレロード処理の対象としない。なお、設定情報記憶部３０４については、既に実施の形態２で説明した。
第３の選択基準は、インタプリット履歴記憶部３０５に格納された履歴情報に基づいて、使用頻度が高いと判断されるプログラムを選択し、プレロード処理を行う。例えば、最も多い回数起動されたことのあるプログラムを選択する、あるいは、一番最近に起動されたプログラムを選択するなどである。なお、インタプリット履歴記憶部３０５については、既に実施の形態２で説明した。
（Ｂ）の場合、プレロード処理が開始される条件に伴って、プレロード制御部１１２が、処理対象プログラムを選択する。この場合、プレロード制御部１１２は、プレロード処理の開始条件と処理対象のプログラムの対応表である、プレロード処理対応テーブルを保持し、この対応テーブルに基づいて、処理対象のプログラムを選択決定する。
図２３に、プレロード処理対応テーブルの一例を示す。ここでは、プレロード処理を開始する条件に、条件番号という一意のＩＤ番号を割当て、各条件を識別している。また、図２３では、開始条件を文章で記述しているが、条件番号との意味の対応付けが、番号の重複無くなされていればよい。さらに、プレロード処理対象のプログラムの識別子を文字列で表現しているが、他の表現であってもよい。各プレロード処理開始条件と関連性の高い、すなわち次に実行される可能性の高いと思われるプログラムを、予めプレロード処理対応テーブルに記録しておくことで、プレロード処理による起動の高速化の効果を得やすくなる。例えば、本発明をＥメール送受信機能付きの携帯電話に適用した場合には、携帯電話がＥメールを受信したときに、ユーザがＥメールの受信に気付いてＥメールを閲覧しようとすることが想定されるため、携帯電話がＥメールを受信したときにメーラのプログラムをプレロードするように設定しておくことが有効である。これにより、ユーザがメーラを起動させるときの起動時間が短縮される。
以上により、プレロード処理の開始タイミングや対象プログラムを選択することが可能となり、高速起動が必要なプログラムや使用頻度が高いプログラムを選択して、効率的なプレロード処理を実施することができる。
（実施の形態４）
図２４は、本発明の実施の形態４におけるプログラム実行処理端末装置の構成を示すブロック図である。プログラムダウンロード部１０１と、ローダ部１０２と、ランタイムセービング部１１０と、ポストローダ部１０５と、インタプリタ部１０６と、制御部１０７と、プレローダ部１１３と、別アプリ指示通知部１１４と、プログラム記憶部３０１と、テンポラリランタイム実行形式記憶部３０２と、ランタイム実行形式記憶部３０３と、設定情報記憶部３０４と、インタプリット履歴記憶部３０５とから構成されている。プログラムダウンロード部１０１と、ローダ部１０２と、ランタイムセービング部１１０と、ポストローダ部１０５と、インタプリタ部１０６と、制御部１０７と、プログラム記憶部３０１と、テンポラリランタイム実行形式記憶部３０２と、ランタイム実行形式記憶部３０３と、設定情報記憶部３０４と、インタプリット履歴記憶部３０５は、図１５で説明したものと同じである。ここでは、新規に追加したプレローダ部１１３と別アプリ指示通知部１１４について説明する。
プレローダ部１１３は、別アプリ指示通知部１１４から通知を受信することにより、プログラム記憶部３０１に記録されたプログラムを、テンポラリランタイム実行形式に変換し、テンポラリランタイム実行形式記憶部３０２に格納するプレロード処理を行う。特に、特定プログラムを指定する識別子が通知された場合、プレロード処理対象として、通知されたプログラムを選択する。なお、制御部１０７からプレロード開始の指示を受信することにより、プログラムをダウンロードした際に、続けてプレロード処理を実施することも可能である。
別アプリ指示通知部１１４は、携帯情報端末に実装されている別アプリケーションからのプレロード開始の指示があったことをプレローダ部１１３に通知する。
図２５に、別のアプリケーションからプレロード開始が指示される場合の処理概要の一例を図示する。
別のアプリケーションからプレロード開始の指示を受け取る仕組み自体は、例えば別のアプリケーションのソースコード中から呼び出しが可能なＡＰＩを、携帯情報端末中に備えることで実現することができる。このＡＰＩが呼び出されることにより、別アプリ指示通知部１１４が処理を行い、プレローダ部１１３にプレロード処理の開始を指示する。図２５では、ｐｒｅｌｏａｄｉｎｇ＿ｓｔａｒｔと示されているＡＰＩが、別のアプリケーションから呼び出され、プレローダ部１１３にプレロード処理の開始を通知する働きを行う例を示した。
また、プレロード処理されるプログラムは、ＡＰＩが呼び出しの際に一緒に指定することもできる。図２５では、ＡＰＩの引数としてプログラムを指定する例を示した。引数ｐｒｏｇｒａｍ＿ｉｄは、プログラム記憶部３０１に格納されたプログラムの識別子を表現しており、ｐｒｅｌｏａｄｉｎｇ＿ｓｔａｒｔの処理でプレローダ部１１３に対して行われる通知は、ｐｒｏｇｒａｍ＿ｉｄの情報も含むものとする。プレローダ部１１３はこのｐｒｏｇｒａｍ＿ｉｄの情報を受け取り、プレロード処理されるプログラムを選択する。なお、プログラムを指定せずに、プレローダ部１１３が、次にプレロードする対象のプログラムを選択実行することも可能である。
以上により、プレロード処理の発生のトリガを機器状態に基づいて決定するのでなく、実行中のアプリケーションの中で自由に指定することが可能となる。つまり、特定のプログラムのプレロード処理を呼び出すようなアプリケーションを作成することにより、そのアプリケーションを実行する携帯情報端末に、次に実効予定などの特定のプログラムに対するプレロード処理を行うことにより、特定のプログラムの起動時間を短縮することができる。
産業上の利用可能性
本発明によれば、プログラム配信サービスを利用して携帯情報端末にダウンロードした例えばＪａｖａ（ＴＭ）等によるプログラムを起動する場合に、プレロード処理やランタイムセービング処理を行うことにより、プログラムの起動時間の長さを短縮することができる。
【図面の簡単な説明】
図１は、本発明の実施の形態における携帯情報端末のハードウェア構成図である。
図２は、本発明の実施の形態におけるプログラム実行処理端末装置の構成を示すブロック図である。
図３は、本発明の実施の形態におけるクラスロード処理におけるデータ変換の関係図である。
図４は、本発明の実施の形態におけるプログラムの構造の一例を示す図である。
図５は、本発明の実施の形態におけるランタイム実行形式の構造の一例を示す図である。
図６は、本発明の実施の形態におけるランタイム実行形式の構造の一例を示す図である。
図７は、本発明の実施の形態におけるテンポラリランタイム実行形式の構造の一例を示す図である。
図８は、本発明の実施の形態におけるテンポラリランタイム実行形式の構造の一例を示す図である。
図９は、本発明の実施の形態におけるローダ部の動作手順の一例を示すフローチャートである。
図１０は、本発明の実施の形態におけるランタイムセービング部の動作手順の一例を示すフローチャートである。
図１１は、本発明の実施の形態におけるプレローダ部の動作手順の一例を示すフローチャートである。
図１２は、本発明の実施の形態におけるポストローダ部の動作手順の一例を示すフローチャートである。
図１３は、本発明の実施の形態におけるランタイムセービング処理時の画面表示の一例を示す図である。
図１４は、本発明の実施の形態におけるプレロード処理時の画面表示の一例を示す図である。
図１５は、本発明の実施の形態におけるプログラム実行処理端末装置の構成を示すブロック図である。
図１６は、本発明の実施の形態における設定情報の入力画面の一例を示す図である。
図１７は、本発明の実施の形態におけるインタプリット履歴情報の一例を示す図である。
図１８は、本発明の実施の形態におけるプログラム実行処理端末装置の構成を示すブロック図である。
図１９は、本発明の実施の形態におけるプレロード制御部の動作手順の一例を示すフローチャートである。
図２０は、本発明の実施の形態における基準時間の入力画面の一例を示す図である。
図２１は、本発明の実施の形態における基準時刻の入力画面の一例を示す図である。
図２２は、本発明の実施の形態における内部状態遷移の一例を示す図である。
図２３は、本発明の実施の形態におけるプレロード処理対応テーブルの一例を示す図である。
図２４は、本発明の実施の形態におけるプログラム実行処理端末装置の構成を示すブロック図である。
図２５は、本発明の実施の形態における別アプリ指示通知部の処理概要の一例を示す図である。
【図１】
2003107186.tif 000003
【図２】
2003107186.tif 000004
【図３】
2003107186.tif 000005
【図４】
2003107186.tif 000006
【図５】
2003107186.tif 000007
【図６】
2003107186.tif 000008
【図７】
2003107186.tif 000009
【図８】
2003107186.tif 000010
【図９】
2003107186.tif 000011
【図１０】
2003107186.tif 000012
【図１１】
2003107186.tif 000013
【図１２】
2003107186.tif 000014
【図１３】
2003107186.tif 000015
【図１４】
2003107186.tif 000016
【図１５】
2003107186.tif 000017
【図１６】
2003107186.tif 000018
【図１７】
2003107186.tif 000019
【図１８】
2003107186.tif 000020
【図１９】
2003107186.tif 000021
【図２０】
2003107186.tif 000022
【図２１】
2003107186.tif 000023
【図２２】
2003107186.tif 000024
【図２３】
2003107186.tif 000025
【図２４】
2003107186.tif 000026
【図２５】
2003107186.tif 000027
【手続補正書】
【提出日】平成16年5月24日(2004.5.24)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
受信したプログラムを解釈実行処理する端末装置であって、
前記受信したプログラムを記憶するプログラム記憶部と、
前記プログラム記憶部に記憶されているプログラムをランタイム実行形式に変換するローダ部と、
前記ローダ部が変換したランタイム実行形式もしくは前記プログラム記憶部に記憶されているプログラムに基づいて生成されたテンポラリランタイム実行形式を記憶するテンポラリランタイム実行形式記憶部と、
前記テンポラリランタイム実行形式記憶部に記憶されているテンポラリランタイム実行形式をランタイム実行形式に変換するポストローダ部と、
ランタイム実行形式を解釈実行するインタプリタ部と、
プログラムの起動が指示された際に、前記テンポラリランライム実行形式記憶部にテンポラリランタイム実行形式が存在するか否かを判断し、存在しない場合には前記ローダ部にランタイム実行形式への変換を要求し、存在する場合には前記ポストローダ部にランタイム実行形式への変換を要求する制御部とを備えることを特徴とするプログラム実行処理端末装置。
【請求項２】
前記ローダ部が変換したランタイム実行形式をテンポラリランタイム実行形式に変換するランタイムセービング部をさらに備え、
前記テンポラリランタイム実行形式記憶部は、前記ランタイムセービング部が変換したテンポラリランタイム実行形式を記憶することを特徴とする、請求項１記載のプログラム実行処理端末装置。
【請求項３】
前記プログラム記憶部に記憶されているプログラムをテンポラリランタイム実行形式に変換するプレロード処理を行うプレローダ部をさらに備え、
前記テンポラリランタイム実行形式記憶部は、前記プレローダ部が変換したテンポラリランタイム実行形式を記憶することを特徴とする、請求項１記載のプログラム実行処理端末装置。
【請求項４】
前記ローダ部によって変換されたランタイム実行形式を記憶するランタイム実行形式記憶部をさらに備え、
ランタイム実行形式は、前記ランタイム実行形式記憶部における、当該ランタイム実行形式に含まれる所定データの格納アドレスを示すポインタを含み、
前記テンポラリランタイム実行形式は、前記ポインタに相当する情報を間接参照表現により示した参照値データを含むことを特徴とする、請求項１記載のプログラム実行処理端末装置。
【請求項５】
前記テンポラリランタイム実行形式は、当該テンポラリランタイム実行形式がランタイム実行形式に変換されたときのサイズを示すデータを含むことを特徴とする、請求項１記載のプログラム実行処理端末装置。
【請求項６】
前記プログラム記憶部に記憶されているプログラムをテンポラリランタイム実行形式に変換するプレローダ部を更に備え、
前記テンポラリランタイム実行形式記憶部は、前記ランタイムセービング部と前記プレローダ部が変換したテンポラリランタイム実行形式を記憶することを特徴とする、請求項２記載のプログラム実行処理端末装置。
【請求項７】
前記ローダ部がプログラムをランタイム実行形式に変換する処理中と、前記ランタイムセービング部がランタイム実行形式をテンポラリランタイム実行形式に変換する処理中とを、同一の表示画面出力にすることを特徴とする、請求項２記載のプログラム実行処理端末装置。
【請求項８】
前記プログラム記憶部に記憶されているプログラムに対する高速起動設定情報を記憶する設定情報記憶部を更に備え、
前記ランタイムセービング部は、前記設定情報記憶部に記憶している高速起動設定情報に基づいて、テンポラリランタイム実行形式に変換するプログラムを選択決定することを特徴とする、請求項２記載のプログラム実行処理端末装置。
【請求項９】
前記プログラム記憶部に記録されているプログラムを解釈実行した履歴情報を記憶するインタプリット履歴記憶部を更に備え、
前記ランタイムセービング部は、前記インタプリット履歴記憶部に記憶している履歴情報に基づいて、テンポラリランタイム実行形式に変換するプログラムを選択決定することを特徴とする、請求項２記載のプログラム実行処理端末装置。
【請求項１０】
プログラムを受信する処理と、前記プレローダ部がプログラムをテンポラリランタイム実行形式に変換してテンポラリランタイム実行形式を生成する処理とを、連続して行うことを特徴とする、請求項３記載のプログラム実行処理端末装置。
【請求項１１】
プログラムを受信する処理中と、前記プレローダ部がプログラムをテンポラリランタイム実行形式に変換してテンポラリランタイム実行形式を生成する処理中とを、同一の表示画面出力にすることを特徴とする、請求項１０記載のプログラム実行処理端末装置。
【請求項１２】
前記プログラム記憶部に記憶されているプログラムに対する高速起動設定情報を記憶する設定情報記憶部を更に備え、
前記プレローダ部は、前記設定情報記憶部に記憶している高速起動設定情報に基づいて、テンポラリランタイム実行形式に変換するプログラムを選択決定することを特徴とする、請求項３記載のプログラム実行処理端末装置。
【請求項１３】
前記プログラム記憶部に記録されているプログラムを解釈実行した履歴情報を記録するインタプリット履歴記憶部を更に備え、
前記プレローダ部は、前記インタプリット履歴記憶部に記憶している履歴情報に基づいて、テンポラリランタイム実行形式に変換するプログラムを選択決定することを特徴とする、請求項３記載のプログラム実行処理端末装置。
【請求項１４】
前記プログラム実行処理端末装置の機器状態に基づいて、テンポラリランタイム実行形式への変換を行う開始タイミングを決定し、前記プレローダ部に処理の開始を要求するプレロード制御部を更に備え、
前記プレローダ部は、前記プレロード制御部から開始が要求された際に、プログラムをテンポラリランタイム実行形式に変換する処理を行うことを特徴とする請求項３記載のプログラム実行処理端末装置。
【請求項１５】
前記機器状態は、前記プログラム実行処理端末装置に対してユーザの操作が加えられていない待ち受け状態の連続経過時間であって、
前記プレロード制御部は、前記待ち受け状態の連続経過時間と、前もって設定されている開始時間長とを比較した結果に基づいて、開始タイミングを決定することを特徴とする、請求項１４記載のプログラム実行処理端末装置。
【請求項１６】
前記機器状態は、前記プログラム実行処理端末装置が内部で管理している現在時刻であって、
前記プレロード制御部は、前記現在時刻と、前もって設定されている開始時刻とを比較した結果に基づいて、開始タイミングを決定することを特徴とする、請求項１４記載のプログラム実行処理端末装置。
【請求項１７】
前記機器状態は、折りたたみ式のプログラム実行処理端末装置における折りたたみ端末閉開状態であって、
前記プレロード制御部は、前記折りたたみ端末閉開状態の変化に基づいて、開始タイミングを決定することを特徴とする、請求項１４記載のプログラム実行処理端末装置。
【請求項１８】
前記機器状態は、前記プログラム実行処理端末装置に対するユーザの入力操作に応じて遷移する端末内部遷移状態であって、
前記プレロード制御部は、前記端末内部遷移状態に基づいて、開始タイミングを決定することを特徴とする、請求項１４記載のプログラム実行処理端末装置。
【請求項１９】
前記プレローダ部がプログラムをテンポラリランタイム実行形式に変換する処理を開始する条件と、変換の対象となるプログラムとの対応を示した対応情報を記録するプレロード処理対応記憶部を備え、
前記プレロード制御部は、前記プレロード処理対応記憶部に記憶している対応情報に基づいて、開始タイミングを決定しテンポラリランタイム実行形式に変換する対象となるプログラムを選択決定することを特徴とする、請求項１４記載のプログラム実行処理端末装置。
【請求項２０】
前記プレロード処理対応記憶部に記憶される対応情報において、前記プレローダ部がプログラムをテンポラリランタイム実行形式に変換する処理を開始する条件と、当該条件を満たした後にユーザによって実行されることが予想されるプログラムとが対応付けられていることを特徴とする、請求項１９記載のプログラム実行処理端末装置。
【請求項２１】
前記情報端末装置は、プログラムを受信することなしに動作可能なアプリケーションを保持しており、
前記アプリケーションからの指示通知を受信し、受信した前記アプリケーションからの指示通知に基づいて、テンポラリランタイム実行形式への変換を行う開始タイミングを決定し、前記プレローダ部に処理の開始を要求するプレロード指示通知部を更に備え、
前記プレローダ部は、前記プレロード指示通知部から開始が要求された際に、プログラムをテンポラリランタイム実行形式に変換する処理を行うことを特徴とする、請求項３記載のプログラム実行処理端末装置。
【請求項２２】
前記アプリケーションからの指示通知には、前記プログラム記憶部に記憶されているプログラムから特定のプログラムを判別するためのプログラム識別子を含み、
前記プレロード指示通知部は、受信した指示通知に含まれるプログラム識別子を指定して、前記プレローダ部に処理の開始を要求し、
前記プレローダ部は、前記プレロード指示通知部からの開始の要求に含まれるプログラム識別子に基づいて、テンポラリランタイム実行形式に変換する対象となるプログラムを決定することを特徴とする、請求項２１記載のプログラム実行処理端末装置。
【請求項２３】
受信したプログラムを解釈実行処理する方法であって、
前記受信したプログラムをプログラム記憶部に記憶するプログラム記憶ステップと、
前記プログラム記憶部に記憶されているプログラムをランタイム実行形式に変換するロードステップと、
前記ロードステップで変換したランタイム実行形式もしくは前記プログラム記憶部に記憶されているプログラムをテンポラリランタイム実行形式に変換する変換ステップと、
前記変換ステップで変換したテンポラリランタイム実行形式をテンポラリランタイム実行形式記憶部に記憶するテンポラリランタイム実行形式記憶ステップと、
プログラムの起動が指示された際に、前記テンポラリランライム実行形式記憶部にテンポラリランタイム実行形式が存在するか否かを判断する判断ステップと、
前記判断ステップの判断の結果、前記テンポラリランライム実行形式記憶部にテンポラリランタイム実行形式が存在した場合に、前記テンポラリランタイム実行形式記憶部に記憶されているテンポラリランタイム実行形式をランタイム実行形式に変換するポストロードステップと、
前記ポストロードステップで変換したランタイム実行形式を解釈実行する解釈ステップとを備えることを特徴とする、プログラム実行処理方法。
【請求項２４】
前記ロードステップで変換したランタイム実行形式はランタイム実行形式記憶部に記憶され、
ランタイム実行形式は、前記ランタイム実行形式記憶部における、当該ランタイム実行形式に含まれる所定データの格納アドレスを示すポインタを含み、
前記テンポラリランタイム実行形式は、前記ポインタに相当する情報を間接参照表現により示した参照値データを含むことを特徴とする、請求項２３記載のプログラム実行処理方法。
【請求項２５】
前記テンポラリランタイム実行形式は、当該テンポラリランタイム実行形式がランタイム実行形式に変換されたときのサイズを示すデータを含むことを特徴とする、請求項２３記載のプログラム実行処理方法。
【請求項２６】
受信したプログラムを解釈実行処理するためのプログラムであって、コンピュータに、
前記受信したプログラムをプログラム記憶部に記憶するプログラム記憶ステップと、
前記プログラム記憶部に記憶されているプログラムをランタイム実行形式に変換するロードステップと、
前記ロードステップで変換したランタイム実行形式もしくは前記プログラム記憶部に記憶されているプログラムをテンポラリランタイム実行形式に変換する変換ステップと、
前記変換ステップで変換したテンポラリランタイム実行形式をテンポラリランタイム実行形式記憶部に記憶するテンポラリランタイム実行形式記憶ステップと、
プログラムの起動が指示された際に、前記テンポラリランライム実行形式記憶部にテンポラリランタイム実行形式が存在するか否かを判断する判断ステップと、
前記判断ステップの判断の結果、前記テンポラリランライム実行形式記憶部にテンポラリランタイム実行形式が存在した場合に、前記テンポラリランタイム実行形式記憶部に記憶されているテンポラリランタイム実行形式をランタイム実行形式に変換するポストロードステップと、
前記ポストロードステップで変換したランタイム実行形式を解釈実行する解釈ステップとを実行させるためのプログラム。
【請求項２７】
前記ロードステップで変換したランタイム実行形式はランタイム実行形式記憶部に記憶され、
ランタイム実行形式は、前記ランタイム実行形式記憶部における、当該ランタイム実行形式に含まれる所定データの格納アドレスを示すポインタを含み、
前記テンポラリランタイム実行形式は、前記ポインタに相当する情報を間接参照表現により示した参照値データを含むことを特徴とする、請求項２６記載のプログラム。
【請求項２８】
前記テンポラリランタイム実行形式は、当該テンポラリランタイム実行形式がランタイム実行形式に変換されたときのサイズを示すデータを含むことを特徴とする、請求項２６記載のプログラム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、受信したプログラムを解釈実行処理する情報端末装置、プログラム実行処理方法及びプログラムに関するものであり、特に、高速なプログラムの起動を実現する情報端末装置、プログラム実行処理方法及びプログラムに関する。
【背景技術】
【０００２】
近年、携帯電話やＰＨＳ（Ｐｅｒｓｏｎａｌ  Ｈａｎｄｙｐｈｏｎｅ  Ｓｙｓｔｅｍ）、ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｃｅ）などに代表される携帯情報端末に備わっている通信機能を用いたデータ配信サービスが普及している。
【０００３】
その代表例として、画像や着信メロディなどのコンテンツの配信サービスがあげられる。また、単なるデータではなくプログラムをダウンロードし、携帯情報端末上でアプリケーションとして実行させることができる。つまり、プログラムをダウンロードすることによって、携帯情報端末に最初から用意された機能（アプリケーション）だけではなく、後から新たにさまざまな機能を追加し、使用することが可能となる。
【０００４】
このプログラム配信サービスでは、例えば、電子電話帳や電子スケジュール帳などのＰＩＭ（Ｐｅｒｓｏｎａｌ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｍａｎａｇｅｒ）アプリケーションや、ゲームアプリケーションなどの提供を行う。ユーザは、自分の使用したい機能、あるいは自分の使いやすいユーザインタフェース、自分の気に入った画面構成などを備えたアプリケーションを自由に選択し、プログラムをダウンロードすることにより、選択したアプリケーションを使用することが可能となる。
【０００５】
プログラム配信の仕組みを実現するために、有望なソフトウェアアーキテクチャとしてＪａｖａ（登録商標）がある。Ｊａｖａ（登録商標）は仮想マシンの仕組みを備え、機器のハードウェアやＯＳに依存せずにプログラムを動作させることができるため、ワークステーションやパーソナルコンピュータ（以下、ＰＣと略称する）などのコンピューティング分野においてのみならず、家電機器に対しても有効なアーキテクチャと見なされている。
【０００６】
また、携帯情報端末において、既に多くの機種にＪａｖａ（登録商標）仮想マシンが搭載されており、プログラム配信サービスが開始されている。今後、仮想マシンの仕組みを前提としたプログラム配信サービスは、さらに普及していくものと予想される。
【０００７】
しかしながら、携帯情報端末上で、仮想マシンの仕組みを用いて、ダウンロードしたアプリケーションを実行させる場合に問題になるのが、その起動時間の長さである。
【０００８】
ここでの起動時間とは、ユーザあるいは携帯情報端末に搭載されている他のアプリケーション（ブラウザ、メーラ、電話など）が、携帯情報端末内部の仮想マシンに対して、特定のアプリケーションの解釈実行を開始するという指示を与えてから、携帯情報端末の表示画面上に開始が指示されたアプリケーションの初期画面が出力されるまでの経過時間を指す。つまり、起動時間とは、アプリケーションが使用可能になるまでの待ち時間であり、ユーザにとって、実際にアプリケーションを利用していない余分な時間であるため、起動時間が長くなるほど、アプリケーションの実行効率が低下する。
【０００９】
例えば、一般的なＪａｖａ（登録商標）仮想マシンの起動処理は、大きく以下の３つの処理から構成される。以下、Ｊａｖａ（登録商標）を用いて説明するが、他の仮想マシンあってもよいことを、予め記述しておく。
（１）初期化処理
（２）クラス検証処理
（３）クラスロード処理
【００１０】
それぞれの処理についての詳細は、非特許文献１を参照されたい。ここでは以降の説明に必要な、処理の概要のみ述べることとする。
【００１１】
Ｊａｖａ（登録商標）では、プログラムはクラスファイルと呼ばれる１つ以上のファイルから構成される。プログラムがダウンロードされる際には、通常クラスファイルは１つのファイルにパッケージされた形式で提供されるが、ダウンロード後、これは１つ以上のクラスファイルとして展開され、携帯情報端末内のファイルとして保存される。
【００１２】
（１）初期化処理は、Ｊａｖａ（登録商標）仮想マシンの実行を可能にするために必要な初期作業である。具体的には、仮想マシンが使用するメモリ領域（Ｊａｖａ（登録商標）ヒープ領域など）を確保する処理、ガーベジコレクション処理の初期化、クラスローダの初期化、スレッド管理の初期化などを行う。
【００１３】
（２）クラス検証処理は、実行の対象であるプログラムの安全性を保証するために行う処理である。具体的には、クラスファイルの形式の検査と、クラスファイルに含まれるバイトコードなどがＪａｖａ（登録商標）の仕様に準拠していることを検査する。
【００１４】
（３）クラスロード処理は、クラスファイルを、Ｊａｖａ（登録商標）仮想マシンが実行可能な記録形式（以下ランタイム実行形式と呼ぶ）として、仮想マシンが使用するメモリ領域上に展開する処理である。対象となるクラスファイルは、実行するプログラムの最初の実行メソッドとなるｍａｉｎメソッドを持ったクラスファイルと、そのクラスファイルから参照を辿ることのできる全てのクラスファイルである。
【００１５】
以上のような各処理が含まれるため、仮想マシンの仕組みを用いたアプリケーションの起動時間は、携帯情報端末の機械語で記述されたアプリケーション（ネイティブアプリケーション）を起動するのに比して、長いものになっていた。
【００１６】
起動時間のうち、（２）クラス検証処理や（３）クラスロード処理は、概してアプリケーション（プログラム）のサイズが大きくなればなるほど、その処理に長い時間を要するようになり、アプリケーションの実行効率が低下する。特に、ＰＩＭアプリケーションのように、頻繁に何度も立ち上げが行われるような種類のアプリケーションは、起動時間が長くなることで、大きく利便性を欠いたものになりがちである。
【００１７】
これに対し、Ｊａｖａ（登録商標）処理系のクラスファイル形式に対して、前もって何らかの処理を行うことによって、アプリケーションの実行効率を高めるための技術が、特許文献１の「クラスファイルのプリプロセシング及びパツケージングのための方法及び装置」および特許文献２の「動的リンキングおよび動的ローデイングの存在下において動的にデイスパツチされたコールの静的結合」に開示されている。
【非特許文献１】ティム・リンドホルムとフランク・イエーリン（Tim  Lindholm  and  Frank  Yellin）著，「ザ・ジャバ・ヴァーチャル・マシーン・スペシフィケイション(The  Java(TM)  Virtual  Machine  Specification)」，アディソン−ウェスレイ（Addison-Wesley），１９９７年
【特許文献１】特開２０００−２９７０６号公報
【特許文献２】特開平１１−３２７９０６号公報
【発明の開示】
【００１８】
しかしながら、上述した特許文献１および特許文献２で開示された技術は、いずれもアプリケーションの解釈実行速度の高速化や、メモリの効率的な利用を目的としたものであり、ハードウェア資源に関して価格やサイズなどの制約が厳しい携帯情報端末などの情報家電機器において、Ｊａｖａ（登録商標）などの処理系を適用した場合に問題になりがちな、起動時間の短縮を達成するためのものではなかった。
【００１９】
本発明は、上記問題を解決するためになされたものであり、起動処理の中の（３）クラスロード処理を「アプリケーションを初めて起動するときにだけ必要なクラスロード処理」と「アプリケーションの２度目以降の起動でも必要なクラスロード処理」の２つに分け、「初めてのクラスロード処理」による処理結果を、クラスファイル形式とは別の記録形式（以下、テンポラリランタイム実行形式と呼ぶ）として格納しておくことにより、そのプログラムの起動の際に「２度目以降のクラスロード処理」しか行わなくてもよいようにし、プログラムの起動時間の短縮を図ることを目的としている。
【００２０】
上記課題を解決するために、本発明のプログラム実行処理端末装置は、プログラムを例えばＪａｖａ（登録商標）のクラスファイルからランタイム実行形式に変換するローダ部と、前記ローダ部が変換したランタイム実行形式もしくはプログラム記憶部に記憶されているプログラムに基づいて生成されたテンポラリランタイム実行形式を記憶するテンポラリランタイム実行形式記憶部と、前記テンポラリランタイム実行形式記憶部に記憶されているテンポラリランタイム実行形式をランタイム実行形式に変換するポストロード処理を行うポストローダ部とを備え、プログラムの起動が指示された際に、前記テンポラリランライム実行形式記憶部にテンポラリランタイム実行形式が存在するか否かを判断し、存在しない場合には前記ローダ部にランタイム実行形式への変換を要求し、存在する場合には前記ポストローダ部にランタイム実行形式への変換を要求する。
【００２１】
なお、前記ローダ部が変換したランタイム実行形式をテンポラリランタイム実行形式に変換することによってテンポラリランタイム実行形式を得てもよい。このように、プログラムは最初の１回目に起動される時は、通常のロード処理を行い、ロード処理の後にランタイムセービング処理を行い、テンポラリランタイム実行形式を生成しておくことで、そのプログラムは２回目以降の起動では、テンポラリランタイム形式からランタイム形式を生成するポストロード処理を通常のロード処理に置き換えることが可能となり、２回目以降のプログラムの起動に要する処理時間を短縮することができる。
【００２２】
また、前記プログラム記憶部に記憶されているプログラムをテンポラリランタイム実行形式に変換することによってテンポラリランタイム実行形式を得てもよい。このように、予めプログラムをプレロード処理して、テンポラリランタイム実行形式を生成しておくことによって、プログラムの起動は最初の１回目から、ポストロード処理によって通常のロード処理に置き換えることが可能となり、プログラムの起動に要する処理時間を短縮することができる。
【００２３】
また、本発明のプログラム実行処理方法は、前記受信したプログラムをプログラム記憶部に記憶するプログラム記憶ステップと、前記プログラム記憶部に記憶されているプログラムをランタイム実行形式に変換するロードステップと、前記ロードステップで変換したランタイム実行形式もしくは前記プログラム記憶部に記憶されているプログラムをテンポラリランタイム実行形式に変換する変換ステップと、前記変換ステップで変換したテンポラリランタイム実行形式をテンポラリランタイム実行形式記憶部に記憶するテンポラリランタイム実行形式記憶ステップと、プログラムの起動が指示された際に、前記テンポラリランライム実行形式記憶部にテンポラリランタイム実行形式が存在するか否かを判断する判断ステップと、前記判断ステップの判断の結果、前記テンポラリランライム実行形式記憶部にテンポラリランタイム実行形式が存在した場合に、前記テンポラリランタイム実行形式記憶部に記憶されているテンポラリランタイム実行形式をランタイム実行形式に変換するポストロードステップと、前記ポストロードステップで変換したランタイム実行形式を解釈実行する解釈ステップとを備える。
【００２４】
また、本発明のプログラムは、上記のプログラム実行処理方法をコンピュータに実行させるためのものである。このプログラムはコンピュータ読み取り可能な記録媒体に格納された状態で情報端末装置等のコンピュータに供給されてもよいし、通信回線を通じて情報端末装置等のコンピュータに供給されてもよい。
【発明を実施するための最良の形態】
【００２５】
以下、本発明の実施の形態について、図面を用いて詳細に説明する。
【００２６】
（実施の形態１）
携帯情報端末を用いたプログラムのダウンロードサービスでは、既にＪａｖａ（登録商標）の仕組みを用いたものが普及しているため、本発明はその仕組みを拡張することで実現することができる。本説明においては、Ｊａｖａ（登録商標）の仕組みを用いた場合にはどのような実施の形態になるかを適宜交えながら説明を行う。
【００２７】
図１は、本発明の実施の形態１における、携帯情報端末のハードウェア構成を示す図である。図１において、中央演算装置（ＣＰＵ）１と、記憶装置２と、入力装置３と、出力装置４と、送受信装置５を備えており、それぞれシステムバス６を介して接続されている。
【００２８】
記憶装置２は、ＲＯＭ、ＲＡＭ、およびハードディスクなどで構成され、ＣＰＵ１が処理する際に用いられる記憶領域やプログラム自体を記憶する領域として用いられる。入力装置３は、キーボードやキーボタン、マウス、マイクなどで構成され、ユーザからの指示の入力処理を行う。出力装置４は、ディスプレイなどの表示装置やスピーカーなどで構成され、ＣＰＵ１から出力されるデータの画面表示や、音声データの再生などの処理を行う。送受信装置５は、無線あるいは有線伝送路を介してデータ通信を行い、ＣＰＵ１は、送受信装置５を介して外部装置（図示せず）からプログラムなどのデータをダウンロードすることができる。
【００２９】
図２は、本実施の形態のプログラム実行処理端末装置の構成を示すブロック図である。プログラム実行処理端末装置は、プログラムダウンロード部１０１と、ローダ部１０２と、ランタイムセービング部１０３と、プレローダ部１０４と、ポストローダ部１０５と、インタプリタ部１０６と、制御部１０７と、プログラム記憶部３０１と、テンポラリランタイム実行形式記憶部３０２と、ランタイム実行形式記憶部３０３を備えている。
【００３０】
プログラムダウンロード部１０１は、プログラム配信先よりプログラムを受信し、受信したプログラムを制御部１０７を介してプログラム記憶部３０１に記憶格納する。プログラムダウンロード部１０１は、従来の携帯情報端末が備えるプログラムのダウンロードの仕組みを用いて実現することができる。
【００３１】
ローダ部１０２は、制御部１０７からの要求に従い、プログラム記憶部３０１に格納されたプログラムをランタイム実行形式に変換し、ランタイム実行形式記憶部３０３に格納する処理を行う。また、インタプリタ部１０６にプログラムの実行開始を通知する。さらに、変換したランタイム実行形式をランタイムセービング部１０３に通知し、ランタイムセービング処理を要求する。
【００３２】
ランタイムセービング部１０３は、ローダ部１０２からの要求に従い、ランタイム実行形式記憶部３０３に格納されたランタイム実行形式をテンポラリランタイム実行形式に変換し、テンポラリランタイム実行形式記憶部３０２に格納する処理を行う。
【００３３】
プレローダ部１０４は、制御部１０７からの要求に従い、プログラム記憶部３０１に格納されたプログラムをテンポラリランタイム実行形式に変換し、テンポラリランタイム実行形式記憶部３０２に格納する処理を行う。
【００３４】
ポストローダ部１０５は、テンポラリランタイム実行形式記憶部３０２に記憶されたテンポラリランタイム実行形式を、ランタイム実行形式に変換し、ランタイム実行形式記憶部３０３に格納する処理を行う。また、インタプリタ部１０６にプログラムの実行開始を通知する。
【００３５】
インタプリタ部１０６は、ローダ部１０２またはポストローダ部１０５からの実行開始の通知に従い、ランタイム実行形式記憶部３０３に格納されているランタイム実行形式を解釈実行する。Ｊａｖａ（登録商標）の仕組みを用いた場合、このインタプリタ部１０６は、従来のＪａｖａ（登録商標）仮想マシンを用いて実現することができる。
【００３６】
制御部１０７は、プログラムの起動が指示された際に、テンポラリランタイム実行形式記憶部３０２に起動対象のプログラムのテンポラリランタイム実行形式が存在するか否かを判断し、存在しない場合にはローダ部１０２にランタイム実行形式への変換を要求し、存在する場合にはポストローダ部１０５にランタイム実行形式への変換を要求する。テンポラリランタイム実行形式をランタイム実行形式へ変換するには、後述するように、大部分のデータをコピーするとともに、間接参照表現のアドレスデータを実際のアドレスへ変換するだけでよいため、プログラムをランタイム実行形式に変換する場合と比較して処理時間は短い。これにより、既にランタイム実行形式を保持しているプログラムに関しては、起動時間を短縮することが可能となる。
【００３７】
プログラム記憶部３０１は、プログラムダウンロード部１０１がプログラム配信先より受信したプログラムを格納する。なお、フラッシュメモリ等に代表される不揮発性メモリ、すなわち携帯情報端末の電源がＯＦＦになっても記録が保持され続けるデバイスによって実現された場合、携帯情報端末の電源がＯＦＦになった場合にプログラムの再ダウンロードを防ぐことが可能となる。また、ダウンロードしたプログラムだけでなく、前もって特定のプログラムが格納されていてもよい。さらに、ＲＯＭなどの格納データが消去不能なメモリを用いて、前もって格納されているプログラムは固定であってもよい。
【００３８】
ランタイム実行形式記憶部３０３は、ローダ部１０２またはポストローダ部１０５が変換したランタイム実行形式を格納する。ランタイム実行形式は解釈実行を行う対象として、インタプリタ部１０６から直接アクセスされる記憶領域であるため、高速なアクセスが可能な記憶デバイスによって実現されたほうがよい。例えば揮発性のＲＡＭなどがこれに使用される。
【００３９】
テンポラリランタイム実行形式記憶部３０２は、ランタイムセービング部１０３が変換したテンポラリランタイム実行形式を格納する。テンポラリランタイム実行形式記憶部３０２は、特に揮発性・不揮発性を問わない。プログラムの起動時間の短縮を実現するためには、データのアクセス速度が、プログラム記憶部３０１の実現に用いられているものよりは高速な記憶デバイスが用いられることが望ましい。なお、テンポラリランタイム実行形式記憶部３０２として例えばフラッシュメモリのような不揮発性のメモリを用いれば、携帯情報端末の電源を切る直前にテンポラリランタイム実行形式記憶部３０２に記憶されていたテンポラリランタイム実行形式を、一旦電源を切ってから次に電源を入れたときに利用することができるため好ましい。
【００４０】
なお、本実施の形態ではランタイムセービング部１０３とプレローダ部１０４を共に備えているとしたが、本発明はこれに限定されない。すなわち、どちらか一方のみを備えていてもよい。この場合にも本実施の形態と同様に、プログラムの起動時間を短縮することができる。
【００４１】
図３は、ローダ部１０２、ランタイムセービング部１０３、プレローダ部１０４、ポストローダ部１０５の各処理部で行う、データの流れの一例を示す図である。プログラム配信先からプログラム２０１をダウンロードしてから、ランタイム実行形式２０３が解釈実行されるまでの、データの変換の流れを示している。
【００４２】
まず、プログラム配信先から送信されたプログラム２０１をプログラムダウンロード部１０１が受信し、プログラム記憶部３０１に格納する。
【００４３】
次に、プログラム２０１の起動が指示されると、制御部１０７からの指示に従い、ローダ部１０２がプログラム２０１をランタイム実行形式２０３に変換し、インタプリタ部１０６がランタイム実行形式２０３を解釈実行する。また、同時にランタイムセービング部１０３がランタイム実行形式２０３をテンポラリランタイム実行形式２０２に変換し、テンポラリランタイム実行形式記憶部３０２に格納する。再度、プログラム２０１の起動が指示されると、制御部１０７からの指示に従い、ポストローダ部１０５がテンポラリランタイム実行形式２０２をランタイム実行形式２０３に変換し、インタプリタ部１０６がランタイム実行形式２０３を解釈実行する。
【００４４】
また、プレロード処理を行う場合のデータの変換の流れを以下に示す。プレローダ部１０４がプログラム２０１をテンポラリランタイム実行形式２０２に変換し、テンポラリランタイム実行形式記憶部３０２に格納する。プログラム２０１の起動が指示されると、制御部１０７からの指示に従い、ポストローダ部１０５がテンポラリランタイム実行形式２０２をランタイム実行形式２０３に変換し、インタプリタ部１０６がランタイム実行形式２０３を解釈実行する。
【００４５】
図４から図８は、図３で説明したプログラム２０１、ランタイム実行形式２０３、テンポラリランタイム実行形式２０２の構造の一例を示した。以下、順に説明する。
【００４６】
プログラム２０１は、携帯電話によって解釈実行が可能な形式を持ったデータとして獲得することができる。携帯電話にＪａｖａ（登録商標）の仕組みが用いられている場合には、Ｊａｖａ（登録商標）の実行形式であるクラスファイルがプログラム２０１としてダウンロードされる。
【００４７】
プログラム２０１の構造の一例を図４に示す。図４はプログラム２０１に記録されたデータ内容をＣ言語に倣って構造体表現したものである。ｕ１型、ｕ２型、ｕ４型はそれぞれ符号なしの１バイト、２バイト、４バイトのデータ量を表現している。Ｊａｖａ（登録商標）では、プログラム２０１は通常、１つ以上のクラスファイルから構成されるが、クラスファイル自体の構造はどのクラスファイルも同じである。クラスファイルの構造自体は、非特許文献１に詳説されている。図４では特に、最上位に位置付けられる構造体のみ示している。
【００４８】
次に、ランタイム実行形式２０３の構造の一例を図５および図６に示す。ランタイム実行形式２０３は、ランタイム実行形式記憶部３０３に格納される連続したメモリイメージとして実現される。クラスファイルのフォーマット自体は先に述べたように規定されているが、ランタイム形式のフォーマットに関してはＪａｖａ（登録商標）仮想マシンの実装依存とされており、何ら規定はされていない。
【００４９】
図５および図６では、ランタイム実行形式２０３を、クラス単位のメモリイメージとして示している。Ｊａｖａ（登録商標）の実際のプログラムは、２つ以上のクラスファイルから構成されることも多いが、その場合には同様のメモリイメージがクラスファイルの数だけ生成されることになる。クラスを表現したメモリイメージはその中に、さらに下位の構造であるコンスタントプール構造のランタイム形式、インタフェース構造のランタイム形式、フィールド構造のランタイム形式、メソッド構造のランタイム形式、アトリビュート構造のランタイム形式を含んでいる。
【００５０】
図５および図６のメモリイメージの中で白い箱で示されたデータは、図４における同名のデータの値がそのまま記録されることを意味している。図５および図６のメモリイメージの中で網掛けで表現されているデータは、そのデータがメモリイメージの中の、他のデータ格納場所のアドレスを指す参照値（ポインタ）であることを表現している。具体的には、次の通りになっている。
【００５１】
「＊ｃｏｎｓｔａｎｔ＿ｐｏｏｌ」は、コンスタントプール構造のランタイム形式の先頭を指すポインタ、「（ｃｏｎｓｔａｎｔ＿ｐｏｏｌ＊）ｔｈｉｓ＿ｃｌａｓｓ」および「（ｃｏｎｓｔａｎｔ＿ｐｏｏｌ＊）ｓｕｐｅｒ＿ｃｌａｓｓ」は、コンスタントプール構造の中のエントリのアドレスを指すポインタ、「＊ｉｎｔｅｒｆａｃｅｓ」は、インタフェース構造のランタイム形式の先頭を指すポインタ、「＊ｆｉｅｌｄｓ」は、フィールド構造のランタイム形式の先頭を指すポインタ、「＊ｍｅｔｈｏｄｓ」は、メソッド構造のランタイム形式の先頭を指すポインタ、「＊ａｔｔｒｉｂｕｔｅｓ」は、アトリビュート構造のランタイム形式の先頭を指すポインタである。
【００５２】
なお、ポインタ値は必ずしも、そのポインタが含まれるのと同じクラスのメモリイメージの中の構造を指しているとは限らず、他のクラスのメモリイメージの構造を指している場合もある。
【００５３】
ランタイム実行形式２０３のメモリイメージはポインタを含んでおり、このポインタ値はメモリイメージ生成の際に一定の値には決定付けられない（ランタイム実行形式記憶部３０３中でのメモリイメージの配置位置によって、ポインタ値は変動するからである）。
【００５４】
さらに詳細には、図５および図６の中で描いたポインタ以外でも、コンスタントプール構造の中のエントリ、インタフェース構造の中のエントリ、フィールド構造の中のエントリ、メソッド構造の中のエントリ、アトリビュート構造の中のエントリの其々のそれぞれのデータの中にもポインタ値が含まれている可能性があるが、本説明中では割愛する。
【００５５】
次に、テンポラリランタイム実行形式２０２の構造の一例を図７および図８に示す。テンポラリランタイム実行形式２０２は、テンポラリランタイム実行形式記憶部３０２に格納される。メモリイメージとして記録されても、データをバイト列としたファイルとして記録されてもどちらでもよいが、ここでは図５および図６の表現と同じくメモリイメージとして示すことにする。ここに示すのは図５および図６で示したランタイム実行形式２０３の実施の形態に対応した、テンポラリランタイム実行形式２０２の実現例である。
【００５６】
図７および図８のメモリイメージには、図５および図６と比較して新たに以下のデータが先頭に加わっている。
【００５７】
「ｃｌａｓｓ＿ｉｄ」は、メモリイメージに対してクラス単位に、一意に与えられる識別データ（クラスの識別番号）である。複数のクラスのメモリイメージが作成される場合、このｃｌａｓｓ＿ｉｄの値は重複してはならない。「ｒｕｎｔｉｍｅ＿ｉｍａｇｅ＿ｓｉｚｅ」は、本テンポラリランタイム実行形式から生成されるランタイム実行形式のメモリサイズを記録したものである。
【００５８】
また、図７および図８のメモリイメージには、図５および図６とは異なり、ポインタ値がない。図５および図６にてポインタとして表現されていたデータは、全て次の２つのデータの組に変換されている（図７および図８の中で網がけされている部分）。
【００５９】
「ｒｅｆ＿ｃｌａｓｓ＿ｉｄ」は、クラスの識別番号を指定する。この後続データには必ずエントリ番号が続く。「エントリ番号」は、コンスタントプール構造／インタフェース構造／フィールド構造／メソッド構造／アトリビュート構造の中のデータのエントリ番号を示す。
【００６０】
テンポラリランタイム実行形式２０２の実施の形態では、ランタイム実行形式２０３の中でポインタとして表現される部分を全て「クラスＩＤ」＋「エントリの番号」という形式（間接参照表現）に変換して記録を行っている。
【００６１】
先に述べたように、ランタイム実行形式２０３の中のポインタ表現は、時として別のクラスのメモリイメージの構造を指している場合がある。どのクラスのメモリイメージのものであるかを特定するために、エントリ番号は必ずｃｌａｓｓ＿ｉｄと組み合わせた形で表現される。
【００６２】
テンポラリランタイム実行形式２０３のメモリイメージはポインタを含んでいないため、テンポラリランタイム実行形式記憶部３０２の中でのメモリイメージの配置位置によらず、メモリイメージ生成の際に一意のデータ列に決定付けられる。すなわち、あるクラスを表現するテンポラリランタイム実行形式の記録内容は常に一意、という状態を保っている。
【００６３】
以上が、各データ形式の構造に関する説明である。
【００６４】
次に、図２の構成図に描かれた各処理部が行う、処理内容に関して説明する。
【００６５】
図９は、ローダ部１０２におけるデータ変換の処理の流れの一例を示す。
【００６６】
まず、ローダ部１０２によって生成されるランタイム実行形式２０３のメモリ使用量を計算する（ステップ６０１）。これはプログラム２０１に含まれるクラスファイルを検査し、ｃｏｎｓｔａｎｔ＿ｐｏｏｌ＿ｃｏｕｎｔ、ｉｎｔｅｒｆａｃｅｓ＿ｃｏｕｎｔ、ｆｉｅｌｄｓ＿ｃｏｕｎｔ、ｍｅｔｈｏｄｓ＿ｃｏｕｎｔ、ａｔｔｒｉｂｕｔｅｓ＿ｃｏｕｎｔといった、各構造のエントリ数を示す数値と、各構造のエントリ毎のサイズにより算出することが可能である。
【００６７】
ステップ６０１で算出した値に基づいて、ランタイム実行形式２０３の格納先であるランタイム実行形式記憶部３０３に、保存メモリ領域の空きが存在するか否かを検査する（ステップ６０２）。空きが存在しない場合（ステップ６０２がＮ）、ローダ部１０２によるデータ変換処理の続行を不可能と判断して、ロード処理そのものを取りやめ、プログラムの起動不可能であることをユーザに通知し、処理を終了する（ステップ６０３）。一方、空きが存在する場合（ステップ６０２がＹ）、ランタイム実行形式記憶部３０３に、ステップ６０１で計算した値の分だけのメモリ領域を確保する（ステップ６０４）。
【００６８】
次に、クラスファイルを検査し、ランタイム実行形式２０３の中でポインタ値として表現される部分以外のデータをコピーすることにより、ランタイム実行形式記憶部３０３にデータを格納する（ステップ６０５）。これは図５および図６のメモリイメージの中で白い箱で示されたデータに相当する。
【００６９】
最後に、クラスファイルから、ランタイム実行形式２０３の中でポインタ値として表現されるデータを計算し、算出したデータをランタイム実行形式記憶部３０３に格納し、プログラム２０１からランタイム実行形式２０３への変換処理を終了する（ステップ６０６）。これは図５および図６のメモリイメージの中で網掛けで表現した箱で示されたデータに相当する。
【００７０】
図１０は、ランタイムセービング部１０３におけるデータ変換の処理の流れの一例を示す。
【００７１】
まず、ランタイムセービング部１０３によって生成されるテンポラリランタイム実行形式２０２のメモリ使用量を計算する（ステップ７０１）。これはランタイム実行形式２０３を検査し、ｃｏｎｓｔａｎｔ＿ｐｏｏｌ＿ｃｏｕｎｔ、ｉｎｔｅｒｆａｃｅｓ＿ｃｏｕｎｔ、ｆｉｅｌｄｓ＿ｃｏｕｎｔ、ｍｅｔｈｏｄｓ＿ｃｏｕｎｔ、ａｔｔｒｉｂｕｔｅｓ＿ｃｏｕｎｔといった、各構造のエントリ数を示す数値と、各構造のエントリ毎のサイズにより算出することが可能である。
【００７２】
ステップ７０１で算出した値に基づいて、テンポラリランタイム実行形式２０２の格納先であるテンポラリランタイム実行形式記憶部３０２に、保存メモリ領域の空きが存在するか否かを検査する（ステップ７０２）。空きが存在しない場合（ステップ７０２がＮ）、ランタイムセービング部１０３によるデータ変換処理の続行を不可能と判断して、ランタイムセービング処理そのものを取りやめ、処理を終了する（ステップ７０３）。一方、空きが存在する場合（ステップ７０２がＹ）、テンポラリランタイム実行形式記憶部３０２に、ステップ７０１で計算した値の分だけのメモリ領域を確保する（ステップ７０４）。
【００７３】
次に、ランタイムセービング処理の対象となる全てのクラスに対して識別番号を与え、テンポラリランタイム実行形式２０２のｃｌａｓｓ＿ｉｄデータとしてテンポラリランタイム実行形式記憶部３０２にデータを格納する（ステップ７０５）。
【００７４】
ランタイムセービング処理の処理元となるデータであるランタイム実行形式２０３が、ランタイム実行形式記憶部３０３の中で、その記録のために使用しているメモリ量の数値を計算し、テンポラリランタイム実行形式２０２のｒｕｎｔｉｍｅ＿ｉｍａｇｅ＿ｓｉｚｅデータとしてテンポラリランタイム実行形式記憶部３０２に格納する（ステップ７０６）。
【００７５】
ランタイム実行形式２０３のメモリイメージを検査し、ランタイム実行形式２０３の中でポインタ値として表現される部分以外のデータを、テンポラリランタイム実行形式２０２のデータとしてコピーすることにより、テンポラリランタイム実行形式記憶部３０２にデータを格納する（ステップ７０７）。これは図７および図８のメモリイメージの中で白い箱で示されたデータに相当する。
【００７６】
最後に、ランタイム実行形式２０３のメモリイメージを検査し、ランタイム実行形式２０３の中でポインタ値として表現されるデータに関して変換を行い、変換したデータをテンポラリランタイム実行形式記憶部３０２に格納し、ランタイム実行形式２０３からテンポラリランタイム実行形式２０２への変換処理を終了する（ステップ７０８）。ポインタ値のデータは、「そのポインタが指す構造を含むクラスの識別番号」と「構造の中のエントリ番号」という形に変換される。これは図７および図８のメモリイメージの中で、ｃｌａｓｓ＿ｉｄ、ｒｕｎｔｉｍｅ＿ｉｍａｇｅ＿ｓｉｚｅ以外の、網掛けで表現した箱で示されたデータに相当する。
【００７７】
図１１は、プレローダ部１０４におけるデータ変換の処理の流れの一例を示す。
【００７８】
まず、プレローダ部１０４によって生成されるテンポラリランタイム実行形式２０２のメモリ使用量を計算する（ステップ８０１）。これは処理前のクラスファイルを検査し、ｃｏｎｓｔａｎｔ＿ｐｏｏｌ＿ｃｏｕｎｔ、ｉｎｔｅｒｆａｃｅｓ＿ｃｏｕｎｔ、ｆｉｅｌｄｓ＿ｃｏｕｎｔ、ｍｅｔｈｏｄｓ＿ｃｏｕｎｔ、ａｔｔｒｉｂｕｔｅｓ＿ｃｏｕｎｔといった、各構造のエントリ数を示す数値と、各構造のエントリ毎のサイズにより算出することが可能である。
【００７９】
ステップ８０１で算出した値に基づいて、テンポラリランタイム実行形式２０２の格納先であるテンポラリランタイム実行形式記憶部３０２に、保存メモリ領域の空きが存在するか否かを検査する（ステップ８０２）。空きが存在しない場合（ステップ８０２がＮ）、プレローダ部１０４によるデータ変換処理の続行を不可能と判断して、プレロード処理そのものを取りやめ、処理を終了する（ステップ８０３）。一方、空きが存在する場合（ステップ８０２がＹ）、テンポラリランタイム実行形式記憶部３０２に、ステップ８０１で計算した値の分だけのメモリ領域を確保する（ステップ８０４）。
【００８０】
次に、プレロード処理の対象となる全てのクラスに対して識別番号を与え、テンポラリランタイム実行形式２０２のｃｌａｓｓ＿ｉｄデータとしてテンポラリランタイム実行形式記憶部３０２にデータを格納する（ステップ８０５）。
【００８１】
プレロード処理の処理元となるデータであるプログラム２０１が、ランタイム実行形式２０３に変換された場合に使用するメモリ量の数値を計算し、テンポラリランタイム実行形式２０２のｒｕｎｔｉｍｅ＿ｉｍａｇｅ＿ｓｉｚｅデータとしてテンポラリランタイム実行形式記憶部３０２に格納する（ステップ８０６）。
【００８２】
プログラム２０１を検査し、テンポラリランタイム実行形式２０２の中で、他の構造への参照値として表現される部分以外のデータをテンポラリランタイム実行形式２０２のデータとしてコピーする（ステップ８０７）。これは図７および図８のメモリイメージの中で白い箱で示されたデータに相当する。
【００８３】
最後に、プログラム２０１を検査し、テンポラリランタイム実行形式２０２の中で、他の構造への参照値として表現される部分のデータを、「参照先の構造を含むクラスの識別番号」と「構造の中のエントリ番号」という形のデータに変換し、プログラム２０１からテンポラリランタイム実行形式２０２への変換処理を終了する（ステップ８０８）。
【００８４】
これは図７および図８のメモリイメージの中で、ｃｌａｓｓ＿ｉｄ、ｒｕｎｔｉｍｅ＿ｉｍａｇｅ＿ｓｉｚｅ以外の、網がけの箱で示されたデータに相当する。
【００８５】
図１２は、ポストローダ部１０５におけるデータ変換の処理の流れの一例を示す。
【００８６】
まず、ポストローダ部１０５によって生成されるランタイム実行形式２０３のメモリ使用量を計算する（ステップ９０１）。これは、テンポラリランタイム実行形式２０２のデータｒｕｎｔｉｍｅ＿ｉｍａｇｅ＿ｓｉｚｅを参照することで簡単に得ることが出来る。
【００８７】
ステップ９０１で得た値に基づいて、ランタイム実行形式２０３の格納先であるランタイム実行形式記憶部３０３に、保存メモリ領域の空きが存在するか否かを検査する（ステップ９０２）。空きが存在しない場合（ステップ９０２がＮ）、ポストローダ部１０５による処理の続行を不可能と判断して、ポストロード処理そのものを取りやめ、プログラムの起動不可能であることをユーザに通知し、処理を終了する（ステップ９０３）。一方、空きが存在する場合（ステップ９０２がＹ）、ランタイム実行形式記憶部３０３に、ステップ９０１で計算した値の分だけのメモリ領域を確保する（ステップ９０４）。
【００８８】
次に、テンポラリランタイム実行形式２０２を検査し、ランタイム実行形式２０３の中でポインタ値として表現される部分以外のデータをコピーすることにより、ランタイム実行形式記憶部３０３にデータを格納する（ステップ９０５）。これは図５および図６のメモリイメージの中で白い箱で示されたデータに相当する。
【００８９】
最後に、ランタイム実行形式２０３の中でポインタ値として表現されるデータを計算し、算出したデータをランタイム実行形式記憶部３０３に格納し、テンポラリランタイム実行形式２０２からランタイム実行形式２０３への変換処理を終了する（ステップ９０６）。この計算は、テンポラリランタイム実行形式２０２の中の参照値、すなわち「参照先の構造を含むクラスの識別番号」と「構造の中のエントリ番号」という形のデータを、ポインタに変換することによって実現できる。このデータは図５および図６のメモリイメージの中で網掛けで表現した箱で示されたデータに相当する。
【００９０】
以上により、前もってテンポラリランタイム実行形式を保持していることにより、ポストロード処理のみでプログラムを起動実行することが可能となる。これにより、（１）生成されるランタイム実行形式２０３のメモリ使用量の計算が簡単である。（２）テンポラリランタイム実行形式２０２のメモリイメージは、プログラム２０１（クラスファイル形式）のデータと比較して、ランタイム実行形式２０３のメモリイメージに非常に近い形でデータを保存しており、ポインタ値以外はほとんどメモリイメージをコピーする形で簡単にランタイム実行形式２０３が得られる。という大きな２つの効果により、イメージの生成の処理量を大幅に少なくすることができ、プログラムの起動時間を短縮することが可能となる。
【００９１】
図１３は、ランタイムセービング処理時の画面表示について説明した図である。
【００９２】
なお、本発明の実施の形態１において、プログラムがロードされた後に、続けてランタイムセービング処理を行うものとする。つまり、ランタイムセービング部１０３は、ローダ部１０２によるロード処理の終了タイミングに、テンポラリランタイム実行形式を生成し格納するメモリ領域の空きが存在するか否かをチェックし、空きがあると判断された場合に直ちにランタイムセービング処理を行えばよい。
【００９３】
図１３（ａ）では、ローダ部１０２がプログラム２０１をランタイム実行形式２０３に変換する処理中における携帯情報端末の表示画面出力と、ランタイムセービング部１０３がランタイム実行形式２０３をテンポラリランタイム実行形式２０２に変換する処理中における携帯情報端末の表示画面出力とを変更し、ユーザに処理状況を通知する例を示している。この場合、ユーザがランタイムセービング処理を余計な処理と考え、プログラムが実行開始するまでの待ち時間に余分なストレスを感じる可能性がある。
【００９４】
図１３（ｂ）では、これら２つの処理の表示画面出力をあえて変更せずに同一にし、ユーザにこれらの処理の境界を通知しない例を示している。これにより、ランタイムセービング処理の処理時間をロード処理に隠蔽し、ユーザに無用なストレスを与えないようにすることができる。
【００９５】
図１４は、プレロード処理時の画面表示について説明した図である。
【００９６】
なお、本発明の実施の形態１において、プログラムがダウンロードされた時に、テンポラリランタイム実行形式を生成し格納するメモリ領域の空きが存在すれば、無条件にプレロード処理を行うものとする。つまり、プレローダ部１０４は、ダウンロード処理の終了後に、テンポラリランタイム実行形式を生成し格納するメモリ領域の空きが存在するか否かをチェックし、空きがあると判断された場合に直ちにプレロード処理を行えばよい。
【００９７】
図１４（ａ）では、プログラムダウンロード部１０１がプログラム２０１をダウンロードする処理中における携帯情報端末の表示画面出力と、プレローダ部１０４がプログラム２０１をテンポラリランタイム実行形式２０２に変換する処理中における携帯情報端末の表示画面出力とを変更し、ユーザに処理状況を通知する例を示している。この場合、ユーザがプレロード処理を余計な処理と考え、プログラムが実行開始するまでの待ち時間に余分なストレスを感じる可能性がある。
【００９８】
図１４（ｂ）では、これら２つの処理の表示画面出力をあえて変更せずに同一にし、ユーザにこれらの処理の境界を通知しない例を示している。これにより、プレロード処理の処理時間をダウンロード処理に隠蔽し、ユーザに無用なストレスを与えないようにすることができる。
【００９９】
以上により、ランタイムセービング部１０３またはプレローダ部１０４により、前もってテンポラリランタイム実行形式を保持することができ、ポストロード処理のみでプログラムの解釈実行が可能となることにより、起動時間を短縮することができる。
【０１００】
（実施の形態２）
本発明の実施の形態１では、ランタイムセービング部によるランタイムセービング処理は、プログラムがロードされた後に、続けてロードされたプログラムに対して行うものとした。しかし、これ以外の判断基準に基づき、ランタイムセービング処理の対象プログラムを選択決定することができる。以下に、図を用いて詳細を説明する。
【０１０１】
図１５は、本発明の実施の形態２におけるプログラム実行処理端末装置の構成を示すブロック図である。プログラムダウンロード部１０１と、ローダ部１０２と、プレローダ部１０４と、ポストローダ部１０５と、インタプリタ部１０６と、制御部１０７と、ランタイムセービング部１１０と、プログラム記憶部３０１と、テンポラリランタイム実行形式記憶部３０２と、ランタイム実行形式記憶部３０３と、設定情報記憶部３０４と、インタプリット履歴記憶部３０５とから構成されている。プログラムダウンロード部１０１と、ローダ部１０２と、プレローダ部１０４と、ポストローダ部１０５と、インタプリタ部１０６と、制御部１０７と、プログラム記憶部３０１と、テンポラリランタイム実行形式記憶部３０２と、ランタイム実行形式記憶部３０３は、図２で説明したものと同じである。ここでは、新規に追加したランタイムセービング部１１０と、設定情報記憶部３０４と、インタプリット履歴記憶部３０５について説明する。
【０１０２】
ランタイムセービング部１１０は、設定情報記憶部３０４またはインタプリット履歴記憶部３０５に格納されている設定情報または履歴情報に基づき、ランタイムセービング処理の開始タイミングと対象プログラムを選択決定する。
【０１０３】
設定情報記憶部３０４は、ランタイムセービング処理を行う対象プログラムを識別する設定情報を格納する。この設定情報は、ランタイムセービング部１１０から参照され、ランタイムセービング処理対象と指定されているプログラム（高速起動指定のプログラム）がロードされた場合に、続けてランタイムセービング処理を実行する。
【０１０４】
設定情報記憶部３０４に格納された設定情報は、例えば、ユーザの入力指定に基づいて決定する。図１６に、入力画面の一例を示す。ユーザは携帯情報端末の表示画面に表示したプログラム一覧から、各プログラムごとに高速起動のＯＮあるいはＯＦＦを指定することができる。図１６では、「Ｓｃｈｅｄｕｌｅ」および「ＭｅｍｏＰａｄ」というプログラムが高速起動ＯＮとして指定されている。高速起動ＯＮとして指定されているプログラムがロードされた場合には、ランタイムセービング処理を行い、それ以外のプログラムがロードされた場合にはランタイムセービング処理は行わない。なお、ユーザの入力指定に関係なく、常に特定のプログラムを高速起動指定することも可能である。
【０１０５】
インタプリット履歴記憶部３０５は、各プログラムが過去に解釈実行された履歴情報を格納する。この履歴情報は、ランタイムセービング部１１０から参照され、履歴情報から使用頻度が高いと判断されるプログラムがロードされた場合に、続けてランタイムセービング処理を実行する。
【０１０６】
インタプリット履歴記憶部３０５に格納された履歴情報の一例を、図１７に示す。図１７では、プログラム記憶部３０１に格納された全てのプログラムごとに、これまでに何回起動されたかという情報と、最後に起動された時刻はいつか、という情報をテーブルとして保持している。なお、平均起動時間や、起動間隔など、他の情報を含んでもよく、また、例えば起動回数だけといった、一つの情報のみでもよい。あるプログラムがロードされた場合に、そのプログラムについてランタイムセービング処理を行うか否かの判定については、例えば以下の判断基準を適用することが考えられる。なお、インタプリット履歴記憶部３０５の履歴情報を用いた他の判断基準であってもよい。
【０１０７】
第１の判断基準は、３回以上起動されたことがあるプログラムがロードされた場合には、そのプログラムは頻繁に使用されるとみなし、ランタイムセービング処理を行う。選択基準の数値に関しては３回でなくとも、任意の数でも良い。
【０１０８】
第２の判断基準は、全てのプログラムの中で、これまでに起動された回数の多い、上位２つのプログラムに関しては、そのプログラムは頻繁に使用されるとみなし、ランタイムセービング処理を行う。選択基準の数値に関しては上位２つでなくとも、任意の数でも良い。
【０１０９】
以上により、ランタイムセービング処理の対象プログラムを選択することが可能となり、高速起動が必要なプログラムや使用頻度が高いプログラムを選択して、ランタイムセービング処理を実施することができる。よって、高速起動が不要なプログラムや使用頻度が低いプログラムのテンポラリランタイム実行形式によってテンポラリランタイム実行形式記憶部３０２の記憶領域が占有されてしまうのを防止できる。つまりテンポラリランタイム実行形式記憶部３０２の空き記憶領域不足によって高速起動が必要なプログラムや使用頻度が高いプログラムのランタイムセービング処理が失敗に終わるのを防止することができ、効率的なランタイムセービング処理を実施することができる。
【０１１０】
（実施の形態３）
本発明の実施の形態１では、プレローダ部によるプレロード処理は、プログラムがダウンロードされた時に、続けてダウンロードされたプログラムに対して行うものとした。しかし、これ以外の判断基準に基づき、プレロード処理の開始タイミングと対象プログラムを選択決定することができる。
【０１１１】
図１８は、本発明の実施の形態３におけるプログラム実行処理端末装置の構成を示すブロック図である。プログラムダウンロード部１０１と、ローダ部１０２と、ポストローダ部１０５と、インタプリタ部１０６と、制御部１０７と、ランタイムセービング部１１０と、プレローダ部１１１と、プレロード制御部１１２と、プログラム記憶部３０１と、テンポラリランタイム実行形式記憶部３０２と、ランタイム実行形式記憶部３０３と、設定情報記憶部３０４と、インタプリット履歴記憶部３０５とから構成されている。プログラムダウンロード部１０１と、ローダ部１０２と、ポストローダ部１０５と、インタプリタ部１０６と、制御部１０７と、ランタイムセービング部１１０と、プログラム記憶部３０１と、テンポラリランタイム実行形式記憶部３０２と、ランタイム実行形式記憶部３０３と、設定情報記憶部３０４と、インタプリット履歴記憶部３０５は、図１５で説明したものと同じである。ここでは、新規に追加したプレローダ部１１１と、プレロード制御部１１２について説明する。
【０１１２】
プレローダ部１１１は、プレロード制御部１１２から通知を受信することにより、プログラム記憶部３０１に記録されたプログラムを、テンポラリランタイム実行形式に変換し、テンポラリランタイム実行形式記憶部３０２に格納するプレロード処理を行う。特に、特定プログラムを指定する識別子が通知された場合、プレロード処理対象として、通知されたプログラムを選択する。なお、制御部１０７からプレロード開始の指示を受信することにより、プログラムをダウンロードした際に、続けてプレロード処理を実施することも可能である。また、設定情報記憶部３０４またはインタプリット履歴記憶部３０５に格納されている設定情報または履歴情報に基づき、プレロード処理の対象プログラムを選択決定する。
【０１１３】
プレロード制御部１１２は、携帯情報端末の機器状態に基づいて、プレロード開始のタイミングを決定し、プレローダ部１１１に処理の開始を通知する。なお、プレロード対象のプログラムをプレロード制御部１１２で決定し、決定済みのプログラムをプレローダ部１１１に通知してもよいし、プレロード対象のプログラムを指定せずに開始のタイミングのみを通知し、プレローダ部１１１が処理対象のプログラムを選択してもよい。また、機器状態としては、例えば以下の各判断基準を適用することが考えられる。
【０１１４】
第１の判断基準は、携帯情報端末が一定時間以上、ユーザの入力操作を何も受け付けない（待ち受け）状態に入っていれば、プレロード処理を行う。この場合、プレロード制御部１１２は、前もって設定した時間長データ（基準時間）を保持しており、携帯情報端末に対してユーザの入力操作が加えられていない（待ち受け）状態の連続時間を計測し、基準時間と比較することにより、開始タイミングを決定する。
【０１１５】
図１９に、プレロード制御部１１２における処理の流れの一例を示す。
【０１１６】
まず、待ち受け状態の連続時間を初期化する（ステップ１５０１）。
【０１１７】
携帯情報端末の機器状態として、一定時間以上ユーザの入力を何も受け付けていない（待ち受け）状態に入っているか否かを検出する（ステップ１５０２）。待ち受け状態でない場合（ステップ１５０２がＮ）、ステップ１５０１に遷移し、処理を繰り返す。一方、待ち受け状態である場合（ステップ１５０２がＹ）、待ち受け状態の連続時間を更新し（ステップ１５０３）、その連続時間の長さと、基準時間との比較を行う（ステップ１５０４）。
【０１１８】
待ち受け状態の連続時間が基準時間を越えるまで（ステップ１５０４がＮ）、ステップ１５０２からステップ１５０４を繰り返す。待ち受け状態の連続時間が基準時間を越えた時（ステップ１５０４がＹ）、プレロード処理の開始タイミングと決定し、プレローダ部１１１に処理の開始を通知する。
【０１１９】
なお、基準時間は、ＲＯＭ化されているなどして携帯情報端末に固有の値でもよいが、ユーザの入力によって数値を変更することができてもよい。ユーザによる設定時の表示画面の一例を図２０に示す。ここでは、基準時間として１５分が設定されており、待ち受け状態の連続時間が１５分を越えたタイミングで、プレロード処理を開始する。
【０１２０】
第１の判断基準を用いれば、ユーザが携帯情報端末を操作していない間にプレロード処理が実行されるので、プレロード処理がユーザに対して隠匿される。よって、プレロード処理の実行によってユーザに何らのストレスを与えることがないという利点がある。
【０１２１】
第２の判断基準は、携帯情報端末が待ち受け状態から脱した時に、プレロード処理を行う。この場合、プレロード制御部１１２は、携帯情報端末が待ち受け状態から、ユーザの入力操作が加わるなどして非待ち受け状態に入ったこと、すなわち待ち受け状態が終了したことを検出することにより、開始タイミングを決定する。
【０１２２】
第３の判断基準は、携帯情報端末の中の内部時刻が一定のものになった場合、プレロード処理を行う。この場合、プレロード制御部１１２は、前もって設定した時刻データ（基準時刻）を保持しており、実際の現在時刻と基準時刻とを比較し、一致したことを検出することにより、開始タイミングを決定する。
【０１２３】
なお、基準時刻は、ＲＯＭ化されているなどして携帯情報端末に固有の値でもよいが、ユーザの入力によって数値を変更することができてもよい。ユーザによる設定時の表示画面の一例を図２１に示す。ここでは、基準時刻として１３時１５分が設定されており、実際の現在時刻が１３時１５分になったタイミングで、プレロード処理を開始する。
【０１２４】
第４の判断基準は、携帯情報端末の電源が入った時に、プレロード処理を行う。この場合、プレロード制御部１１２は、電源が入力されたことにより、開始タイミングを決定する。携帯情報端末の電源入力の検出の仕組み自体は、従来の携帯情報端末で用いられているデバイスからのイベント通知等の仕組みを用いて実現することが可能である。
【０１２５】
第５の判断基準は、携帯情報端末が折りたたみ式の形状の端末（例えば折りたたみ式の携帯電話）であって、ユーザによる携帯情報端末の折りたたみの開閉があった時にプレロード処理を行う。この場合、プレロード制御部１１２は、携帯情報端末が閉じた状態から開いた状態へ移行した、あるいは、携帯情報端末が開いた状態から閉じた状態へ移行したことを検出することにより、開始タイミングを決定する。携帯情報端末の折りたたみの開閉の検出の仕組み自体は、従来の携帯情報端末で用いられているデバイスからのイベント通知等の仕組みを用いて実現することが可能である。
【０１２６】
第６の判断基準は、携帯情報端末と別の電子機器との間で、通信が発生した時にプレロード処理を行う。この場合、プレロード制御部１１２は、携帯情報端末と別の電子機器との間にデータ通信が発生したことを検出することにより、開始タイミングを決定する。通信が発生したことを検出する仕組み自体は、従来の携帯電話で用いられているデバイスからのイベント通知等の仕組みを用いて実現することが可能である。
【０１２７】
ここでの通信とは、具体的には、音声通話の着呼、ＨＴＴＰを用いたデータ通信、ＦＴＰを用いたデータ通信、ＳＳＬを用いたデータ通信、ＩｒＤＡを用いたデータ通信、などが考えられる。もちろん携帯情報端末がサポートするその他の種類の通信であっても良い。また、通信の発生に基づいて開始されるプレロード処理対象のプログラムは、発生した通信の種類に関連付けられたものが選択されても良い。このプログラムの選択に関しては後述する（図２３）。
【０１２８】
第７の判断基準は、携帯情報端末と別の電子機器との着脱があった場合にプレロード処理を行う。この場合、プレロード制御部１１２は、携帯情報端末に別の電子機器が付加（装着）された、あるいは、携帯情報端末に付加（装着）されていた別の電子機器が外されたことを検出することにより、開始タイミングを決定する。外部デバイスの着脱が発生したことを検出する仕組み自体は、従来の携帯情報端末で用いられている外部デバイスからのイベント通知等の仕組みを用いて実現することが可能である。
【０１２９】
ここでの外部デバイスとは、具体的には、ＳＤカード等外部記憶デバイス、Ｂｌｕｅｔｏｏｔｈ（登録商標）等の機能拡張ユニット、ＵＳＢコネクタ、イヤホン、マイク、電源コネクタ、充電器、キーボードなどが考えられる。もちろん携帯情報端末がサポートするその他の種類の外部デバイスであっても良い。また、外部デバイスの着脱に基づいて開始されるプレロード処理対象のプログラムは、外部デバイスの種類に関連付けられたものが選択されても良い。このプログラムの選択に関しては後述する（図２３）。
【０１３０】
第８の判断基準は、携帯情報端末に実装されている別のアプリケーションの実行開始あるいは実行終了した場合にプレロード処理を行う。この場合、プレロード制御部１１２は、携帯情報端末に実装されている別のアプリケーションの実行が開始された、あるいは、別のアプリケーションの実行が終了したことを検出することにより、開始タイミングを決定する。別のアプリケーションの実行が開始あるいは終了したことを検出する仕組み自体は、従来の携帯情報端末で用いられているソフトウェア間通信の仕組みを用いて実現することが可能である。
【０１３１】
ここでの別のアプリケーションとは、具体的には、ブラウザ、メーラ、スケジュール帳、メディアプレイヤーなど、携帯情報端末に搭載されるアプリケーションであれば何でも良い。また、この別のアプリケーションは機械語（ネイティブ）で記述されていても良いし、Ｊａｖａ（登録商標）など他の実行系を用いた仕組みによって記述されていても良い。また、別のアプリケーションの開始あるいは終了に伴ってプレロード処理されるプログラムは、実行が開始されたアプリケーションから連携起動される可能性があるなど、この別のアプリケーションの種類に関連付けられたものが選択されても良い。このプログラムの選択に関しては後述する（図２３）。
【０１３２】
第９の判断基準は、携帯情報端末のユーザの入力操作に伴って、一定の画面遷移が行われた時にプレロード処理を行う。この場合、プレロード制御部１１２は、ユーザに入力操作に基づいて、携帯情報端末の内部状態の遷移が発生したことを検出することにより、開始タイミングを決定する。なお、内部状態ごとに、ユーザの入力操作可能な指示の組み合わせが設定されており、特定の入力操作が行われた際の次の処理動作が決定する。つまり、内部状態は、ユーザの入力操作や外部との通信状況などによって順次遷移していくものであり、内部状態の遷移に伴って表示画面が変化するものが多い。プレロード制御部１１２は、内部状態の遷移の中で、前もって設定されているある特定の遷移が行われた場合にそれを検出するものとする。内部状態の遷移の検出自体は、従来の携帯情報端末で用いられているソフトウェア間通信の仕組みを用いて実現することが可能である。
【０１３３】
図２２に内部状態の遷移の一例を示す。この例では「（１）メニュー選択状態」「（２）アプリ選択状態」「（３）Ｊａｖａアプリ選択状態」という３つの内部状態を示している。プレロード制御部１１２は、特定の内部状態遷移（図２２（２）から（３）への遷移）が発生すると、これを検出し、プレローダ部１１１に処理の開始を通知する。プレローダ部１１１は、この通知を受けて、プログラムのプレロード処理を開始する。また、内部状態遷移に伴ってプレロード処理されるプログラムは、内部状態の遷移の種類に関連付けられたものが選択されても良い。このプログラムの選択に関しては後述する（図２３）。
【０１３４】
以上により、各判断基準に基づいてプレロード処理の開始タイミングを決定することが可能となり、ダウンロード時のみだけでなく、効率的なプレロード処理を実施することができる。
【０１３５】
次に、処理の対象となるプログラムをどのように選択するのかについて説明する。
【０１３６】
大きくは２つの選択基準があり、（Ａ）プレローダ部１１１がプログラムを選択する場合と、（Ｂ）プレロード制御部１１２から処理対象のプログラムが通知される場合とに分けられる。（Ａ）の場合、例えば以下の各選択基準を適用することが考えられる。
【０１３７】
第１の選択基準は、携帯情報端末にダウンロードされているプログラムの中から適当に（ランダムに）選択する。この場合、プレローダ部１１１は、プログラム記憶部３０１に記録されているプログラムの中から適当に選択してプレロード処理を行えば良い。
【０１３８】
第２の選択基準は、設定情報記憶部３０４に格納された設定情報に基づいて、携帯情報端末にダウンロードされているプログラムの中から、高速起動指定のプログラムとして設定されているプログラムを選択し、プレロード処理を行う。それ以外のプログラムに関しては、プレロード処理の対象としない。なお、設定情報記憶部３０４については、既に実施の形態２で説明した。
【０１３９】
第３の選択基準は、インタプリット履歴記憶部３０５に格納された履歴情報に基づいて、使用頻度が高いと判断されるプログラムを選択し、プレロード処理を行う。例えば、最も多い回数起動されたことのあるプログラムを選択する、あるいは、一番最近に起動されたプログラムを選択するなどである。なお、インタプリット履歴記憶部３０５については、既に実施の形態２で説明した。
【０１４０】
（Ｂ）の場合、プレロード処理が開始される条件に伴って、プレロード制御部１１２が、処理対象プログラムを選択する。この場合、プレロード制御部１１２は、プレロード処理の開始条件と処理対象のプログラムの対応表である、プレロード処理対応テーブルを保持し、この対応テーブルに基づいて、処理対象のプログラムを選択決定する。
【０１４１】
図２３に、プレロード処理対応テーブルの一例を示す。ここでは、プレロード処理を開始する条件に、条件番号という一意のＩＤ番号を割当て、各条件を識別している。また、図２３では、開始条件を文章で記述しているが、条件番号との意味の対応付けが、番号の重複無くなされていればよい。さらに、プレロード処理対象のプログラムの識別子を文字列で表現しているが、他の表現であってもよい。各プレロード処理開始条件と関連性の高い、すなわち次に実行される可能性の高いと思われるプログラムを、予めプレロード処理対応テーブルに記録しておくことで、プレロード処理による起動の高速化の効果を得やすくなる。例えば、本発明をＥメール送受信機能付きの携帯電話に適用した場合には、携帯電話がＥメールを受信したときに、ユーザがＥメールの受信に気付いてＥメールを閲覧しようとすることが想定されるため、携帯電話がＥメールを受信したときにメーラのプログラムをプレロードするように設定しておくことが有効である。これにより、ユーザがメーラを起動させるときの起動時間が短縮される。
【０１４２】
以上により、プレロード処理の開始タイミングや対象プログラムを選択することが可能となり、高速起動が必要なプログラムや使用頻度が高いプログラムを選択して、効率的なプレロード処理を実施することができる。
【０１４３】
（実施の形態４）
図２４は、本発明の実施の形態４におけるプログラム実行処理端末装置の構成を示すブロック図である。プログラムダウンロード部１０１と、ローダ部１０２と、ランタイムセービング部１１０と、ポストローダ部１０５と、インタプリタ部１０６と、制御部１０７と、プレローダ部１１３と、別アプリ指示通知部１１４と、プログラム記憶部３０１と、テンポラリランタイム実行形式記憶部３０２と、ランタイム実行形式記憶部３０３と、設定情報記憶部３０４と、インタプリット履歴記憶部３０５とから構成されている。プログラムダウンロード部１０１と、ローダ部１０２と、ランタイムセービング部１１０と、ポストローダ部１０５と、インタプリタ部１０６と、制御部１０７と、プログラム記憶部３０１と、テンポラリランタイム実行形式記憶部３０２と、ランタイム実行形式記憶部３０３と、設定情報記憶部３０４と、インタプリット履歴記憶部３０５は、図１５で説明したものと同じである。ここでは、新規に追加したプレローダ部１１３と別アプリ指示通知部１１４について説明する。
【０１４４】
プレローダ部１１３は、別アプリ指示通知部１１４から通知を受信することにより、プログラム記憶部３０１に記録されたプログラムを、テンポラリランタイム実行形式に変換し、テンポラリランタイム実行形式記憶部３０２に格納するプレロード処理を行う。特に、特定プログラムを指定する識別子が通知された場合、プレロード処理対象として、通知されたプログラムを選択する。なお、制御部１０７からプレロード開始の指示を受信することにより、プログラムをダウンロードした際に、続けてプレロード処理を実施することも可能である。
【０１４５】
別アプリ指示通知部１１４は、携帯情報端末に実装されている別アプリケーションからのプレロード開始の指示があったことをプレローダ部１１３に通知する。
【０１４６】
図２５に、別のアプリケーションからプレロード開始が指示される場合の処理概要の一例を図示する。
【０１４７】
別のアプリケーションからプレロード開始の指示を受け取る仕組み自体は、例えば別のアプリケーションのソースコード中から呼び出しが可能なＡＰＩを、携帯情報端末中に備えることで実現することができる。このＡＰＩが呼び出されることにより、別アプリ指示通知部１１４が処理を行い、プレローダ部１１３にプレロード処理の開始を指示する。図２５では、ｐｒｅｌｏａｄｉｎｇ＿ｓｔａｒｔと示されているＡＰＩが、別のアプリケーションから呼び出され、プレローダ部１１３にプレロード処理の開始を通知する働きを行う例を示した。
【０１４８】
また、プレロード処理されるプログラムは、ＡＰＩが呼び出しの際に一緒に指定することもできる。図２５では、ＡＰＩの引数としてプログラムを指定する例を示した。引数ｐｒｏｇｒａｍ＿ｉｄは、プログラム記憶部３０１に格納されたプログラムの識別子を表現しており、ｐｒｅｌｏａｄｉｎｇ＿ｓｔａｒｔの処理でプレローダ部１１３に対して行われる通知は、ｐｒｏｇｒａｍ＿ｉｄの情報も含むものとする。プレローダ部１１３はこのｐｒｏｇｒａｍ＿ｉｄの情報を受け取り、プレロード処理されるプログラムを選択する。なお、プログラムを指定せずに、プレローダ部１１３が、次にプレロードする対象のプログラムを選択実行することも可能である。
【０１４９】
以上により、プレロード処理の発生のトリガを機器状態に基づいて決定するのでなく、実行中のアプリケーションの中で自由に指定することが可能となる。つまり、特定のプログラムのプレロード処理を呼び出すようなアプリケーションを作成することにより、そのアプリケーションを実行する携帯情報端末に、次に実行予定などの特定のプログラムに対するプレロード処理を行わせることにより、特定のプログラムの起動時間を短縮することができる。
【産業上の利用可能性】
【０１５０】
本発明によれば、プログラム配信サービスを利用して携帯情報端末にダウンロードした例えばＪａｖａ（登録商標）等によるプログラムを起動する場合に、プレロード処理やランタイムセービング処理を行うことにより、プログラムの起動時間の長さを短縮することができる。
【図面の簡単な説明】
【０１５１】
【図１】本発明の実施の形態における携帯情報端末のハードウェア構成図
【図２】本発明の実施の形態におけるプログラム実行処理端末装置の構成を示すブロック図
【図３】本発明の実施の形態におけるクラスロード処理におけるデータ変換の関係図
【図４】本発明の実施の形態におけるプログラムの構造の一例を示す図
【図５】本発明の実施の形態におけるランタイム実行形式の構造の一例を示す図
【図６】本発明の実施の形態におけるランタイム実行形式の構造の一例を示す図
【図７】本発明の実施の形態におけるテンポラリランタイム実行形式の構造の一例を示す図
【図８】本発明の実施の形態におけるテンポラリランタイム実行形式の構造の一例を示す図
【図９】本発明の実施の形態におけるローダ部の動作手順の一例を示すフローチャート
【図１０】本発明の実施の形態におけるランタイムセービング部の動作手順の一例を示すフローチャート
【図１１】本発明の実施の形態におけるプレローダ部の動作手順の一例を示すフローチャート
【図１２】本発明の実施の形態におけるポストローダ部の動作手順の一例を示すフローチャート
【図１３】本発明の実施の形態におけるランタイムセービング処理時の画面表示の一例を示す図
【図１４】本発明の実施の形態におけるプレロード処理時の画面表示の一例を示す図
【図１５】本発明の実施の形態におけるプログラム実行処理端末装置の構成を示すブロック図
【図１６】本発明の実施の形態における設定情報の入力画面の一例を示す図
【図１７】本発明の実施の形態におけるインタプリット履歴情報の一例を示す図
【図１８】本発明の実施の形態におけるプログラム実行処理端末装置の構成を示すブロック図
【図１９】本発明の実施の形態におけるプレロード制御部の動作手順の一例を示すフローチャート
【図２０】本発明の実施の形態における基準時間の入力画面の一例を示す図
【図２１】本発明の実施の形態における基準時刻の入力画面の一例を示す図
【図２２】本発明の実施の形態における内部状態遷移の一例を示す図
【図２３】本発明の実施の形態におけるプレロード処理対応テーブルの一例を示す図
【図２４】本発明の実施の形態におけるプログラム実行処理端末装置の構成を示すブロック図
【図２５】本発明の実施の形態における別アプリ指示通知部の処理概要の一例を示す図
【符号の説明】
【０１５２】
１ ＣＰＵ
２ 記憶装置
３ 入力装置
４ 出力装置
５ 送受信装置
６ システムバス
１０１ プログラムダウンロード部
１０２ ローダ部
１０３，１１０ ランタイムセービング部
１０４，１１１，１１３ プレローダ部
１０５ ポストローダ部
１０６ インタプリタ部
１０７ 制御部
１１２ プレロード制御部
１１４ 別アプリ指示通知部
２０１ プログラム
２０２ テンポラリランタイム実行形式
２０３ ランタイム実行形式
３０１ プログラム記憶部
３０２ テンポラリランタイム実行形式記憶部
３０３ ランタイム実行形式記憶部
３０４ 設定情報記憶部
３０５ インタプリット履歴記憶部
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正の内容】
【図１】
2003107186.tif 000028
【図２】
2003107186.tif 000029
【図３】
2003107186.tif 000030
【図４】
2003107186.tif 000031
【図５】
2003107186.tif 000032
【図６】
2003107186.tif 000033
【図７】
2003107186.tif 000034
【図８】
2003107186.tif 000035
【図９】
2003107186.tif 000036
【図１０】
2003107186.tif 000037
【図１１】
2003107186.tif 000038
【図１２】
2003107186.tif 000039
【図１３】
2003107186.tif 000040
【図１４】
2003107186.tif 000041
【図１５】
2003107186.tif 000042
【図１６】
2003107186.tif 000043
【図１７】
2003107186.tif 000044
【図１８】
2003107186.tif 000045
【図１９】
2003107186.tif 000046
【図２０】
2003107186.tif 000047
【図２１】
2003107186.tif 000048
【図２２】
2003107186.tif 000049
【図２３】
2003107186.tif 000050
【図２４】
2003107186.tif 000051
【図２５】
2003107186.tif 000052
【国際調査報告】
2003107186.tif 000053
2003107186.tif 000054
2003107186.tif 000055
2003107186.tif 000056