JP2003256209A - プログラム実行装置 - Google Patents

プログラム実行装置

Info

Publication number
JP2003256209A
JP2003256209A JP2002061046A JP2002061046A JP2003256209A JP 2003256209 A JP2003256209 A JP 2003256209A JP 2002061046 A JP2002061046 A JP 2002061046A JP 2002061046 A JP2002061046 A JP 2002061046A JP 2003256209 A JP2003256209 A JP 2003256209A
Authority
JP
Japan
Prior art keywords
character string
hash table
string data
class
instruction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2002061046A
Other languages
English (en)
Inventor
Keiji Hayashibara
啓二 林原
Hiroki Nakamura
裕樹 中村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP2002061046A priority Critical patent/JP2003256209A/ja
Publication of JP2003256209A publication Critical patent/JP2003256209A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 オブジェクト指向プログラムの実行解釈を行
うプログラム実行装置であって、クラスロード時に文字
列データをRAM内のハッシュテーブルに登録するため
の処理負荷によるプログラム実行性能の低下を防止する
プログラム実行装置を提供する。 【解決手段】 システムクラスに関連する文字列データ
については予め登録したハッシュテーブルをROM11
0に記録しておく。アプリケーションプログラムの実行
にあたって、プログラム実行装置100は、アプリケー
ションプログラムを構成するユーザクラスのみに関連す
る文字列データについてはそのユーザクラスのロード時
にRAM120内のハッシュテーブルに登録するが、ア
プリケーションプログラムの実行時にユーザクラスから
継承される等により利用されるシステムクラスのロード
時にはシステムクラスに関連する文字列データをハッシ
ュテーブルに登録しない。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、プロセッサと、プ
ログラムを解釈しそのプログラムで特定される処理をプ
ロセッサに実行させるための制御を行うソフトウェアと
を含むプログラム実行装置に関する。
【0002】
【従来の技術】従来、コンピュータや通信端末間のアー
キテクチャの相違を吸収し、一般にオブジェクト指向の
プログラムを、解釈実行する仮想マシンなる技術が広く
利用されている。例えば、オブジェクト指向言語である
Java言語等を用いて開発されたアプリケーションプ
ログラムを実行する仮想マシンを備える携帯電話機が普
及しており、その携帯電話機は、ゲームその他の各種ア
プリケーションプログラムを、例えばインターネット等
からダウンロードして内部のフラッシュメモリ等に格納
し、そのアプリケーションプログラムを仮想マシンを介
して実行することができる。なお、Javaは、サン・
マイクロシステムズ社の登録商標である。
【0003】かかる各種アプリケーションプログラム
は、オブジェクト指向におけるクラスの構成要素を示す
情報からなるクラスファイルの集まりであり、仮想マシ
ンは、クラスファイルを解釈して、クラスのメンバ関数
を構成する命令列を、即ちメソッドを構成するバイトコ
ードを、プロセッサに実行させるための制御を行う。な
お、仮想マシンの仕様については、書籍「Java仮想
マシン仕様 第2版」(株式会社ピアソン・エデュケー
ション発行、ISBN4−89471−356−X)に
詳しく説明されている。
【0004】以下、携帯電話機等の各種機器に実装され
仮想マシンを含む従来のプログラム実行装置の一例につ
いて説明する。図14は、従来のプログラム実行装置9
00の構成図である。携帯電話機等に搭載される従来の
プログラム実行装置900は、リードオンリーメモリ
(ROM)910、ランダムアクセスメモリ(RAM)
920、フラッシュメモリ930、CPU940及びバ
ス950を備える。
【0005】ここで、ROM910にはソフトウェアで
ある仮想マシン911と、Javaのシステムクラスラ
イブラリ912即ちシステムクラスのクラスファイル群
とが予め記録されており、フラッシュメモリ930には
ダウンロードされたアプリケーションプログラム群93
1即ちユーザクラスのクラスファイル群とが格納されて
いる。
【0006】また、RAM920には、仮想マシンが起
動された後、仮想マシンの初期処理を行う過程やアプリ
ケーションプログラムを解釈実行する過程において、各
種の管理情報等を生成して保持するための実行時データ
領域921が含まれる。CPU940上で仮想マシンが
動作しオブジェクト指向プログラムの解釈実行の制御が
始まると、仮想マシンは各クラスファイルを必要に応じ
て参照して、RAM上の実行時データ領域921にクラ
ス管理用のテーブル等を生成し、またオブジェクトの生
成にあたって必要であれば、クラスファイルを参照して
例えばクラスファイルのコンスタントプール領域の内容
をRAM上に実現する等の、記号を解決してクラスを活
用可能状態におくための、いわゆるクラスロード処理を
する。
【0007】なお、クラスファイルにはバイトコード列
からなるメソッド領域や、バイトコードのオペランドと
される文字列データを含むコンスタントプール領域が含
まれている。ところで、仮想マシンがクラスロード処理
のうち文字列データをRAM上に実現する処理を具体的
に実現する方式としては、文字列データが重複してRA
M上に存在しないように基本的に一意なものとして管理
しつつ、管理している全文字列データの中から必要なも
のを迅速に検索できるようにする等のために、クラスフ
ァイル内のコンスタントプール領域内の文字列データを
ハッシュテーブルに登録して管理する方式が考えられ
る。
【0008】この方式においては、仮想マシンは、RA
M上にハッシュテーブル922を設け、プログラムの解
釈実行過程におけるオブジェクト生成の必要等に基づく
クラスロード時に、クラスロード対象に係るクラスファ
イル中のコンスタントプール領域内の文字列データであ
って既にハッシュテーブル922に登録されていない文
字列データがあれば、ハッシュテーブル922に登録す
ると考えられ、アプリケーションプログラムの実行過程
においては、実行に必要とされるユーザクラスのクラス
ファイル内全文字列データと、そのクラスから継承され
るシステムクラスのクラスファイル内全文字列データと
が、随時、ハッシュテーブル922に登録されることに
なる。
【0009】
【発明が解決しようとする課題】一般にハッシュテーブ
ルにクラスファイル内のある文字列データを登録するた
めには、RAM上にその文字列データを格納する領域を
確保してクラスファイル内のその文字列データをその領
域にコピーし、文字列データにキーを割り当てて、キー
から特定のハッシュ関数等に基づいてハッシュ値を定
め、そのハッシュ値を検索用のインデックスとして用い
ることができるように編成されるハッシュテーブルに、
その文字列データを登録する必要がある。
【0010】本発明は、このようなクラスロード時にお
ける文字列データのハッシュテーブルへの登録による処
理負荷の一部軽減を図り、オブジェクト指向プログラム
の実行過程における実行性能の低下を防止するプログラ
ム実行装置を提供することを目的とする。
【0011】
【課題を解決するための手段】上記課題を解決するため
に本発明に係るプログラム実行装置は、オブジェクト指
向のプログラムを解釈実行するプログラム実行装置であ
って、特定のクラス群に関連する文字列データを重複な
く含む第1ハッシュテーブル(その含んでいる各文字列
データを各々異なるキー値と対応付け、当該各文字列デ
ータを、複数のインデックス値のうち何れかで、かつ該
当のキー値に基づき算出可能なインデックス値と、対応
付けてなる第1ハッシュテーブル)を予め格納している
不揮発性メモリと、各クラス内の命令の解釈実行にあた
って文字列データの参照が必要となるところの命令と、
第1ハッシュテーブルにおいて当該文字列データに対応
付けられているキー値とを、当該命令の解釈実行に先行
して対応付ける文字列参照解決手段と、文字列データの
参照を必要とする命令の解釈実行に際して、当該命令に
対応付けられたキー値からインデックス値を算出し、少
なくともインデックス値を用いて、第1ハッシュテーブ
ルから当該キー値に対応する文字列データを検索する文
字列検索手段とを備えることを特徴とする。
【0012】仮想マシンを含むプログラム実行装置にお
いて、クラス名等の文字列を一意なものとし一元管理す
る等のため、クラスのロード時にそのクラスに関連する
文字列データをハッシュテーブルに登録する方式を採用
することを前提とすると、本発明に係るプログラム実行
装置は、上記構成により、例えばシステムクラスの全部
又は一部等の特定のクラス群に関連する文字列データが
登録されたハッシュテーブルを予め不揮発性を有するメ
モリに記録しているため、オブジェクト指向プログラム
の実行中、特定のクラス群に含まれるクラスのロード時
に、そのクラスに関連する文字列データをハッシュテー
ブルに新たに登録する必要がなく、登録に係るメモリ確
保等の処理を省略できるため、プログラムの実行が迅速
に行えるようになる。
【0013】
【発明の実施の形態】<実施の形態1>以下、本発明の
実施の形態1に係るプログラム実行装置100について
図1〜図7を用いて説明する。 <構成>図1は、実施の形態1に係るプログラム実行装
置100の構成図である。
【0014】携帯電話機等に搭載されることが想定され
るプログラム実行装置100は、同図に示すように、リ
ードオンリーメモリ(ROM)110、ランダムアクセ
スメモリ(RAM)120、フラッシュメモリ130、
CPU140及びバス150を備える。なお、同図には
本発明の特徴となる部分のみを示している。ここで、R
OM110は、仮想マシン111、Javaのシステム
クラスライブラリ112即ちシステムクラスのクラスフ
ァイル群、システムクラス用ハッシュテーブル113等
を予め記憶しているメモリである。なお、システムクラ
スは、例えば、「java.lang.Object」
クラス等、「java.*」のクラス名で識別され、ア
プリケーションプログラムの実行環境を構成するクラス
である。以下、このシステムクラス以外のクラスをユー
ザクラスという。
【0015】図示していないがROM110中には、ユ
ーザの指示等に応じてアプリケーションプログラムのダ
ウンロードや起動の制御等を行うオペレーティングシス
テムも含まれている。なお、オペレーティングシステム
においては、ROM、RAM及びフラッシュメモリ内の
各物理的メモリ空間を、それぞれ論理アドレス空間上の
別個の領域と対応付けて管理しており、このオペレーテ
ィングシステム上で動作する仮想マシン111は、RO
M、RAM及びフラッシュメモリを識別してアクセスす
る。
【0016】フラッシュメモリ130は、書替え可能な
不揮発性メモリであり、インターネット等の通信網を介
して特定のサーバからダウンロードされたアプリケーシ
ョンプログラム群131即ちユーザクラスのクラスファ
イル群が格納されている。また、RAM120は、ダイ
ナミックメモリ(DRAM)等の書替え可能な作業用メ
モリであり、仮想マシンが起動された後、仮想マシンの
初期処理を行う過程やアプリケーションプログラムを解
釈実行する過程において、各種の管理情報等を生成して
保持するための実行時データ領域121が含まれる。な
お、実行時データ領域121はRAM120中で必ずし
も連続したアドレスの領域であるわけではなく仮想マシ
ンの動作時において動的に確保される。同様にRAM1
20中に仮想マシンの動作時においてユーザクラス用ハ
ッシュテーブル122が生成され、随時、文字列データ
が追加登録され即ちユーザクラス用ハッシュテーブル1
22が更新される。
【0017】プログラム実行装置100において、オペ
レーティングシステムの制御下において、CPU140
上で仮想マシン111は動作し、仮想マシンは、ユーザ
の指示等に応じたアプリケーションプログラムを解釈
し、アプリケーションプログラムにおいて示された手続
をCPU140に実行させる。以下、仮想マシンによる
アプリケーションプログラム即ちクラス群の「解釈」及
び「実行制御」を、単にプログラムの「実行」とも表現
する。なお、プログラムの実行は、具体的にはメソッド
の実行である。
【0018】アプリケーションプログラムは、入口とな
るユーザクラスを含むクラス群で構成され、入口となる
クラスの入口となるメソッドから仮想マシンにより実行
が開始される。ユーザクラスの中にはシステムクラスを
継承したり利用するクラスもあるため、アプリケーショ
ンプログラムの実行過程においては、仮想マシンは、ユ
ーザクラスを実現するためのクラスファイルの他にシス
テムクラスを実現するためのクラスファイルを参照し、
クラスロードを行うこともある。但し、システムクラス
に係るクラスファイルのコンスタントプール領域に含ま
れる文字列データは予めROM110内のハッシュテー
ブルに登録済みであるため、クラスロード時の文字列デ
ータのハッシュテーブルへの追加登録はユーザクラスに
係るクラスファイル内のコンスタントプール領域に含ま
れる文字列データについてのみ行われることになる。
【0019】図2は、システムクラス用ハッシュテーブ
ルの構成及び内容例を示す図である。ROM110に予
め記録されているシステムクラス用ハッシュテーブル1
13は、システムクラスに関連する文字列データ、つま
りROM110に予め記録されているシステムクラスに
係る全てのクラスファイルの各コンスタントプール領域
に含まれる各文字列データを各々別個のキー値と対応付
けて、キー値に基づいてハッシュ関数つまり特定の演算
によって定まるハッシュ値であるインデックス番号とも
対応付けて構成されるデータ群である。
【0020】コンスタントプール領域に含まれる文字列
データは、クラス名、メソッド名、定数名、フィールド
名等である。同図に示すように、システムクラス用ハッ
シュテーブル113は、インデックス番号とポインタと
の対応表113aと、そのポインタにより指し示される
個別データ群113b、113c、113d等から構成
され、個別データ113b等は文字列データと、それに
一意に対応付けられたキー値と、文字列データのデータ
サイズと、次の個別データ群を指し示すポインタとから
構成される。
【0021】同図に示した例においては、キー値からイ
ンデックス番号を求めるハッシュ関数は、キー値を被除
数とし定数値40を除数とした除算の剰余を演算結果と
する関数であり、個別データ113bは、クラス名であ
り実際には1文字8ビットの文字コードで表現された文
字列「java.lang.Object」がキー値3
と対応付けられたものであり、キー値3に対応するイン
デックス番号は、3であるため、その個別データ113
bは対応表113a中の3なるインデックス番号と対応
するポインタにより指し示されている。
【0022】なお、インデックス番号が3となるキー値
には3の他に43、83等もあり、これらのキー値と対
応付けられた文字列データを含む各個別データは、対応
表113a中の3なるインデックス番号と対応付けられ
たポインタを先頭として個別データ中のポインタを介し
て辿ることのできるように関連付けられている。キー値
は、各文字列データが一意になるように対応付けたもの
であれば、どのような方法で対応付けてあってもよい。
【0023】図3は、ユーザクラス用ハッシュテーブル
の構成及び内容例を示す図である。同図に示すように、
ユーザクラス用ハッシュテーブルの構成はシステムクラ
ス用ハッシュテーブルの構成と同じであり、文字列デー
タと対応付けられるキー値は「u」を示す特定のコード
と数字データとを合成したものであり、ハッシュ関数
は、キー値における数字部分を被除数とし定数値40を
除数とした除算の剰余を演算結果とする関数である。
【0024】なお、同図のユーザクラス用ハッシュテー
ブル122の内容例は、仮想マシンがアプリケーション
プログラムを実行している途中における状態を示してお
り、具体的には、ユーザクラスに係るクラスファイルの
コンスタントプール領域内の文字列データである「AP
1.I」、「AP1.add(I)I」等がハッシュテ
ーブルに登録された後の状態を示している。
【0025】キー値は、例えば仮想マシンが文字列デー
タをユーザクラス用ハッシュテーブル122に追加登録
する都度「u1」、「u2」、「u3」、・・・という
ように規則的に付す方式等により、文字列データ毎に別
個の値が定められるものである。図4は、実行時データ
領域に生成される情報の内容例を示した図である。な
お、同図には、ROM110中のシステムクラスライブ
ラリ112であるシステムクラスのクラスファイル群に
含まれるメソッド或いはフラッシュメモリ130中のア
プリケーションプログラム群131であるユーザクラス
のクラスファイル群に含まれるメソッドの代表例を付記
してある。
【0026】仮想マシンによりアプリケーションプログ
ラムを実行する際に実行時データ領域には、プログラム
実行管理テーブル121a、クラス情報テーブル121
b及びコンスタントプール121cが生成される。仮想
マシンは、アプリケーションプログラムの実行過程にお
いてオブジェクトの生成等により必要とされるクラスが
まだクラスロードの対象とされていない場合に限り、ク
ラスロードを行い、そのクラスを定義するクラスファイ
ルを探して参照して、そのクラスファイルのコンスタン
トプール領域の内容をコピーしたコンスタントプール1
21cを生成する。但し、コンスタントプール内におい
て、クラスファイル中のコンスタントプール領域に含ま
れていた文字列データは、ハッシュテーブルにおいてそ
の文字列データと対応するキー値に置き換えられる。な
お、コンスタントプール領域には、メソッドの各命令の
オペランドとして用いることのできるデータが、一定の
フォーマットで個別のエントリ番号を付されて格納され
ており、仮想マシンは、文字列データをキー値に代える
他はこれらと基本的に同内容をコンスタントプールとし
てRAM120内に生成する。
【0027】同図では、メソッド121dのバイトコー
ドのうち命令Bのオペランドとしてコンスタントプール
におけるエントリ番号が7番のデータが用いられること
を示しており、コンスタントプール121cにおいてエ
ントリ番号7番のデータはエントリ番号が8番のデータ
を指し示しておりエントリ番号8番のデータの内容は、
ハッシュテーブルに登録されている文字列データに対応
する15なるキー値となっている例を示している。
【0028】また、仮想マシンはクラスロードに際し
て、クラスファイルの内容に基づいてクラス情報テーブ
ル121bを生成し、こうして生成したクラス情報テー
ブルのポインタとハッシュテーブルにおいてクラス名と
対応付けられているキー値とを対応付けたクラス個別情
報をプログラム実行管理テーブル121aに登録する。
ここで、クラス情報テーブルは、クラスファイルの内容
に基づいて生成され、ハッシュテーブルにおけるフィー
ルド名に対応するキー値等を含むフィールドテーブル
や、ハッシュテーブルにおけるメソッド名に対応するキ
ー値やメソッドのメモリアドレス等を含むメソッドテー
ブル等から構成される。
【0029】また、プログラム実行管理テーブル121
aは、アプリケーションプログラムの実行に際して入口
となるクラスに関するクラス個別情報121a2を先頭
として、クラスロードされた各クラスに関するクラス個
別情報をポインタチェーンで関連付けてなる情報であ
り、先頭のクラス個別情報を指し示すポインタ121a
1を含んで構成される。
【0030】<動作>以下、上述した構成を備えるプロ
グラム実行装置100における仮想マシン111の動作
について説明する。ここでは、本発明における特徴的な
動作を中心に説明し、従来の仮想マシンと同じ処理に過
ぎない部分の説明は原則として省略する。
【0031】図5は、仮想マシン111によるプログラ
ム実行制御処理を示すフローチャートである。仮想マシ
ン111は、起動後に作業用のデータの生成や初期化等
の一般的な初期処理を行う(ステップS1)。この初期
処理には、後にアプリケーションプログラムが実行され
る際に基本的に必要となる「java.lang.Ob
ject」クラス等のシステムクラスについてのクラス
ロードも含まれる。但し、システムクラスのクラスロー
ドにおいてシステムクラスに関連する文字列データは予
めROM内のシステムクラス用ハッシュテーブル113
に記録されているので、その文字列データのシステムク
ラス用ハッシュテーブルへの追加登録は行わない。
【0032】続いて、仮想マシン111はオペレーティ
ングシステムを介してアプリケーションプログラムの起
動指示を受けると(ステップS2)、アプリケーション
プログラムの入口となるクラスのロードを行い(ステッ
プS3)、コンストラクタ等のメソッドの実行を内容と
する命令解釈実行処理を行う(ステップS4)。なお、
通常、メソッドの実行が開始されると随時メソッドの呼
出等によって連鎖的に各種メソッドが実行され、他のク
ラスのメソッドの実行が必要となる場合にそのクラスが
クラスロードの対象とされていなかったときにはクラス
ロードを行う。
【0033】その後、アプリケーションプログラムの実
行が終了した場合には(ステップS5)、仮想マシン1
11はステップS2の判断に戻る。図6は、仮想マシン
111によるクラスのロード処理を示すフローチャート
である。このロード処理は、図5のステップS3におい
て行われるもので、またステップS1及びS4の一部に
おいても行われ得る。
【0034】仮想マシン111は、ロード対象のクラス
を実現するクラスファイルをクラス名に基づき探して、
そのクラスファイルを参照しクラスファイル内のコンス
タントプール領域の文字列データの1つに着目する(ス
テップS11)。各クラスファイルの所在を示す情報が
予めいずれかのメモリに記録されており、仮想マシン1
11はその情報に基づいてクラスファイルを探索する。
【0035】文字列データに着目した後、仮想マシン1
11はその文字列データはシステムクラス用ハッシュテ
ーブル113に既に登録されているか検索により確認し
(ステップS12)、登録済みであれば(ステップS1
3)、システムクラス用ハッシュテーブル113におい
てその文字列データと対応付けられているキー値を取得
し(ステップS14)、ステップS11で参照したコン
スタントプール領域内に未着目の文字列データがあるか
否かを判定し(ステップS18)、未着目の文字列デー
タがあれば、また1つの文字列データに着目して(ステ
ップS11)、ステップS12以後の処理を行う。
【0036】なお、仮想マシン111は、システムクラ
ス用ハッシュテーブル113の所在を示すアドレス値を
予め保持しており、そのアドレス値に基づいてシステム
クラス用ハッシュテーブル113にアクセスする。ステ
ップS13において、着目している文字列データがシス
テムクラス用ハッシュテーブル113に登録済みでない
と判定した場合には、仮想マシン111は、着目してい
る文字列データがユーザクラス用ハッシュテーブル12
2に既に登録されているか検索により確認し(ステップ
S15)、登録済みであれば(ステップS16)、ユー
ザクラス用ハッシュテーブル122においてその文字列
データと対応付けられているキー値を取得し(ステップ
S14)、未着目の文字列データがあるか否かを判定し
(ステップS18)、未着目の文字列データがあれば、
また1つの文字列データに着目して(ステップS1
1)、ステップS12以後の処理を行う。
【0037】ステップS16において、着目している文
字列データがユーザクラス用ハッシュテーブル122に
登録済みでないと判定した場合には、仮想マシン111
は、その文字列データをユーザクラス用ハッシュテーブ
ル122に新たに追加登録し、キー値を得る(ステップ
S17)。即ち仮想マシン111は、その文字列データ
に対応するキー値を、既にいずれかのハッシュテーブル
において文字列データと対応付けているキー値と重複な
く定め、その文字列データとキー値とを対応付けて構成
される個別データを、そのキー値から定まるインデック
ス番号に対応表122aにおいて対応付けられたポイン
タを始点とするポインタチェーンにより、接続する。
【0038】なお、仮想マシン111は、ユーザクラス
用ハッシュテーブルの所在を示すアドレス値を格納する
領域をRAM120内に初期処理において設け、初期値
をNULLとしておき、ユーザクラス用ハッシュテーブ
ルを生成した時点でその所在を示すアドレス値を設定す
る。従って、ユーザクラス用ハッシュテーブルが未だ生
成されていない時点でユーザクラス用ハッシュテーブル
に文字列データが登録されているか判定する必要が生じ
た場合には、登録済みでないと判定する。未だユーザク
ラス用ハッシュテーブルが生成されていない場合におい
て新たに文字列データを追加登録する必要があるときに
は、仮想マシン111は、RAM120内にそのユーザ
クラス用ハッシュテーブルの生成を行い、その所在を示
すアドレス値を保持して以後そのユーザクラス用ハッシ
ュテーブルの利用に際してそのアドレス値を参照する。
【0039】ステップS17の後に、仮想マシン111
は、未着目の文字列データがあるか否かを判定し(ステ
ップS18)、未着目の文字列データがあれば、また1
つの文字列データに着目して(ステップS11)、ステ
ップS12以後の処理を行う。ステップS18におい
て、未着目の文字列データがないと判定した場合には、
仮想マシン111は、それまでにステップS14及びス
テップS17において取得したキー値を、対応する文字
列データの代わりに用いて、クラスファイル内のコンス
タントプール領域の内容に相当するコンスタントプール
をRAM120内に生成する(ステップS19)。
【0040】続いて、仮想マシン111は、ステップS
14又はステップS17において取得したキー値を用い
て、また、メソッドのアドレス解決等を行って、クラス
ファイル内のデータに基づいてクラス情報テーブルをR
AM120内に生成し、そのクラス情報テーブルを指す
ポインタを含むクラス個別情報をプログラム実行管理テ
ーブル121aに登録し(ステップS20)、クラスロ
ード処理を終える。即ち、仮想マシン111は、クラス
名である文字列データに対応して取得したキー値をクラ
ス個別情報中に設定し、メソッド名、フィールド名等で
ある文字列データに対応して取得したキー値をクラス情
報テーブル中にメソッドテーブル、フィールドテーブル
等に設定する。
【0041】このようなロード処理により、システムク
ラスに関連する文字列データは、ROM110内のシス
テムクラス用ハッシュテーブル113に予め登録されて
いるので、プログラム実行装置200の仮想マシン21
1が初期処理としてシステムクラスのクラスロードを行
う場合や、アプリケーションプログラムを実行する場合
においては、システムクラス用ハッシュテーブル113
への文字列データの登録が不要となるため、一般にハッ
シュテーブルへの登録に必要なメモリ確保等が不要とな
り、その分だけ初期処理やアプリケーションプログラム
の迅速な実行が可能となる。
【0042】図7は、仮想マシン111による命令解釈
実行処理を示すフローチャートである。この命令解釈実
行処理は、図5のステップS4において行われるもので
ある。仮想マシン111は、メソッド中の各命令を逐次
処理対象とし、その命令で表される処理をCPU140
に実行させるための命令解釈実行処理を行う。
【0043】仮想マシン111は、メソッド中の一命令
に着目し、その命令が文字列データを用いた動作を指定
する特定の命令であるか否かを判定し(ステップS3
1)、文字列データを用いた動作を指定する特定の命令
でない場合には、従来同様にその命令に対応する処理、
例えばその命令で表される動作内容に相当するCPU1
40のネイティブコードを構築してCPU140にその
ネイティブコードを実行させる等の処理を行う(ステッ
プS37)。
【0044】また、ステップS31において特定の命令
であると判定した場合には、仮想マシン111は、命令
のオペランドとなるキー値を、命令の直接的オペランド
でエントリ番号が示されるコンスタントプール内のデー
タから辿ることにより得て(ステップS32)、そのキ
ー値を用いてシステムクラス用ハッシュテーブル113
を検索する(ステップS33)。即ち、仮想マシン11
1は、そのキー値からハッシュ関数によりインデックス
番号を求めてそのインデックス番号を用いてシステムク
ラス用ハッシュテーブル113の対応表から各個別デー
タを辿って検索し、そのキー値と一致するキー値を含む
個別データにおける文字列データを抽出する。しかし、
そのキー値に対応する文字列データがシステムクラス用
ハッシュテーブル113に登録されていない場合には、
検索は失敗に終わる。
【0045】仮想マシン111は、その検索が失敗した
場合には(ステップS34)、その同じキー値を用いて
ユーザクラス用ハッシュテーブル122を検索する(ス
テップS36)。なお、解釈実行対象となっているメソ
ッドを含むクラスのクラスロードはその解釈実行に先行
して必ずなされているため、ステップS36を行った場
合にその検索は必ず成功する。
【0046】ステップS33又はステップS36におけ
る検索が成功した場合に、仮想マシン111は、検索結
果として抽出された文字列データを用いて、従来と同様
に特定の命令に対応した処理を行う(ステップS3
5)。なお、仮想マシン111は、ステップS35にお
いて命令によっては、キー値をも用いてその命令に対応
する処理を行うこととしてもよい。
【0047】特定の命令には、例えば、「invoke
virtual」等の文字列データであるメソッド名を
用いてなされるメソッド呼出のための命令や「getf
ield」等のフィールド名を用いてなされるフィール
ド参照のための命令等がある。以下、仮に、ユーザクラ
スAのメソッドAからユーザクラスBのメソッドBを呼
び出す場合を想定して、その場合の命令に対応する処理
手順の一例を示す。
【0048】ユーザクラスAについては既にクラスロー
ドがなされているとし、ユーザクラスBについては未だ
クラスロードがなされていない状態においては、ユーザ
クラスAに係るクラスファイルのコンスタントプール領
域内に示されていたはずのユーザクラスBのクラス名を
示す文字列データとメソッドBのメソッド名を示す文字
列データとは、既にユーザクラス用ハッシュテーブル1
22に登録され、ユーザクラスAに対応するコンスタン
トプール内にはそのユーザクラスBのクラス名及びメソ
ッドBのメソッド名に対応するキー値が格納されている
ことになる。
【0049】この状態において、ユーザクラスAのメソ
ッドA中、クラス名とメソッド名との文字列データをオ
ペランドとする「invokevirtual」等のメ
ソッド呼出命令を対象として仮想マシン111が命令解
釈実行処理を行ったとすると、コンスタントプール内の
キー値からユーザクラス用ハッシュテーブル122の検
索により(ステップS36)、ユーザクラスBのクラス
名とメソッドBのメソッド名が取得され、このクラス名
を用いてユーザクラスBに係るクラスファイルを探して
参照するクラスロード処理(図6参照)がまず行われ
る。
【0050】ユーザクラスBのクラスロード処理におい
ては、ユーザクラスBに関するクラス情報テーブル等が
生成され、そのポインタ等を含むクラス個別情報がプロ
グラム実行管理テーブル121aに登録されるが、この
際に、ユーザクラス用ハッシュテーブル122に既にユ
ーザクラスBのクラス名である文字列データとメソッド
Bのメソッド名である文字列データとは登録されている
ため、それぞれに対応するキー値が取得され、クラス名
に対応するキー値はクラス個別情報に設定され、メソッ
ド名に対応するキー値はクラス情報テーブル中のメソッ
ドテーブル内にメソッドのメモリアドレス等とともに設
定される。
【0051】続いて、仮想マシン111は、メソッド呼
出命令のオペランドであるメソッドBのメソッド名に対
応するキー値に基づいて、ユーザクラスBについてのク
ラス情報テーブル内のメソッドテーブルからそのキー値
に呼応するメソッド名のキーを検索して、メソッドテー
ブルにおいてそのキーと対応付けられているメソッドア
ドレスに基づいて、そのメソッドBの命令を、次の解釈
実行の対象とする。
【0052】なお、仮想マシン111は、1つのアプリ
ケーションプログラムの実行が終了した後に、そのアプ
リケーションプログラムの実行中にユーザクラス用ハッ
シュテーブルに登録された個別データを削除する。 <実施の形態2>以下、本発明の実施の形態2に係るプ
ログラム実行装置200について図8〜図10を用いて
説明する。
【0053】<構成>図8は、実施の形態2に係るプロ
グラム実行装置200の構成図である。このプログラム
実行装置200は、実施の形態1で示したプログラム実
行装置100を一部変形したものであり、同図に示すよ
うに、ROM210、RAM120、フラッシュメモリ
230、CPU140及びバス150を備える。なお、
図8には本発明の特徴となる部分のみを示しており、ま
た図8では、プログラム実行装置200の構成要素のう
ち実施の形態1で示したプログラム実行装置100と同
一のものには、図1中の符号と同じ符号を付している。
【0054】実施の形態1で示したプログラム実行装置
100(図1参照)は、ROM内に保持しているシステ
ムクラスの全てのクラスファイルのコンスタントプール
領域内の文字列データを登録したシステムクラス用ハッ
シュテーブルを予めROM内に記憶保持していることと
した。これに対し、プログラム実行装置200は、図8
に示すように、システムクラスのうち仮想マシン211
の初期処理において必要なシステムクラス(以下、「シ
ステムクラスA」という。)ものに係るクラスファイル
だけのコンスタントプール領域内の文字列データつまり
システムクラスAに関連する文字列データを登録したシ
ステムクラスA用ハッシュテーブル213をROM21
0内に予め保持しており、その他のシステムクラス(以
下、「システムクラスB」という。)に関連しシステム
クラスA用ハッシュテーブルに登録されていない文字列
データについてはシステムクラスBのクラスロードが必
要となった時点で動的にフラッシュメモリ内のシステム
クラスB用ハッシュテーブルに一度に限り登録するよう
にした点が異なっている。
【0055】ROM210は、オペレーティングシステ
ムの制御下においてCPU140上で動作する仮想マシ
ン211、Javaのシステムクラスライブラリ112
即ち全てのシステムクラスのクラスファイル群、システ
ムクラスA用ハッシュテーブル213等を予め記憶して
いるメモリである。なお、仮想マシン211の初期処理
において予めクラスロードが行われるシステムクラスA
に係るクラスファイルは、例えば、「java/lan
g/Object.class」、「java/lan
g/Class.class」、「java/lang
/String.class」、「java/lang
/Thread.class」、「java/lang
/Throwable.class」、「java/l
ang/Error.class」、「java/la
ng/System.class」等である。
【0056】また、フラッシュメモリ230は、書替え
可能な不揮発性メモリであり、インターネット等の通信
網を介して特定のサーバからダウンロードされたアプリ
ケーションプログラム群131即ちユーザクラスのクラ
スファイル群が格納されており、また、システムクラス
B用ハッシュテーブル232が仮想マシン211により
動的に生成されてその後保持される。なお、アプリケー
ションプログラム群131及びシステムクラスB用ハッ
シュテーブル232は、プログラム実行装置100のユ
ーザ即ち携帯電話機等のユーザが携帯電話機等の電源を
切っても消去されず保持される。
【0057】なお、システムクラスA用ハッシュテーブ
ル213及びシステムクラスB用ハッシュテーブル23
2のデータ構成は、いずれも図2に示したシステムクラ
ス用ハッシュテーブルと同等であるが、その内容となる
キー値については、システムクラスA用ハッシュテーブ
ルにおいては例えば図2に示した内容と同じで、システ
ムクラスB用ハッシュテーブルは「B1」、「B2」、
「B3」、・・・等という値をとるように、キー値を重
複なく定めている。
【0058】<動作>以下、上述した構成を備えるプロ
グラム実行装置200における仮想マシン211の動作
について説明する。仮想マシン211は、実施の形態1
で示した仮想マシン111と同様のプログラム実行制御
処理を行う(図5参照)。但し、ステップS3等におけ
るロード処理(図6参照)と、ステップS4における命
令解釈実行処理(図7参照)の代わりに、図9に示すロ
ード処理と図10に示す命令解釈実行処理を行う。
【0059】図9は、仮想マシン211によるロード処
理を示すフローチャートである。このロード処理は、図
5のステップS3において行われるもので、またステッ
プS1及びS4の一部においても行われ得る。仮想マシ
ン211は、ロード対象のクラスを実現するクラスファ
イルをクラス名に基づき探して、そのクラスファイルを
参照しクラスファイル内のコンスタントプール領域の文
字列データの1つに着目する(ステップS21)。各ク
ラスファイルの所在を示す情報が予めいずれかのメモリ
に記録されており、仮想マシン211はその情報に基づ
いてクラスファイルを探索する。
【0060】文字列データに着目した後、仮想マシン2
11はその文字列データはシステムクラスA用ハッシュ
テーブル213に既に登録されているか検索により確認
し(ステップS52)、登録済みであれば(ステップS
53)、システムクラスA用ハッシュテーブル213に
おいてその文字列データと対応付けられているキー値を
取得し(ステップS54)、ステップS51で参照した
コンスタントプール領域内に未着目の文字列データがあ
るか否かを判定し(ステップS62)、未着目の文字列
データがあれば、また1つの文字列データに着目して
(ステップS51)、ステップS52以後の処理を行
う。
【0061】なお、仮想マシン211は、システムクラ
スA用ハッシュテーブル213の所在を示すアドレス値
を予め保持しており、そのアドレス値に基づいてシステ
ムクラスA用ハッシュテーブル213にアクセスする。
ステップS53において、着目している文字列データが
システムクラスA用ハッシュテーブル213に登録済み
でないと判定した場合には、仮想マシン211は、着目
している文字列データがフラッシュメモリ230内のシ
ステムクラスB用ハッシュテーブル232に既に登録さ
れているか検索により確認し(ステップS55)、登録
済みであれば(ステップS56)、システムクラスB用
ハッシュテーブル232においてその文字列データと対
応付けられているキー値を取得し(ステップS54)、
未着目の文字列データがあるか否かを判定し(ステップ
S62)、未着目の文字列データがあれば、また1つの
文字列データに着目して(ステップS51)、ステップ
S52以後の処理を行う。
【0062】ステップS56において、着目している文
字列データがシステムクラスB用ハッシュテーブル23
2に登録済みでないと判定した場合には、仮想マシン2
11は、現在着目している文字列データが格納されてい
るクラスファイルはシステムクラスに係るものかを判定
する(ステップS57)。なお、システムクラスに係る
ものか否かの判定は、クラスファイルのファイル名の先
頭が「java」であるか否かにより行い、仮想マシン
211は、ファイル名の先頭が「java」であればシ
ステムクラスに係るクラスファイルであると判定する。
【0063】ステップS57においてクラスファイルが
システムクラスのものであると判定した場合には、仮想
マシン211は、着目している文字列データをシステム
クラスB用ハッシュテーブル232に新たに追加登録
し、キー値を得る(ステップS58)。即ち仮想マシン
211は、その文字列データに対応するキー値を、既に
いずれかのハッシュテーブルにおいて文字列データと対
応付けているキー値と重複なく定め、その文字列データ
とキー値とを対応付けて構成される個別データを、その
キー値から定まるインデックス番号に対応表において対
応付けられたポインタを始点とするポインタチェーンに
より、接続する。
【0064】なお、仮想マシン211は、システムクラ
スB用ハッシュテーブルの所在を示すアドレス値を格納
する領域をフラッシュメモリ230内に設けておき、初
期値をNULLとしておき、システムクラスB用ハッシ
ュテーブルを生成した時点でその所在を示すアドレス値
を設定する。従って、システムクラスB用ハッシュテー
ブルが未だ生成されていない時点でシステムクラスB用
ハッシュテーブルに文字列データが登録されているか判
定する必要が生じた場合には、登録済みでないと判定す
る。なお、未だシステムクラスB用ハッシュテーブルが
生成されていない場合において新たに文字列データを追
加登録する必要があるときには、仮想マシン211は、
フラッシュメモリ230内にそのシステムクラスB用ハ
ッシュテーブルの生成を行い、その所在を示すアドレス
値を保持して以後そのシステムクラスB用ハッシュテー
ブルの利用に際してそのアドレス値を参照する。
【0065】ステップS58の後に、仮想マシン211
は、未着目の文字列データがあるか否かを判定し(ステ
ップS62)、未着目の文字列データがあれば、また1
つの文字列データに着目して(ステップS51)、ステ
ップS52以後の処理を行う。ステップS57において
クラスファイルがシステムクラスのものでないと判定し
た場合には、仮想マシン211は、着目している文字列
データがユーザクラス用ハッシュテーブル122に既に
登録されているか検索により確認し(ステップS5
9)、登録済みであれば(ステップS60)、ユーザク
ラス用ハッシュテーブル122においてその文字列デー
タと対応付けられているキー値を取得し(ステップS5
4)、未着目の文字列データがあるか否かを判定し(ス
テップS62)、未着目の文字列データがあれば、また
1つの文字列データに着目して(ステップS51)、ス
テップS52以後の処理を行う。
【0066】ステップS60において、着目している文
字列データがユーザクラス用ハッシュテーブル122に
登録済みでないと判定した場合には、仮想マシン211
は、その文字列データをユーザクラス用ハッシュテーブ
ル122に新たに追加登録し、キー値を得る(ステップ
S61)。即ち仮想マシン211は、その文字列データ
に対応するキー値を、既にいずれかのハッシュテーブル
において文字列データと対応付けているキー値と重複な
く定め、その文字列データとキー値とを対応付けて構成
される個別データを、そのキー値から定まるインデック
ス番号に対応表122aにおいて対応付けられたポイン
タを始点とするポインタチェーンにより、接続する。
【0067】なお、仮想マシン211は、ユーザクラス
用ハッシュテーブルの所在を示すアドレス値を格納する
領域をRAM120内に初期処理において設け、初期値
をNULLとしておき、ユーザクラス用ハッシュテーブ
ルを生成した時点でその所在を示すアドレス値を設定す
る。従って、ユーザクラス用ハッシュテーブルが未だ生
成されていない時点でユーザクラス用ハッシュテーブル
に文字列データが登録されているか判定する必要が生じ
た場合には、登録済みでないと判定する。未だユーザク
ラス用ハッシュテーブルが生成されていない場合におい
て新たに文字列データを追加登録する必要があるときに
は、仮想マシン211は、RAM120内にそのユーザ
クラス用ハッシュテーブルの生成を行い、その所在を示
すアドレス値を保持して以後そのユーザクラス用ハッシ
ュテーブルの利用に際してそのアドレス値を参照する。
【0068】ステップS61の後に、仮想マシン211
は、未着目の文字列データがあるか否かを判定し(ステ
ップS62)、未着目の文字列データがあれば、また1
つの文字列データに着目して(ステップS51)、ステ
ップS52以後の処理を行う。ステップS62におい
て、未着目の文字列データがないと判定した場合には、
仮想マシン211は、それまでにステップS54、ステ
ップS58及びステップS61において取得したキー値
を、対応する文字列データの代わりに用いて、クラスフ
ァイル内のコンスタントプール領域の内容に相当するコ
ンスタントプールをRAM120内に生成する(ステッ
プS63)。
【0069】続いて、仮想マシン211は、ステップS
54、ステップS58又はステップS61において取得
したキー値を用いて、また、メソッドのアドレス解決等
を行って、クラスファイル内のデータに基づいてクラス
情報テーブルを生成し、そのクラス情報テーブルのポイ
ンタを含むクラス個別情報をプログラム実行管理テーブ
ル121aに登録し(ステップS64)、クラスロード
処理を終える。即ち、仮想マシン211は、クラス名で
ある文字列データに対応して取得したキー値をクラス個
別情報中に設定し、メソッド名、フィールド名等である
文字列データに対応して取得したキー値をクラス情報テ
ーブル中にメソッドテーブル、フィールドテーブル等に
設定する。
【0070】このようなロード処理により、ROM内の
システムクラスA用ハッシュテーブルに登録されていな
い文字列データであってシステムクラスに関連する文字
列データは、フラッシュメモリ230内のシステムクラ
スB用ハッシュテーブル232に登録されるので、フラ
ッシュメモリが不揮発性のメモリであることから、プロ
グラム実行装置200が搭載されることが想定される携
帯電話機等の電源を切った場合でもそのシステムクラス
B用ハッシュテーブル232の内容は保持される。従っ
て、その後電源を入れてプログラム実行装置200の仮
想マシン211によりアプリケーションプログラムを実
行する場合においては、不揮発性メモリに文字列データ
を登録済みのシステムクラスB用ハッシュテーブルが予
め記録されている状態であり、既にシステムクラスB用
ハッシュテーブル232に登録済みの文字列データにつ
いては再度の登録が不要となるため、登録に必要なメモ
リ確保等の負荷が軽減され、その分だけアプリケーショ
ンプログラムの迅速な実行が可能となる。
【0071】図10は、仮想マシン211による命令解
釈実行処理を示すフローチャートである。この命令解釈
実行処理は、図5のステップS4において行われるもの
である。仮想マシン211は、メソッド中の各命令を逐
次処理対象とし、その命令で表される処理をCPU14
0に実行させるための命令解釈実行処理を行う。
【0072】仮想マシン211は、メソッド中の一命令
に着目し、その命令が文字列データを用いた動作を指定
する特定の命令であるか否かを判定し(ステップS7
1)、文字列データを用いた動作を指定する特定の命令
でない場合には、従来同様にその命令に対応する処理、
例えばその命令で表される動作内容に相当するCPU1
40のネイティブコードを構築してCPU140にその
ネイティブコードを実行させる等の処理を行う(ステッ
プS79)。
【0073】また、ステップS71において特定の命令
であると判定した場合には、仮想マシン211は、命令
のオペランドとなるキー値を、命令の直接的オペランド
でエントリ番号が示されるコンスタントプール内のデー
タから辿ることにより得て(ステップS72)、そのキ
ー値を用いてシステムクラスA用ハッシュテーブル21
3を検索する(ステップS73)。即ち、仮想マシン2
11は、そのキー値からハッシュ関数によりインデック
ス番号を求めてそのインデックス番号を用いてシステム
クラスA用ハッシュテーブル213の対応表から各個別
データを辿って検索し、そのキー値と一致するキー値を
含む個別データにおける文字列データを抽出する。しか
し、そのキー値に対応する文字列データがシステムクラ
スA用ハッシュテーブル213に登録されていない場合
には、検索は失敗に終わる。
【0074】仮想マシン211は、ステップS73にお
ける検索が失敗した場合には(ステップS74)、その
同じキー値を用いてシステムクラスB用ハッシュテーブ
ル232を検索する(ステップS76)。ステップS7
6における検索が失敗した場合には(ステップS7
7)、仮想マシン211は、その同じキー値を用いてユ
ーザクラス用ハッシュテーブル122を検索する(ステ
ップS78)。なお、解釈実行対象となっているメソッ
ドを含むクラスのクラスロードはその解釈実行に先行し
て必ずなされているため、ステップS78を行った場合
にその検索は必ず成功する。
【0075】ステップS73、ステップS76又はステ
ップS78における検索が成功した場合に、仮想マシン
211は、検索結果として抽出された文字列データを用
いて、従来と同様に特定の命令に対応した処理を行う
(ステップS75)。なお、仮想マシン211は、ステ
ップS75において命令によっては、キー値をも用いて
その命令に対応する処理を行うこととしてもよい。
【0076】なお、仮想マシン211は、1つのアプリ
ケーションプログラムの実行が終了した後に、そのアプ
リケーションプログラムの実行中にユーザクラス用ハッ
シュテーブルに登録された個別データを削除する。 <実施の形態3>以下、本発明の実施の形態3に係るプ
ログラム実行装置300について図11〜図13を用い
て説明する。
【0077】<構成>図11は、実施の形態3に係るプ
ログラム実行装置300の構成図である。このプログラ
ム実行装置300は、実施の形態1で示したプログラム
実行装置100を一部変形したものであり、同図に示す
ように、ROM310、RAM320、フラッシュメモ
リ130、CPU140及びバス150を備える。な
お、図11には本発明の特徴となる部分のみを示してお
り、また図11では、プログラム実行装置300の構成
要素のうち実施の形態1で示したプログラム実行装置1
00と同一のものには、図1中の符号と同じ符号を付し
ている。
【0078】実施の形態1で示したプログラム実行装置
100(図1参照)は、ユーザクラスにのみ関連する文
字列データを登録した1つのユーザクラス用ハッシュテ
ーブルをRAMに設けることとした。これに対し、プロ
グラム実行装置300は、複数のアプリケーションプロ
グラムを仮想マシン311が並行的に実行する場合に特
に有効な方式を採用する。即ち、図11に示すように、
プログラム実行装置300における仮想マシン311
は、アプリケーションプログラム毎に異なるユーザクラ
ス用ハッシュテーブルをRAM内に設けて、各アプリケ
ーションプログラムを実行する。
【0079】ROM210は、オペレーティングシステ
ムの制御下においてCPU140上で動作する仮想マシ
ン311、Javaのシステムクラスライブラリ112
即ち全てのシステムクラスのクラスファイル群、システ
ムクラス用ハッシュテーブル113等を予め記憶してい
るメモリである。また、RAM320は、DRAM等の
書替え可能な作業用メモリであり、仮想マシン311が
起動された後、仮想マシンの初期処理を行う過程やアプ
リケーションプログラムを解釈実行する過程において、
各種の管理情報等を生成して保持するための実行時デー
タ領域321が含まれる。なお、実行時データ領域32
1はRAM320中で必ずしも連続したアドレスの領域
であるわけではなく仮想マシンの動作時において動的に
確保される。同様にRAM320中に仮想マシンの動作
時においてアプリケーションプログラム毎に1つのユー
ザクラス用ハッシュテーブルが生成され、各ユーザクラ
ス用ハッシュテーブルには、随時、文字列データが追加
登録される。
【0080】仮想マシン311によりRAM320内に
生成されるユーザクラス用ハッシュテーブルの構成は、
実施の形態1で示したものと同じであり(図3参照)、
また、動的に実行時データ領域321に生成されるクラ
ス情報テーブルやコンスタントプールの構成は実施の形
態1で示したのと同じであるが(図4参照)、仮想マシ
ン311が生成するプログラム実行管理テーブルは実施
の形態1で示したものと異なり図12に示すようなもの
となる。
【0081】図12は、仮想マシン311が生成するプ
ログラム実行管理テーブルの構成及び内容例を示す図で
ある。同図に示すように仮想マシン311が生成するプ
ログラム実行管理テーブル321aは、実行中の各アプ
リケーションプログラムについて、プログラム名称やそ
のアプリケーションプログラムを構成するクラスに関す
るクラス個別情報へのポインタ等を含むアプリケーショ
ン管理情報と、ユーザクラス用ハッシュテーブルへのポ
インタとを対応付けてなる対応表321a1、及びその
対応表からリンクされているクラス個別情報321a
2、321a3等からなる。なお、クラス個別情報の構
成は実施の形態1で示したものと同じであり、クラス情
報テーブルへのポインタを含む(図4参照)。
【0082】<動作>以下、上述した構成を備えるプロ
グラム実行装置300における仮想マシン311の動作
について実施の形態1で示した仮想マシン111の動作
と異なる点を中心に説明する。図13は、仮想マシン3
11によるプログラム実行制御処理を示すフローチャー
トである。なお、同図においては、仮想マシン111に
よるプログラム実行制御処理と大体同じ処理ステップに
は図5と同じ符号を付しているが、同じ符号を付してい
るもののうちロード処理の内容は若干異なる。また、ス
テップS2a以下S5a迄の処理は、ユーザ等によりア
プリケーションプログラムの起動指示があった数だけ擬
似的に複数並行して行われる。
【0083】仮想マシン311は、起動後に作業用のデ
ータの生成や初期化等の一般的な初期処理を行い(ステ
ップS1)、オペレーティングシステムを介してアプリ
ケーションプログラムの起動指示を受けると(ステップ
S2)、プログラム実行管理テーブル321a中の対応
表321a1に、そのアプリケーションプログラムにつ
いてのアプリケーション管理情報と対応付けてユーザク
ラス用ハッシュテーブルへのポインタを初期値NULL
に設定する(ステップS2a)。
【0084】続いて、仮想マシン311は、アプリケー
ションプログラムの入口となるクラスのロードを行い
(ステップS3a)、コンストラクタ等のメソッドの実
行を内容とする命令解釈実行処理を行う(ステップS
4)。なお、通常、メソッドの実行が開始されると随時
メソッドの呼出等によって連鎖的に各種メソッドが実行
され、他のクラスのメソッドの実行が必要となる場合に
そのクラスがクラスロードの対象とされていなかったと
きにはクラスロードを行う。
【0085】その後、アプリケーションプログラムの実
行が終了した場合には(ステップS5)、仮想マシン3
11は、そのアプリケーションプログラムについてのユ
ーザクラス用ハッシュテーブルを削除し、つまりそのメ
モリ領域を解放して、対応表321a1からそのアプリ
ケーションプログラムに関する情報を削除する(ステッ
プS5a)。
【0086】ステップS3等のロード処理は、基本的に
は実施の形態1で示したように図6のフローチャートに
従った流れで行われる。但し、ステップS15及びステ
ップS17に関して、実行対象であるアプリケーション
プログラムと対応するユーザクラス用ハッシュテーブル
が未だ生成されていない時点でユーザクラス用ハッシュ
テーブルに文字列データが登録されているか判定する必
要が生じた場合には、登録済みでないと判定し、未だユ
ーザクラス用ハッシュテーブルが生成されていない場合
において新たに文字列データを追加登録する必要がある
ときには、仮想マシン311は、RAM320内にその
ユーザクラス用ハッシュテーブルの生成を行い、その所
在を示すアドレス値をプログラム実行管理テーブル32
1aの対応表321a1において実行対象のアプリケー
ションプログラムと対応付けられているユーザクラス用
ハッシュテーブルへのポインタとして設定し、以後その
ユーザクラス用ハッシュテーブルの利用に際してその対
応表321a1内のユーザクラス用ハッシュテーブルへ
のポインタの値を参照する。
【0087】また、ステップS20に関して、クラス情
報テーブルを指すポインタを含むクラス個別情報をプロ
グラム実行管理テーブルに登録する場合に、仮想マシン
311は、対応表321a1中、実行対象のアプリケー
ションプログラムに対応するアプリケーション管理情報
からポインタによりチェーンされるようにクラス個別情
報を登録し、そのクラス情報テーブルを後に参照する場
合においてそのアプリケーション管理情報からポインタ
チェーンを辿ってクラス情報テーブルを参照する。
【0088】なお、各アプリケーションプログラムに対
応する各ユーザクラス用ハッシュテーブルの相互間には
依存関係がなく、それぞれのユーザクラス用ハッシュテ
ーブルの内容は独立しているため、相互間では異なる文
字列データが同一のキー値と対応付けられ得るし、同じ
文字列データが異なるキー値と対応付けられ得る。この
ような仮想マシン311の処理により、アプリケーショ
ンプログラム毎にユーザクラス用ハッシュテーブルが生
成されるので、アプリケーションプログラムの実行を終
えた時に、そのアプリケーションプログラムに関わる文
字列データの削除は、1つのユーザクラス用ハッシュテ
ーブル全体を削除すれば行えるため、その削除処理が容
易となる。なお、このような削除は、不要なメモリ資源
を解放するために行われ、他のアプリケーションプログ
ラムの実行性能低下等の悪影響の発生を極力抑えるため
には迅速に行われるべきである。
【0089】複数のアプリケーションプログラムを並行
に実行する場合において、もし仮に1つのユーザクラス
用ハッシュテーブルのみを用いる、つまり共用すること
としていたならば、登録する文字列データ毎にどのアプ
リケーションプログラムに関するものであるかを管理し
ておいて、その管理に基づいて、1つのアプリケーショ
ンプログラムの実行終了時点で、その共用しているユー
ザクラス用ハッシュテーブルから、そのアプリケーショ
ンプログラムに関わる文字列データのみを特定しつつ削
除する必要があるが、上述の仮想マシン311のように
アプリケーションプログラム毎に別個のユーザクラス用
ハッシュテーブルを設ける方式を用いれば、あるアプリ
ケーションプログラムの実行終了時に迅速に1つのユー
ザクラス用ハッシュテーブルを削除することで迅速に不
要なメモリ資源の解放が行える。 <補足>以上、本発明に係るプログラム実行装置につい
て、実施の形態1〜3に基づいて説明したが、本発明は
これらの実施の形態に限られないことは勿論である。即
ち、 (1)実施の形態1〜3では、プログラム実行装置が携
帯電話機等に用いられることを想定して説明したが、例
えば、パーソナルコンピュータ、家電機器等に用いられ
ることとしてもよい。 (2)実施の形態1〜3で示したハッシュ関数の演算内
容は単なる一例であり、どのような演算であってもよ
い。また、システムクラス用ハッシュテーブルとユーザ
クラス用ハッシュテーブルとの間において、或いはシス
テムクラスA用ハッシュテーブルとシステムクラスB用
ハッシュテーブルとユーザクラス用ハッシュテーブルと
の間において、キー値は重複しないこととしたが、この
代わりに、文字列データに対応付けるキー値は各ハッシ
ュテーブル内で重複しなければ他のハッシュテーブル内
のものと同じであってもよいこととし、コンスタントプ
ール内において文字列データを表すものとして、キー値
とともにどのハッシュテーブルに登録されているかを識
別するためのテーブル識別コードを用いることとしても
よい。この場合には、メソッド中の文字列を用いる命令
のオペランドとして、コンスタントプールを辿ることに
よりキー値とテーブル識別コードとが得られ、命令解釈
実行処理(図7、図10参照)においては、命令のオペ
ランドとなるテーブル識別コードで特定される1つのハ
ッシュテーブルから、キー値に基づいて文字列データを
検索して抽出するとよい。 (3)実施の形態1、2で示した仮想マシンは、ユーザ
等によるアプリケーション起動指示に先立って起動して
いることとしたが、必ずしも先に起動されている必要は
なく、アプリケーション起動指示を契機としてオペレー
ティングシステムによって仮想マシンが起動されること
としてもよく、この場合には、仮想マシンが行うプログ
ラム実行制御処理(図5参照)においてはステップS2
を省き、即ちアプリケーションプログラムの起動指示の
有無の判断を行わず、オペレーティングシステムに指示
されたアプリケーションプログラムを実行することとし
てもよい。 (4)実施の形態1等で示した仮想マシンは、必ずしも
java仮想マシンである必要はない。但し、本発明に
係るプログラム実行装置の一部に相当する仮想マシン
は、オブジェクト指向に基づき形成された任意のアプリ
ケーションプログラムであり実行環境となるシステムク
ラスの継承や利用を行い得るアプリケーションプログラ
ムを実行可能であり、かつ、クラスの活用のためのロー
ド時に、クラスの内容を定義するファイルを参照してそ
のファイル中に示されるところのクラスに関連する文字
列データをキー値と対応付けてハッシュテーブルに登録
しておき、クラスメソッドのオペランドとしてキー値を
介して文字列データが利用できるようにする仮想マシン
であることを前提とする。
【0090】なお、仮想マシンがアプリケーションプロ
グラムの実行に際してRAM上の生成する各種制御情
報、つまりプログラム実行管理テーブル、クラス情報テ
ーブル、コンスタントプール等は、必ずしも図4等で示
したデータ構造である必要はない。但し、メソッド中の
各命令のオペランドとされ得るデータ領域としてRAM
上に生成するコンスタントプール中に、クラスファイル
中の文字列データをそのまま置くのではなく、その文字
列データとハッシュテーブルにおいて対応付けられたキ
ー値を置き、メソッド中の各命令がそのキー値から文字
列データを参照できるようにしている必要がある。 (5)実施の形態2と実施の形態3を組合せて、システ
ムクラスA用ハッシュテーブルをROM内に予め設けて
おき、仮想マシンが動的に、システムクラスB用ハッシ
ュテーブルはフラッシュメモリ内に作成し、アプリケー
ションプログラム毎についてのユーザクラス用ハッシュ
テーブルをRAM内に作成することとしてもよい。
【0091】また、特定のアプリケーションプログラム
についてのユーザクラス用ハッシュテーブルをフラッシ
ュメモリ内に動的に生成することとしてもよく、これに
よれば、電源を一旦切ってから再度入れた場合における
初回の実行時においても、その特定のアプリケーション
プログラムの実行を迅速に行えるようになる。また、R
OMに予めシステムクラス用ハッシュテーブルを設けて
おかずに、システムクラスに関連する文字列データを登
録するシステムクラス用ハッシュテーブルをフラッシュ
メモリに生成することとしてもよく、これによれば初回
のクラスロード時を除けば、クラスロード時にハッシュ
テーブルへの登録処理を行わなくて済むようになるた
め、プログラム実行速度の向上が図れる。 (6)実施の形態2では(図9、ステップS57参
照)、クラスファイルのファイル名の先頭が「jav
a」であるか否かにより、そのクラスファイルがシステ
ムクラスに係るものである否かを判定することとした
が、この他、例えばROMと対応付けられている論理ア
ドレス空間上の領域内にクラスファイルの所在アドレス
或いはクラスのメソッドのアドレスがあるかによって調
べたり、クラス名とそのアドレスとの対応表を構築して
おきこの対応表に基づいて調べたり等、クラスファイル
がROM内に所在するか否かを調べることにより、RO
M内に所在するものであればシステムクラスに係るもの
であると判定することとしてもよい。 (7)実施の形態1では、ROM中にシステムクラスの
クラスファイルと、そのクラスファイルのコンスタント
プール領域の文字列データを登録済みのシステムクラス
用ハッシュテーブルを予め記録していることとしたが、
例えば、システムクラス用ハッシュテーブルに登録して
いる文字列データを、クラスファイル中に持たせておく
代わりに既にハッシュテーブルにおいてその文字列デー
タと対応付けられているキー値に置き換えておき、シス
テムクラスに関するクラスロードの処理においては、ク
ラスファイルのコンスタントプール領域の内容をRAM
に移さず、システムクラスのメソッドの実行において
は、ROM内のクラスファイルのコンスタントプール領
域内のデータを命令のオペランドとして直接参照するこ
ととしてもよい。 (8)実施の形態1〜3に示した仮想マシンによる処理
手順(図5〜図7、図9、図10、図13に示した手順
等)を、プログラム実行機能を備える機器等に実行させ
るためのコンピュータプログラムを、記録媒体に記録し
又は各種通信路等を介して、流通させ頒布することもで
きる。このような記録媒体には、ICカード、光ディス
ク、フレキシブルディスク、ROM等がある。流通、頒
布されたコンピュータプログラムは、特定のハッシュテ
ーブルを記録したROMを備える機器等にインストール
されることにより利用に供され、その機器等はそのコン
ピュータプログラムの実行により実施の形態1〜3で示
したような仮想マシンの機能を実現する。
【0092】
【発明の効果】以上説明したことから明らかなように、
本発明に係るプログラム実行装置は、オブジェクト指向
のプログラムを解釈実行するプログラム実行装置であっ
て、特定のクラス群に関連する文字列データを重複なく
含む第1ハッシュテーブル(その含んでいる各文字列デ
ータを各々異なるキー値と対応付け、当該各文字列デー
タを、複数のインデックス値のうち何れかで、かつ該当
のキー値に基づき算出可能なインデックス値と、対応付
けてなる第1ハッシュテーブル)を予め格納している不
揮発性メモリと、各クラス内の命令の解釈実行にあたっ
て文字列データの参照が必要となるところの命令と、第
1ハッシュテーブルにおいて当該文字列データに対応付
けられているキー値とを、当該命令の解釈実行に先行し
て対応付ける文字列参照解決手段と、文字列データの参
照を必要とする命令の解釈実行に際して、当該命令に対
応付けられたキー値からインデックス値を算出し、少な
くともインデックス値を用いて、第1ハッシュテーブル
から当該キー値に対応する文字列データを検索する文字
列検索手段とを備えることを特徴とする。
【0093】仮想マシンを含むプログラム実行装置にお
いて、クラス名等の文字列を一意なものとし一元管理す
る等のため、クラスのロード時にそのクラスに関連する
文字列データをハッシュテーブルに登録する方式を採用
することを前提とすると、本発明に係るプログラム実行
装置は、上記構成により、例えばシステムクラスの全部
又は一部等の特定のクラス群に関連する文字列データが
登録されたハッシュテーブルを予め不揮発性を有するメ
モリに記録しているため、オブジェクト指向プログラム
の実行中、特定のクラス群に含まれるクラスのロード時
に、そのクラスに関連する文字列データをハッシュテー
ブルに新たに登録する必要がなく、登録に係るメモリ確
保等の処理を省略できるため、プログラムの実行が迅速
に行えるようになる。
【0094】ここで、前記プログラム実行装置は、複数
のアプリケーションプログラムの解釈実行が可能であ
り、前記特定のクラス群は、複数のアプリケーションプ
ログラムにおける複数のクラスから共通に用いられ得る
クラスの全部又は一部からなる集合であり、前記プログ
ラム実行装置は更に、アプリケーションプログラムの実
行に際して用いられるクラスに関連する文字列データの
うち第1ハッシュテーブルに含まれていない文字列デー
タを重複なく含む第2ハッシュテーブルであって、含ん
でいる各文字列データを各々異なるキー値と対応付け、
当該各文字列データを、複数のインデックス値のうち何
れかで、かつ該当のキー値に基づき算出可能なインデッ
クス値と、対応付けてなる第2ハッシュテーブルを、書
替可能なメモリ上に生成する第2ハッシュテーブル生成
手段を備え、前記文字列参照解決手段は更に、各クラス
内の命令の解釈実行にあたって第2ハッシュテーブルに
含まれている文字列データの参照が必要となるところの
命令と、第2ハッシュテーブルにおいて当該文字列デー
タに対応付けられているキー値とを、当該命令の解釈実
行に先行して対応付け、前記文字列検索手段は更に、文
字列データの参照を必要とする命令の解釈実行に際し
て、当該文字列データが第1ハッシュテーブルに含まれ
ていないと判定した場合には、当該命令に対応付けられ
たキー値からインデックス値を算出し、少なくともイン
デックス値を用いて、第2ハッシュテーブルから当該キ
ー値に対応する文字列データを検索することとしてもよ
い。
【0095】これにより、アプリケーションプログラム
の実行においてロードが必要となるシステムクラスに関
し、そのロード時に文字列データをハッシュテーブルに
登録しなくても済むため、アプリケーションプログラム
の実行が迅速に行えるようになる。なお、文字列データ
が第1ハッシュテーブルに含まれているか否かの判定の
ためには、例えば第1ハッシュテーブルと第2ハッシュ
テーブルとではキー値が重複しないようにしておき文字
列データに対応するキー値により第1ハッシュテーブル
を検索してその検索に成功するか否かによって判定する
こととしてもよいし、例えば第1ハッシュテーブルにお
けるキー値と第2ハッシュテーブルにおけるキー値がそ
の属するハッシュテーブルを識別可能なように定められ
ているならば、そのキー値に基づいて第1ハッシュテー
ブルに属するか否かで判定することとしてもよい。
【0096】また、前記第1ハッシュテーブルを格納し
ている不揮発性メモリはリードオンリーメモリ(RO
M)であり、前記プログラム実行装置は更に、全てのア
プリケーションプログラムの解釈実行よりも前に、前記
特定のクラス群に含まれている所定命令であって第1ハ
ッシュテーブルに含まれている文字列データを参照する
所定命令を実行する初期化手段を備えることとしてもよ
い。
【0097】これにより、初期処理の迅速化が図れるよ
うになる。また、前記特定のクラス群は、複数のアプリ
ケーションプログラムにおける複数のクラスから共通に
用いられ得るクラスの一部からなる集合であり、前記第
2ハッシュテーブル生成手段が生成する第2ハッシュテ
ーブルは、複数のアプリケーションプログラムにおける
複数のクラスから共通に用いられ得るクラスに関連する
文字列データのうち第1ハッシュテーブルに含まれてい
ない文字列データを重複なく含むハッシュテーブルであ
り、前記第2ハッシュテーブル生成手段は、既に生成さ
れていない場合に限って第2ハッシュテーブルを書替可
能な不揮発メモリ上に生成し、アプリケーションプログ
ラムの実行に際して随時必要に応じて複数のアプリケー
ションプログラムにおける複数のクラスから共通に用い
られ得るクラスに関連する文字列データを、第2ハッシ
ュテーブルに、既に含まれていない場合に限って追加す
るものであり、前記プログラム実行装置は更に、アプリ
ケーションプログラムの実行に際して用いられるクラス
に関連する文字列データのうち第1ハッシュテーブル及
び第2ハッシュテーブルのいずれにも含まれていない文
字列データを重複なく含む第3ハッシュテーブルであっ
て、含んでいる各文字列データを各々異なるキー値と対
応付け、当該各文字列データを、複数のインデックス値
のうち何れかで、かつ該当のキー値に基づき算出可能な
インデックス値と、対応付けてなる第3ハッシュテーブ
ルを、書替可能なメモリ上に生成する第3ハッシュテー
ブル生成手段を備え、前記文字列参照解決手段は更に、
各クラス内の命令の解釈実行にあたって第3ハッシュテ
ーブルに含まれている文字列データの参照が必要となる
ところの命令と、第3ハッシュテーブルにおいて当該文
字列データに対応付けられているキー値とを、当該命令
の解釈実行に先行して対応付け、前記文字列検索手段は
更に、文字列データの参照を必要とする命令の解釈実行
に際して、当該文字列データが第1ハッシュテーブル及
び第2ハッシュテーブルのいずれにも含まれていないと
判定した場合には、当該命令に対応付けられたキー値か
らインデックス値を算出し、少なくともインデックス値
を用いて、第3ハッシュテーブルから当該キー値に対応
する文字列データを検索することとしてもよい。
【0098】これにより、クラスに関連する文字列デー
タが予めROM内のハッシュテーブルに登録されている
ところのクラス以外のシステムクラスについても、一度
ロードすればその後に電源を切った後であっても次にロ
ードする際におけるハッシュテーブルへの登録の処理の
実行を省くことができるので、アプリケーションプログ
ラムの迅速な実行が可能となる。
【0099】また、前記第2ハッシュテーブル生成手段
は、アプリケーションプログラムの実行に際して必要と
されることとなったクラスについて、当該クラスの名称
が所定文字列を含む名称である場合に、複数のアプリケ
ーションプログラムにおける複数のクラスから共通に用
いられ得るクラスであるものとして、当該必要とされる
こととなったクラスに関連する文字列データの第2ハッ
シュテーブルへの追加を行うこととしてもよい。
【0100】これにより、文字列データを第2ハッシュ
テーブルに登録すべきか否かを比較的単純な構成で判定
できるようになる。また、前記第2ハッシュテーブル生
成手段は、アプリケーションプログラムの実行に際して
必要とされることとなったクラスについて、当該クラス
内の命令が所定のメモリ領域内に格納されているかどう
かをクラス名称とメモリ領域との対応表に基づいて判定
し、所定のメモリ領域内に格納されていると判定した場
合に、複数のアプリケーションプログラムにおける複数
のクラスから共通に用いられ得るクラスであるものとし
て、当該必要とされることとなったクラスに関連する文
字列データの第2ハッシュテーブルへの追加を行うこと
としてもよい。
【0101】これにより、システムクラスの名称がいか
なるものであっても、文字列データを第2ハッシュテー
ブルに登録すべきか否かを比較的単純な構成で判定でき
るようになる。また、前記プログラム実行装置は、複数
のアプリケーションプログラムの解釈実行が可能であ
り、前記特定のクラス群は、複数のアプリケーションプ
ログラムにおける複数のクラスから共通に用いられ得る
クラスの全部又は一部からなる集合であり、前記プログ
ラム実行装置は更に、一のアプリケーションプログラム
の実行に際して用いられかつ他のアプリケーションプロ
グラムの実行に際して用いられないクラスに関連する文
字列データを重複なく含む第2ハッシュテーブルであっ
て、含んでいる各文字列データを各々異なるキー値と対
応付け、当該各文字列データを、複数のインデックス値
のうち何れかで、かつ該当のキー値に基づき算出可能な
インデックス値と、対応付けてなる第2ハッシュテーブ
ルを、アプリケーションプログラム毎に、書替可能なメ
モリ上に生成する第2ハッシュテーブル生成手段と、ア
プリケーションプログラムの実行が終了した後に、当該
アプリケーションプログラムについて生成された第2ハ
ッシュテーブルを削除する削除手段とを備え、前記文字
列参照解決手段は更に、各クラス内の命令の解釈実行に
あたって当該命令の属するアプリケーションプログラム
についての第2ハッシュテーブルに含まれている文字列
データの参照が必要となるところの命令と、当該第2ハ
ッシュテーブルにおいて当該文字列データに対応付けら
れているキー値とを、当該命令の解釈実行に先行して対
応付け、前記文字列検索手段は更に、文字列データの参
照を必要とする命令の解釈実行に際して、当該文字列デ
ータが第1ハッシュテーブルに含まれていないと判定し
た場合には、当該命令に対応付けられたキー値からイン
デックス値を算出し、少なくともインデックス値を用い
て、当該命令の属するアプリケーションプログラムにつ
いての第2ハッシュテーブルから当該キー値に対応する
文字列データを検索することとしてもよい。
【0102】これにより、アプリケーションプログラム
毎にハッシュテーブルが生成されるので、アプリケーシ
ョンプログラムの実行が終了した際に迅速に不要となる
データを削除、即ちその対応するハッシュテーブルを削
除することができるようになる。また、前記プログラム
実行装置は更に、アプリケーションプログラムの実行に
際して用いられるクラスに関連する文字列データのうち
第1ハッシュテーブルに含まれていない文字列データを
重複なく含む第2ハッシュテーブルであって、含んでい
る各文字列データを各々異なるキー値と対応付け、当該
各文字列データを、複数のインデックス値のうち何れか
で、かつ該当のキー値に基づき算出可能なインデックス
値と、対応付けてなる第2ハッシュテーブルを、書替可
能なメモリ上に生成する第2ハッシュテーブル生成手段
を備え、前記第2ハッシュテーブル生成手段は、クラス
のメンバ関数を実行する前に、当該クラスのメンバ関数
を構成する命令のうちその解釈実行にあたって必要とな
る文字列データが第1ハッシュテーブル及び第2ハッシ
ュテーブルのいずれにも含まれていない場合に当該文字
列データを第2ハッシュテーブルに追加し、前記文字列
参照解決手段は更に、各クラス内の命令の解釈実行にあ
たって第2ハッシュテーブルに含まれている文字列デー
タの参照が必要となるところの命令と、第2ハッシュテ
ーブルにおいて当該文字列データに対応付けられている
キー値とを、当該命令を含むメンバ関数を実行する前に
対応付け、前記文字列検索手段は更に、文字列データの
参照を必要とする命令の解釈実行に際して、当該文字列
データが第1ハッシュテーブルに含まれていないと判定
した場合には、当該命令に対応付けられたキー値からイ
ンデックス値を算出し、少なくともインデックス値を用
いて、第2ハッシュテーブルから当該キー値に対応する
文字列データを検索することとしてもよい。
【0103】これにより、クラスのメンバ関数、つまり
メソッドを実行する前には文字列データが未登録であれ
ばハッシュテーブルに登録する方式を採用することにな
るが、この方式を採用した場合であっても、特定のクラ
ス群に含まれるクラスに関連する文字列データは不揮発
性メモリに格納されているので、新たに登録する必要が
なく、各クラスのメソッドの実行が迅速に行えるように
なる。
【0104】また、前記第1ハッシュテーブルに含まれ
る文字列データのうちには、リンク用のデータがあり、
前記プログラム実行装置は、リンク用のデータの参照を
必要とする命令の解釈実行に際して、当該命令に対応付
けられたキー値に基づいてリンク先のアドレスを特定す
るリンク手段を備えることとしてもよい。これにより、
リンク用の文字列データをハッシュテーブルに登録して
管理する方式を採用することになるが、この方式を採用
した場合であっても、ハッシュテーブルへ一部の文字列
データが予め登録されていることにより、その登録に係
る処理を省略できるので、アプリケーションプログラム
の実行性能が向上する。
【0105】また、前記第1ハッシュテーブルを格納し
ている不揮発性メモリはリードオンリーメモリ(RO
M)であることとしてもよい。これにより、予め文字列
データがハッシュテーブルに登録されているので、迅速
にプログラムの実行を行うことができるようになる。ま
た、前記ROMは、第1ハッシュテーブルの他に前記特
定のクラス群内の各クラスについて、当該クラスを定義
し当該クラスに関連する文字列データを含むクラスファ
イルを記憶しており、第1ハッシュテーブルに含まれる
文字列データは、前記クラスファイル内の文字列データ
であることとしてもよい。
【0106】これにより、ROMに保持しているクラス
ファイルに含まれている文字列データについては既にR
OM内のハッシュテーブルに登録されているので、その
クラスをロードする必要が生じても新たにハッシュテー
ブルに登録する必要がなくなる。また、前記不揮発性メ
モリは書替可能なメモリであり、前記プログラム実行装
置は更に、プログラムの実行に際して随時必要に応じて
クラスに関連する文字列データを、第1ハッシュテーブ
ルに、既に含まれていない場合に限って追加するハッシ
ュテーブル更新手段を備えることとしてもよい。
【0107】これにより、フラッシュメモリ等の書込み
可能な不揮発性メモリ上に設けられたハッシュテーブル
に一旦登録された文字列データは、プログラム実行装置
に関する電源のオン、オフに関わらず保持されつづける
ため、以後はその文字列データをハッシュテーブルに登
録する処理を省略することが可能となる。また、本発明
に係るプログラム実行制御方法は、オブジェクト指向の
プログラムの特定のクラス群に関連する文字列データを
重複なく含む第1ハッシュテーブルであって、含んでい
る各文字列データを各々異なるキー値と対応付け、当該
各文字列データを、複数のインデックス値のうち何れか
で、かつ該当のキー値に基づき算出可能なインデックス
値と、対応付けてなる第1ハッシュテーブルを予め格納
している不揮発性メモリを備えるプログラム実行装置に
おけるプログラム実行制御方法であって、各クラス内の
命令の解釈実行にあたって文字列データの参照が必要と
なるところの命令と、第1ハッシュテーブルにおいて当
該文字列データに対応付けられているキー値とを、当該
命令の解釈実行に先行して対応付ける文字列参照解決ス
テップと、文字列データの参照を必要とする命令の解釈
実行に際して、当該命令に対応付けられたキー値からイ
ンデックス値を算出し、少なくともインデックス値を用
いて、第1ハッシュテーブルから当該キー値に対応する
文字列データを検索する文字列検索ステップとを含むこ
とを特徴とする。
【0108】これにより、オブジェクト指向プログラム
の実行に際して、例えばシステムクラスの一部又は全部
等の特定のクラス群に含まれるクラスのロード時にその
クラスに関連する文字列データをハッシュテーブルに新
たに登録する必要がなく、登録に係るメモリ確保等の処
理が省略できるため、プログラムの実行が迅速に行える
ようになる。
【図面の簡単な説明】
【図1】実施の形態1に係るプログラム実行装置100
の構成図である。
【図2】システムクラス用ハッシュテーブルの構成及び
内容例を示す図である。
【図3】ユーザクラス用ハッシュテーブルの構成及び内
容例を示す図である。
【図4】RAM中の実行時データ領域に生成される情報
の内容例を示した図である。
【図5】仮想マシン111によるプログラム実行制御処
理を示すフローチャートである。
【図6】仮想マシン111によるクラスのロード処理を
示すフローチャートである。
【図7】仮想マシン111による命令解釈実行処理を示
すフローチャートである。
【図8】実施の形態2に係るプログラム実行装置200
の構成図である。
【図9】仮想マシン211によるロード処理を示すフロ
ーチャートである。
【図10】仮想マシン211による命令解釈実行処理を
示すフローチャートである。
【図11】実施の形態3に係るプログラム実行装置30
0の構成図である。
【図12】仮想マシン311が生成するプログラム実行
管理テーブルの構成及び内容例を示す図である。
【図13】仮想マシン311によるプログラム実行制御
処理を示すフローチャートである。
【図14】従来のプログラム実行装置900の構成図で
ある。
【符号の説明】
100、200、300 プログラム実行装置 110、210、310 ROM 111、211、311 仮想マシン 112 システムクラスライブラリ 113 システムクラス用ハッシュテーブル 120、320 RAM 121、321 実行時データ領域 122 ユーザクラス用ハッシュテーブル 130、230 フラッシュメモリ 131 アプリケーションプログラム群 140 CPU 150 バス 213 システムクラスA用ハッシュテーブル 232 システムクラスB用ハッシュテーブル

Claims (15)

    【特許請求の範囲】
  1. 【請求項1】 オブジェクト指向のプログラムを解釈実
    行するプログラム実行装置であって、 特定のクラス群に関連する文字列データを重複なく含む
    第1ハッシュテーブルであって、含んでいる各文字列デ
    ータを各々異なるキー値と対応付け、当該各文字列デー
    タを、複数のインデックス値のうち何れかで、かつ該当
    のキー値に基づき算出可能なインデックス値と、対応付
    けてなる第1ハッシュテーブルを予め格納している不揮
    発性メモリと、 各クラス内の命令の解釈実行にあたって文字列データの
    参照が必要となるところの命令と、第1ハッシュテーブ
    ルにおいて当該文字列データに対応付けられているキー
    値とを、当該命令の解釈実行に先行して対応付ける文字
    列参照解決手段と、 文字列データの参照を必要とする命令の解釈実行に際し
    て、当該命令に対応付けられたキー値からインデックス
    値を算出し、少なくともインデックス値を用いて、第1
    ハッシュテーブルから当該キー値に対応する文字列デー
    タを検索する文字列検索手段とを備えることを特徴とす
    るプログラム実行装置。
  2. 【請求項2】 前記プログラム実行装置は、複数のアプ
    リケーションプログラムの解釈実行が可能であり、 前記特定のクラス群は、複数のアプリケーションプログ
    ラムにおける複数のクラスから共通に用いられ得るクラ
    スの全部又は一部からなる集合であり、 前記プログラム実行装置は更に、 アプリケーションプログラムの実行に際して用いられる
    クラスに関連する文字列データのうち第1ハッシュテー
    ブルに含まれていない文字列データを重複なく含む第2
    ハッシュテーブルであって、含んでいる各文字列データ
    を各々異なるキー値と対応付け、当該各文字列データ
    を、複数のインデックス値のうち何れかで、かつ該当の
    キー値に基づき算出可能なインデックス値と、対応付け
    てなる第2ハッシュテーブルを、書替可能なメモリ上に
    生成する第2ハッシュテーブル生成手段を備え、 前記文字列参照解決手段は更に、各クラス内の命令の解
    釈実行にあたって第2ハッシュテーブルに含まれている
    文字列データの参照が必要となるところの命令と、第2
    ハッシュテーブルにおいて当該文字列データに対応付け
    られているキー値とを、当該命令の解釈実行に先行して
    対応付け、 前記文字列検索手段は更に、文字列データの参照を必要
    とする命令の解釈実行に際して、当該文字列データが第
    1ハッシュテーブルに含まれていないと判定した場合に
    は、当該命令に対応付けられたキー値からインデックス
    値を算出し、少なくともインデックス値を用いて、第2
    ハッシュテーブルから当該キー値に対応する文字列デー
    タを検索することを特徴とする請求項1記載のプログラ
    ム実行装置。
  3. 【請求項3】 前記第1ハッシュテーブルを格納してい
    る不揮発性メモリはリードオンリーメモリ(ROM)で
    あり、 前記プログラム実行装置は更に、全てのアプリケーショ
    ンプログラムの解釈実行よりも前に、前記特定のクラス
    群に含まれている所定命令であって第1ハッシュテーブ
    ルに含まれている文字列データを参照する所定命令を実
    行する初期化手段を備えることを特徴とする請求項2記
    載のプログラム実行装置。
  4. 【請求項4】 前記特定のクラス群は、複数のアプリケ
    ーションプログラムにおける複数のクラスから共通に用
    いられ得るクラスの一部からなる集合であり、 前記第2ハッシュテーブル生成手段が生成する第2ハッ
    シュテーブルは、複数のアプリケーションプログラムに
    おける複数のクラスから共通に用いられ得るクラスに関
    連する文字列データのうち第1ハッシュテーブルに含ま
    れていない文字列データを重複なく含むハッシュテーブ
    ルであり、 前記第2ハッシュテーブル生成手段は、既に生成されて
    いない場合に限って第2ハッシュテーブルを書替可能な
    不揮発メモリ上に生成し、アプリケーションプログラム
    の実行に際して随時必要に応じて複数のアプリケーショ
    ンプログラムにおける複数のクラスから共通に用いられ
    得るクラスに関連する文字列データを、第2ハッシュテ
    ーブルに、既に含まれていない場合に限って追加するも
    のであり、 前記プログラム実行装置は更に、アプリケーションプロ
    グラムの実行に際して用いられるクラスに関連する文字
    列データのうち第1ハッシュテーブル及び第2ハッシュ
    テーブルのいずれにも含まれていない文字列データを重
    複なく含む第3ハッシュテーブルであって、含んでいる
    各文字列データを各々異なるキー値と対応付け、当該各
    文字列データを、複数のインデックス値のうち何れか
    で、かつ該当のキー値に基づき算出可能なインデックス
    値と、対応付けてなる第3ハッシュテーブルを、書替可
    能なメモリ上に生成する第3ハッシュテーブル生成手段
    を備え、 前記文字列参照解決手段は更に、各クラス内の命令の解
    釈実行にあたって第3ハッシュテーブルに含まれている
    文字列データの参照が必要となるところの命令と、第3
    ハッシュテーブルにおいて当該文字列データに対応付け
    られているキー値とを、当該命令の解釈実行に先行して
    対応付け、 前記文字列検索手段は更に、文字列データの参照を必要
    とする命令の解釈実行に際して、当該文字列データが第
    1ハッシュテーブル及び第2ハッシュテーブルのいずれ
    にも含まれていないと判定した場合には、当該命令に対
    応付けられたキー値からインデックス値を算出し、少な
    くともインデックス値を用いて、第3ハッシュテーブル
    から当該キー値に対応する文字列データを検索すること
    を特徴とする請求項3記載のプログラム実行装置。
  5. 【請求項5】 前記第2ハッシュテーブル生成手段は、
    アプリケーションプログラムの実行に際して必要とされ
    ることとなったクラスについて、当該クラスの名称が所
    定文字列を含む名称である場合に、複数のアプリケーシ
    ョンプログラムにおける複数のクラスから共通に用いら
    れ得るクラスであるものとして、当該必要とされること
    となったクラスに関連する文字列データの第2ハッシュ
    テーブルへの追加を行うことを特徴とする請求項4記載
    のプログラム実行装置。
  6. 【請求項6】 前記第2ハッシュテーブル生成手段は、
    アプリケーションプログラムの実行に際して必要とされ
    ることとなったクラスについて、当該クラス内の命令が
    所定のメモリ領域内に格納されているかどうかをクラス
    名称とメモリ領域との対応表に基づいて判定し、所定の
    メモリ領域内に格納されていると判定した場合に、複数
    のアプリケーションプログラムにおける複数のクラスか
    ら共通に用いられ得るクラスであるものとして、当該必
    要とされることとなったクラスに関連する文字列データ
    の第2ハッシュテーブルへの追加を行うことを特徴とす
    る請求項4記載のプログラム実行装置。
  7. 【請求項7】 前記プログラム実行装置は、複数のアプ
    リケーションプログラムの解釈実行が可能であり、 前記特定のクラス群は、複数のアプリケーションプログ
    ラムにおける複数のクラスから共通に用いられ得るクラ
    スの全部又は一部からなる集合であり、 前記プログラム実行装置は更に、 一のアプリケーションプログラムの実行に際して用いら
    れかつ他のアプリケーションプログラムの実行に際して
    用いられないクラスに関連する文字列データを重複なく
    含む第2ハッシュテーブルであって、含んでいる各文字
    列データを各々異なるキー値と対応付け、当該各文字列
    データを、複数のインデックス値のうち何れかで、かつ
    該当のキー値に基づき算出可能なインデックス値と、対
    応付けてなる第2ハッシュテーブルを、アプリケーショ
    ンプログラム毎に、書替可能なメモリ上に生成する第2
    ハッシュテーブル生成手段と、 アプリケーションプログラムの実行が終了した後に、当
    該アプリケーションプログラムについて生成された第2
    ハッシュテーブルを削除する削除手段とを備え、 前記文字列参照解決手段は更に、各クラス内の命令の解
    釈実行にあたって当該命令の属するアプリケーションプ
    ログラムについての第2ハッシュテーブルに含まれてい
    る文字列データの参照が必要となるところの命令と、当
    該第2ハッシュテーブルにおいて当該文字列データに対
    応付けられているキー値とを、当該命令の解釈実行に先
    行して対応付け、 前記文字列検索手段は更に、文字列データの参照を必要
    とする命令の解釈実行に際して、当該文字列データが第
    1ハッシュテーブルに含まれていないと判定した場合に
    は、当該命令に対応付けられたキー値からインデックス
    値を算出し、少なくともインデックス値を用いて、当該
    命令の属するアプリケーションプログラムについての第
    2ハッシュテーブルから当該キー値に対応する文字列デ
    ータを検索することを特徴とする請求項1記載のプログ
    ラム実行装置。
  8. 【請求項8】 前記プログラム実行装置は更に、アプリ
    ケーションプログラムの実行に際して用いられるクラス
    に関連する文字列データのうち第1ハッシュテーブルに
    含まれていない文字列データを重複なく含む第2ハッシ
    ュテーブルであって、含んでいる各文字列データを各々
    異なるキー値と対応付け、当該各文字列データを、複数
    のインデックス値のうち何れかで、かつ該当のキー値に
    基づき算出可能なインデックス値と、対応付けてなる第
    2ハッシュテーブルを、書替可能なメモリ上に生成する
    第2ハッシュテーブル生成手段を備え、 前記第2ハッシュテーブル生成手段は、クラスのメンバ
    関数を実行する前に、当該クラスのメンバ関数を構成す
    る命令のうちその解釈実行にあたって必要となる文字列
    データが第1ハッシュテーブル及び第2ハッシュテーブ
    ルのいずれにも含まれていない場合に当該文字列データ
    を第2ハッシュテーブルに追加し、 前記文字列参照解決手段は更に、各クラス内の命令の解
    釈実行にあたって第2ハッシュテーブルに含まれている
    文字列データの参照が必要となるところの命令と、第2
    ハッシュテーブルにおいて当該文字列データに対応付け
    られているキー値とを、当該命令を含むメンバ関数を実
    行する前に対応付け、 前記文字列検索手段は更に、文字列データの参照を必要
    とする命令の解釈実行に際して、当該文字列データが第
    1ハッシュテーブルに含まれていないと判定した場合に
    は、当該命令に対応付けられたキー値からインデックス
    値を算出し、少なくともインデックス値を用いて、第2
    ハッシュテーブルから当該キー値に対応する文字列デー
    タを検索することを特徴とする請求項1記載のプログラ
    ム実行装置。
  9. 【請求項9】 前記第1ハッシュテーブルに含まれる文
    字列データのうちには、リンク用のデータがあり、 前記プログラム実行装置は、 リンク用のデータの参照を必要とする命令の解釈実行に
    際して、当該命令に対応付けられたキー値に基づいてリ
    ンク先のアドレスを特定するリンク手段を備えることを
    特徴とする請求項1記載のプログラム実行装置。
  10. 【請求項10】 前記第1ハッシュテーブルを格納して
    いる不揮発性メモリはリードオンリーメモリ(ROM)
    であることを特徴とする請求項1記載のプログラム実行
    装置。
  11. 【請求項11】 前記ROMは、第1ハッシュテーブル
    の他に前記特定のクラス群内の各クラスについて、当該
    クラスを定義し当該クラスに関連する文字列データを含
    むクラスファイルを記憶しており、 第1ハッシュテーブルに含まれる文字列データは、前記
    クラスファイル内の文字列データであることを特徴とす
    る請求項1記載のプログラム実行装置。
  12. 【請求項12】 前記不揮発性メモリは書替可能なメモ
    リであり、 前記プログラム実行装置は更に、プログラムの実行に際
    して随時必要に応じてクラスに関連する文字列データ
    を、第1ハッシュテーブルに、既に含まれていない場合
    に限って追加するハッシュテーブル更新手段を備えるこ
    とを特徴とする請求項1記載のプログラム実行装置。
  13. 【請求項13】 オブジェクト指向のプログラムの特定
    のクラス群に関連する文字列データを重複なく含む第1
    ハッシュテーブルであって、含んでいる各文字列データ
    を各々異なるキー値と対応付け、当該各文字列データ
    を、複数のインデックス値のうち何れかで、かつ該当の
    キー値に基づき算出可能なインデックス値と、対応付け
    てなる第1ハッシュテーブルを予め格納している不揮発
    性メモリを備えるプログラム実行装置におけるプログラ
    ム実行制御方法であって、 各クラス内の命令の解釈実行にあたって文字列データの
    参照が必要となるところの命令と、第1ハッシュテーブ
    ルにおいて当該文字列データに対応付けられているキー
    値とを、当該命令の解釈実行に先行して対応付ける文字
    列参照解決ステップと、 文字列データの参照を必要とする命令の解釈実行に際し
    て、当該命令に対応付けられたキー値からインデックス
    値を算出し、少なくともインデックス値を用いて、第1
    ハッシュテーブルから当該キー値に対応する文字列デー
    タを検索する文字列検索ステップとを含むことを特徴と
    するプログラム実行制御方法。
  14. 【請求項14】 オブジェクト指向のプログラムの特定
    のクラス群に関連する文字列データを重複なく含む第1
    ハッシュテーブルであって、含んでいる各文字列データ
    を各々異なるキー値と対応付け、当該各文字列データ
    を、複数のインデックス値のうち何れかで、かつ該当の
    キー値に基づき算出可能なインデックス値と、対応付け
    てなる第1ハッシュテーブルを予め格納している不揮発
    性メモリを備えるプログラム実行装置に、プログラム実
    行制御処理を行わせるための制御プログラムであって、 前記プログラム実行制御処理は、 各クラス内の命令の解釈実行にあたって文字列データの
    参照が必要となるところの命令と、第1ハッシュテーブ
    ルにおいて当該文字列データに対応付けられているキー
    値とを、当該命令の解釈実行に先行して対応付ける文字
    列参照解決ステップと、 文字列データの参照を必要とする命令の解釈実行に際し
    て、当該命令に対応付けられたキー値からインデックス
    値を算出し、少なくともインデックス値を用いて、第1
    ハッシュテーブルから当該キー値に対応する文字列デー
    タを検索する文字列検索ステップとを含むことを特徴と
    する制御プログラム。
  15. 【請求項15】 オブジェクト指向のプログラムの特定
    のクラス群に関連する文字列データを重複なく含む第1
    ハッシュテーブルであって、含んでいる各文字列データ
    を各々異なるキー値と対応付け、当該各文字列データ
    を、複数のインデックス値のうち何れかで、かつ該当の
    キー値に基づき算出可能なインデックス値と、対応付け
    てなる第1ハッシュテーブルを予め格納している不揮発
    性メモリを備えるプログラム実行装置に、プログラム実
    行制御処理を行わせるための制御プログラムを記録した
    記録媒体であって、 前記プログラム実行制御処理は、 各クラス内の命令の解釈実行にあたって文字列データの
    参照が必要となるところの命令と、第1ハッシュテーブ
    ルにおいて当該文字列データに対応付けられているキー
    値とを、当該命令の解釈実行に先行して対応付ける文字
    列参照解決ステップと、 文字列データの参照を必要とする命令の解釈実行に際し
    て、当該命令に対応付けられたキー値からインデックス
    値を算出し、少なくともインデックス値を用いて、第1
    ハッシュテーブルから当該キー値に対応する文字列デー
    タを検索する文字列検索ステップとを含むことを特徴と
    する記録媒体。
JP2002061046A 2002-03-06 2002-03-06 プログラム実行装置 Pending JP2003256209A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2002061046A JP2003256209A (ja) 2002-03-06 2002-03-06 プログラム実行装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2002061046A JP2003256209A (ja) 2002-03-06 2002-03-06 プログラム実行装置

Publications (1)

Publication Number Publication Date
JP2003256209A true JP2003256209A (ja) 2003-09-10

Family

ID=28670175

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002061046A Pending JP2003256209A (ja) 2002-03-06 2002-03-06 プログラム実行装置

Country Status (1)

Country Link
JP (1) JP2003256209A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009064217A (ja) * 2007-09-06 2009-03-26 Internatl Business Mach Corp <Ibm> オブジェクトを記憶・管理するシステム
CN110266315A (zh) * 2013-03-15 2019-09-20 索尼电脑娱乐公司 用于通过基于云的网络进行数据传输的状态信息的压缩
US11904233B2 (en) 2012-09-28 2024-02-20 Sony Interactive Entertainment Inc. Method and apparatus for improving efficiency without increasing latency in graphics processing

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009064217A (ja) * 2007-09-06 2009-03-26 Internatl Business Mach Corp <Ibm> オブジェクトを記憶・管理するシステム
US11904233B2 (en) 2012-09-28 2024-02-20 Sony Interactive Entertainment Inc. Method and apparatus for improving efficiency without increasing latency in graphics processing
CN110266315A (zh) * 2013-03-15 2019-09-20 索尼电脑娱乐公司 用于通过基于云的网络进行数据传输的状态信息的压缩
CN110266315B (zh) * 2013-03-15 2023-10-27 索尼电脑娱乐公司 用于通过基于云的网络进行数据传输的状态信息的压缩

Similar Documents

Publication Publication Date Title
US7316010B1 (en) Methods for sharing conditionally across class loaders dynamically compiled code
US8370835B2 (en) Method for dynamically generating a configuration for a virtual machine with a virtual hard disk in an external storage device
CN104603750B (zh) 使用bpram来布局和执行软件应用
US7526760B1 (en) Methods for implementing virtual method invocation with shared code
US6324546B1 (en) Automatic logging of application program launches
US8099729B2 (en) Method and device for creating and using pre-internalized program files
US7440980B2 (en) Computer file management system
US6826750B1 (en) Method of automatically selecting program and data updates based upon versions
US7565665B2 (en) Efficient linking and loading for late binding and platform retargeting
CN109614165B (zh) 一种com组件的多版本并行运行方法和装置
JP5236367B2 (ja) 共用型ジャバjarファイル
CN104583948B (zh) 使用bpram来布局和执行操作系统
EP0945791A2 (en) Techniques for reducing the cost of dynamic class initialization checks in compiled code
US20030093420A1 (en) Method and system for retrieving sharable information using a hierarchically dependent directory structure
US7665075B1 (en) Methods for sharing of dynamically compiled code across class loaders by making the compiled code loader reentrant
US20110010700A1 (en) Virtualization of configuration settings
US6633892B1 (en) Archiving tool
US20090133042A1 (en) Efficient linking and loading for late binding and platform retargeting
US7406687B1 (en) Sharing runtime representation of software component methods across component loaders
JP2009543236A (ja) マルチタスク仮想マシンのためのヒープ組織
TWI359377B (en) System and method for providing execute-in-place f
JP2003256209A (ja) プログラム実行装置
CN113760193B (zh) 用于资源受限制装置的数据读写方法、装置及指令集
US6752836B1 (en) Method and apparatus for high-concurrency client locking with java in a data processing system
US6658647B1 (en) Access to resource files stored in ROM