JP2001312406A - プログラム生成装置 - Google Patents
プログラム生成装置Info
- Publication number
- JP2001312406A JP2001312406A JP2001044020A JP2001044020A JP2001312406A JP 2001312406 A JP2001312406 A JP 2001312406A JP 2001044020 A JP2001044020 A JP 2001044020A JP 2001044020 A JP2001044020 A JP 2001044020A JP 2001312406 A JP2001312406 A JP 2001312406A
- Authority
- JP
- Japan
- Prior art keywords
- class
- variable
- lightweight
- dependent
- class file
- 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
Links
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
ログラムから実行プログラムを生成するプログラム生成
装置であって、複数種類の異なる端末装置毎に、異なる
基礎クラスを有し、各端末装置用の実行プログラムを生
成するプログラム生成装置において、共通のプログラム
をコンパイルし、リンクする際に、端末装置毎のリンク
を不要とする。 【解決手段】オフセットテーブル生成部13は、端末装
置の種類に応じて個数又は型が変わり得て基礎クラスフ
ァイルから継承するクラス設計依存フィールドにかから
わないように、基礎クラスファイルから継承されるクラ
ス設計非依存フィールド及び新たに定義されるクラス設
計非依存フィールドに対するオフセット番号を割り当て
る。命令変換部14は、この番号に基づいて、ユーザク
ラスファイル中の命令を変換する。
Description
言語で記述されたソースプログラムから実行プログラム
を生成し、実行する技術に関する。
言語にて記述されたソースプログラムをコンパイル、リ
ンク等することによって実行プログラムを生成し、組み
込み機器(携帯電話、STB(セットトップボック
ス)、テレビジョンなどとして使用されるコンピュー
タ)又はパーソナルコンピュータ(以下、PCとする)
にてこの生成された実行プログラムを実行させるための
プログラム実行システムが種々知られている。
a(Javaは、Sun Microsystems社
の商標)により記述されたソースプログラムに基づいて
組み込み機器を動作させるための従来のプログラム実行
システムについて説明する。前記従来のプログラム実行
システムは、プログラム生成装置と組み込み機器である
端末装置とから構成される。
ラスのソースプログラムと、前記ソースプログラムにお
いて使用され、端末装置毎に異なる基礎ライブラリ内の
プログラムとが、コンパイル及びリンクされ、端末装置
毎に、異なる軽量ユーザクラスファイルが生成される。
ここで、基礎ライブラリは、端末装置の種類毎に異なる
ものが用意されており、各基礎ライブラリは、端末装置
に依存し、端末装置固有のハードウェアの制御に直接関
わるプログラム、例えば、ディスプレィユニットへの表
示やデータの通信等を制御するためのプログラムをファ
イル群として含んでいる。
ファイルは、対応する端末装置内に格納され、各端末装
置は、軽量ユーザクラスファイルに従って動作する。以
下では、ハードウェアの構成の一部が異なる2種類の端
末装置A及び端末装置Bを想定し、同一のユーザクラス
のソースプログラムからそれぞれ軽量ユーザクラスファ
イルを生成し、生成した各軽量ユーザクラスファイルを
対応する端末装置において実行させるものとし、前記従
来のプログラム実行システムについて、さらに詳細に説
明する。
行わせるための基礎クラスファイルを生成する元とな
り、Javaにより記述されたソースプログラムの一例
を、それぞれ図1及び図2に示す。また、端末装置A及
びBにおいて、共通に使用されるユーザクラスファイル
を生成する元となり、Javaにより記述されたソース
プログラムの一例を、図3に示す。なお、これらの図に
おいては、フィールドの定義のみを示しており、メソッ
ドでのこれらのフィールドの具体的な使用に関する記述
は省略している。
Xでは、インスタンスフィールドprivateX1、privateX
2、privateX3と、インスタンスフィールドfieldX1、fie
ldX2とが使用されている。インスタンスフィールドpriv
ateX1、privateX2、privateX3には、修飾子privateが用
いられて定義されているので、他のクラスに含まれるメ
ソッドからのアクセスが禁止されている。また、インス
タンスフィールドfieldX1、fieldX2は、他のクラスから
のアクセスを許容されている。
スタンスフィールドprivateY1、privateY2と、インスタ
ンスフィールドfieldY1、fieldY2、fieldY3とが使用さ
れている。インスタンスフィールドprivateY1、private
Y2には、修飾子privateが用いられて定義されているの
で、他のクラスに含まれるメソッドからのアクセスが禁
止されている。また、インスタンスフィールドfieldY
1、fieldY2、fieldY3は、他のクラスからのアクセスを
許容されている。
クラスBuilt_in_classXでは、他のクラスに含まれるメ
ソッドからのアクセスが禁止されているインスタンスフ
ィールドprivateX1と、他のクラスからのアクセスを許
容されているインスタンスフィールドfieldX1、fieldX2
とが使用されている。また、クラスBuilt_in_classYで
は、他のクラスに含まれるメソッドからのアクセスが禁
止されているインスタンスフィールドprivateY1、priva
teY2、privateY3と、他のクラスからのアクセスを許容
されているインスタンスフィールドfieldY1、fieldY2、
fieldY3とが使用されている。
スBuilt_in_classXは、クラスBuilt_in_classYにより継
承され、クラスBuilt_in_classYは、クラスUser_class
により継承されている。端末装置A及びBについて、ク
ラスBuilt_in_classX及びクラスBuilt_in_classYは、コ
ンパイルされ、それぞれ1個の基礎クラスファイルが構
成される。
端末装置Bであるかにかかわらず、同一の機能を有する
同一の名前のクラスBuilt_in_classX及びBuilt_in_clas
sYが用いられている。これらの中で使用されるインスタ
ンスフィールドに関しては、他のクラスからのアクセス
を許容するものについて、同じ名前の同じ内容を示すも
の、例えば、fieldX1、fieldX2、fieldY1、fieldY2、fi
eldY3が用いられている。
るものについては、異なる個数の異なる内容を示すも
の、例えば、端末装置AのprivateX1、privateX2、priv
ateX3、端末装置BのprivateX1が用いられている。な
お、端末AのprivateX1と端末装置BのprivateX1とは名
前が同一であるが異なる内容を示す。また、端末装置A
のprivateY1、privateY2と端末BのprivateY1、private
Y2についても同様に、名前が同一であるが異なる内容を
示す。
義される、端末装置Aに対するインスタンスフィールド
privateX1、privateX2、privateX3、privateY1、privat
eY2、及び端末装置Bに対するインスタンスフィールドp
rivateX1、privateY1、privateY2、privateY3は、端末
装置A、端末装置Bのそれぞれのハードウェアに応じた
制御を行うために用いられ、端末装置の基礎クラスの設
計に依存するものであり、以下では、これらをクラス設
計依存フィールドと呼ぶ。
Bに対して共通のインスタンスフィールドfielX1、fiel
dX2、fieldY1、fieldY2、fieldY3は、端末装置A、端末
装置Bに対して共通した制御を行うために用いられ、端
末装置の基礎クラスの設計に依存しないものであり、以
下では、これらをクラス設計非依存フィールドと呼ぶ。
1個のユーザクラスファイルを構成する。図3に示すよ
うに、クラスUser_classでは、インスタンスフィールド
fieldU1、fieldU2が用いられている。前記プログラム生
成装置では、以上のようなクラスBuilt_in_classX、ク
ラスBuilt_in_classY及びクラスUser_classのそれぞれ
にて用いられているインスタンスフィールドにクラスご
とに一意の番号が割り当てられ、図4〜図7に示すよう
なインスタンスフィールドオフセットテーブルが生成さ
れる。
するインスタンスフィールドオフセットテーブルを示す
図であり、図6及び図7は、ユーザクラスファイルに対
するインスタンスフィールドオフセットテーブルを示す
図である。図4及び図6は、それぞれ端末装置Aに対す
る基礎クラスファイル、ユーザクラスファイルに対する
ものであり、図5及び図7は、それぞれ端末装置Bに対
する基礎クラスファイル、ユーザクラスファイルに対す
るものである。
in_classYのインスタンスフィールドオフセットテーブ
ルでは、クラスBuilt_in_classXから継承するインスタ
ンスフィールドに対しては、クラスBuilt_in_classXと
同じオフセット番号が割り当てられている。具体的に
は、端末装置Aでは、fieldX1、fieldX2、privateX1、p
rivateX2、privateX3に対しては、クラスBuilt_in_clas
sXと同じオフセット番号が割り当てられており、端末装
置BではfieldX1、fieldX2、privateX1に対しては、ク
ラスBuilt_in_classXと同じオフセット番号が割り当て
られている。
User_classのインスタンスフィールドオフセットテーブ
ルでは、クラスBuilt_in_classYから継承するインスタ
ンスフィールドに対しては、クラスBuilt_in_classYと
同じオフセット番号が割り当てられている。具体的に
は、端末装置Aでは、fieldX1、fieldX2、privateX1、p
rivateX2、privateX3、fieldY1、fieldY2、fieldY3、pr
ivateY1、privateY2に対しては、クラスBuilt_in_class
Yと同じオフセット番号が割り当てられている。また、
端末装置Bにおいても同様である。
ssのインスタンスフィールドオフセットテーブルでは、
インスタンスフィールドfieldU1、fieldU2について、端
末装置Aでは、オフセット番号「11」及び「12」が
割り当てられており、端末装置Bでは、オフセット番号
「10」及び「11」が割り当てられている。次に、前
記プログラム生成装置では、これらのテーブルに基づい
て、クラスファイル中の命令の中でオペランドとして使
用されているインスタンスフィールドのオフセット番号
化が行われ、コンスタントプール内の識別情報が削除さ
れることとなる。こうして、同一の1個のユーザクラス
のソースプログラムから、端末装置毎に異なる軽量ユー
ザクラスファイルが生成される。
ログラム実行システムにおいては、同一のユーザクラス
のソースプログラムであるにもかかわらず、端末装置
(言い換えれば、軽量基礎クラスファイル)の種類数分
のリンクを行わなければならないという問題点がある。
は、オブジェクト指向言語で記述されたソースプログラ
ムから実行プログラムを生成するプログラム生成装置で
あって、複数種類の異なる端末装置毎に、異なる基礎ク
ラスを有し、各端末装置用の実行プログラムを生成する
プログラム生成装置において、共通のプログラムをコン
パイルし、リンクする際に、端末装置毎のリンクを不要
とするプログラム生成装置、プログラム生成方法、プロ
グラム生成プログラムを記録している記録媒体、仮想マ
シン、プログラム実行方法、プログラム実行プログラム
を記録している記録媒体、前記プログラム生成装置によ
り生成されたプログラムを記録している記録媒体を提供
することを目的とする。
に、本発明は、端末装置毎に異なる依存変数と各端末装
置に共通の非依存変数とが定義され、継承関係を有する
複数のクラスが定義されている複数のクラスファイル
を、端末装置毎にリンクしてそれぞれ軽量クラスファイ
ルを生成するプログラム生成装置であって、継承関係を
有する複数のクラスがそれぞれ定義されている複数のク
ラスファイルを記憶しており、各クラスにおいて、変数
名によりそれぞれ識別される依存変数と非依存変数とが
定義され、各クラスファイルは、変数毎に変数名を含む
記憶手段と、端末装置毎にリンクされる際に、複数の端
末装置において同じ変数名が付された非依存変数につい
ては同じ番号となるように、前記記憶手段に記憶されて
いる各クラスファイルに定義されている変数毎にオフセ
ット番号を生成する番号生成手段と、前記記憶手段に記
憶されている各クラスファイルについて、変数毎に、当
該変数名を前記番号生成手段により生成されたオフセッ
ト番号に置き換えて軽量クラスファイルを生成する軽量
クラスファイル生成手段とを備えることを特徴とする。
非依存変数とに対して、異なる番号体系により変数毎に
オフセット番号を生成するように構成してもよい。ここ
で、前記プログラム生成装置において、前記複数のクラ
スは、第1クラスと、前記第1クラスを継承する第2ク
ラスとを含み、前記番号生成手段は、前記第2クラスに
ついて、第2クラスのみにおいて定義されている依存変
数と、第1クラスから継承する依存変数とに対して、異
なる番号体系により変数毎にオフセット番号を生成する
ように構成してもよい。
て、前記複数のクラスは、第1クラスと、前記第1クラ
スを継承する第2クラスとを含み、前記番号生成手段
は、前記第2クラスについて、第2クラスのみにおいて
定義されている依存変数と、第1クラスから継承する依
存変数とに対して、1個の番号体系により変数毎にオフ
セット番号を生成するように構成してもよい。
て、前記複数のクラスは、第1クラスと、前記第1クラ
スを継承する第2クラスとを含み、前記番号生成手段
は、全ての依存変数と非依存変数とに対して、1個の番
号体系によりオフセット番号を生成し、ここで、前記第
2クラスについて、第2クラスのみにおいて定義されて
いる変数と、第1クラスから継承する変数とに対して、
一定の間隔を空けて変数毎にオフセット番号を生成する
ように構成してもよい。
り生成された軽量クラスファイルに従って動作する仮想
マシンであって、前記のプログラム生成装置により生成
された軽量クラスファイルを記憶している記憶手段と、
前記軽量クラスファイルを読み出し、読み出した軽量ク
ラスファイル内の変数毎のオフセット番号に基づいて、
インスタンスを生成するインスタンス生成手段と、生成
されたインスタンスを用いて、軽量クラスファイル内に
定義されている命令を実行する実行手段とを備えること
を特徴とする。
り生成された軽量クラスファイルに従って動作する仮想
マシンであって、前記プログラム生成装置により生成さ
れた軽量クラスファイルを記憶している記憶手段と、前
記軽量クラスファイルを読み出し、読み出した前記軽量
クラスファイルに含まれるクラス毎に計数された非依存
変数カウント及び依存変数カウントに基づいて、メモリ
上にそれぞれ第1領域と第2領域とを確保し、前記第1
領域へのポインタを前記第2領域中に格納することによ
り、インスタンスを生成するインスタンス生成手段と、
生成されたインスタンスを用いて、軽量クラスファイル
内に定義されている命令を実行する実行手段とを備える
ことを特徴とする。
プログラム実行システムについて説明する。 1.第1の実施の形態 本発明の第1の実施の形態としてのプログラム実行シス
テム1について説明する。
構成の概略を説明するためのブロック図を用いて説明す
る。プログラム実行システム1は、図8に示すように、
プログラム生成装置10と組み込み機器である端末装置
(軽装仮想マシン)20とから構成される。プログラム
生成装置10は、コンパイル部11と静的リンク部12
と図示してない記憶部とを含んでおり、端末装置20
は、命令実行部21とインスタンス生成部22と図示し
てない記憶部とを含んでいる。
は、ともに、マイクロプロセッサ、RAM、ROMなど
を含むコンピュータシステムであり、RAM又はROM
にはコンピュータプログラムが記憶されており、前記マ
イクロプロセッサが、前記コンピュータプログラムに従
って動作することにより、プログラム生成装置10及び
端末装置20は、その機能を達成する。
2とは、1個のプログラム生成装置10に含まれるもの
としているが、それぞれ別の異なる装置に含まれるもの
としてもよい。このとき、1個の装置は、軽量ユーザク
ラスファイル56を生成するプログラム生成部を含むよ
うに構成することができる。 (1)ソースプログラム51 ソースプログラム51は、プログラム生成装置10内の
記憶部に格納されている。ソースプログラム51は、ユ
ーザによりJavaを用いて記述されたソースプログラ
ムであり、複数のクラスを含む。ソースプログラム51
は、基礎クラスに関するものとユーザクラスに関するも
のとを含む。
ム生成装置10内の記憶部に格納されている。基礎クラ
ス定義ファイル55は、端末装置20にあらかじめ記憶
されている軽量基礎クラスライブラリ58に含まれる、
クラス、メソッド、フィールドの定義を示すものであ
る。基礎クラス定義ファイル55は、クラス設計依存フ
ィールドの名前、型、個数等の情報を含まない。
を読み出し、ソースプログラム51をコンパイルし、ソ
ースプログラム51に含まれるクラスの各々に対応する
クラスファイル52、・・・、53を生成する。クラス
ファイル52、・・・、53は、基礎クラスに関するも
のとユーザクラスに関するものとを含む。コンパイル部
11は、生成したクラスファイル52、・・・、53を
記憶部に書き込む。
3と、基礎クラス定義ファイル55を記憶部から読み出
し、基礎クラス定義ファイル55を必要に応じて用い、
クラスファイル52、・・・、53中のコンスタントプ
ール内の識別情報を解決し、この解決により不要となっ
た識別情報を削除し、軽量クラスファイル54、・・・
を生成し、生成した軽量クラスファイル54、・・・を
記憶部へ書き込む。
基礎クラスファイルと軽量ユーザクラスファイルとを含
む。軽量基礎クラスファイルは、端末装置20固有のハ
ードウェアの構成、制御に関わる軽量クラスファイルで
あり、また、軽量ユーザクラスファイルは、ユーザクラ
スファイルとしての軽量クラスファイルである。静的リ
ンク部12は、オフセットテーブル生成部13と命令変
換部14とリンク部15とから構成されている。
ファイル中で使用されているインスタンスフィールドに
オフセット番号を割り当てる。オフセットテーブル生成
部13は、非依存テーブル生成部131と、依存テーブ
ル生成部132とを含んでいる。非依存テーブル生成部
131は、端末装置のハードウェア(言い換えると、基
礎クラス)の設計に依存しないクラス設計非依存フィー
ルドに対するクラス設計非依存フィールドオフセットテ
ーブルを生成する。依存テーブル生成部132は、端末
装置のハードウェア(言い換えると、基礎クラス)の設
計に依存するクラス設計依存フィールドに対するクラス
設計依存フィールドオフセットテーブルを生成する。ま
た、オフセットテーブル生成部13は、カウントテーブ
ルを生成し、生成したカウントテーブルを軽量クラスフ
ァイルに追加して書き込む。
ンスタンスフィールドを指示するコンスタントプール内
のオフセットを割り当てられたオフセット番号に置換す
る。リンク部15は、その他のリンク処理を行う。 (5)軽量ユーザクラスファイル56、軽量基礎クラス
ファイル57 軽量基礎クラスファイルは、軽量基礎クラスファイル5
7として、軽量ユーザクラスファイル56の実行に先立
って端末装置20中に格納される。また、軽量ユーザク
ラスファイルは、軽量ユーザクラスファイル56とし
て、流通の対象とされて所定の伝送路を介してダウンロ
ードされることによって端末装置20に読み込まれて格
納される。
軽量基礎クラスファイル複数をファイル群としてあらか
じめ収めている。上記のようにして読み込まれた軽量ユ
ーザクラスファイル56と軽量ユーザクラスファイル5
6により使用が指定されている軽量基礎クラスライブラ
リ58中の軽量基礎クラスファイル57とは、すでにリ
ンクされているもの、言い換えると、識別情報が解決さ
れているものである。
部22 命令実行部21は、軽量ユーザクラスファイル56中の
命令を呼び出し、必要に応じて軽量基礎クラスファイル
57を呼び出し、実行する。インスタンス生成部22
は、命令の実行に伴って、インスタンスを生成する。 1.2 プログラム生成装置10の動作 プログラム生成装置10が、軽量基礎クラスファイル及
び軽量ユーザクラスファイルを生成する動作について、
図9及び図10を用いて、説明する。
作 プログラム生成装置10が基礎クラスのソースプログラ
ム511から軽量基礎クラスファイル541を生成する
動作を図9に示す。コンパイル部11は、基礎クラスの
ソースプログラム511をコンパイルして、基礎クラス
ファイル521、・・・、522を生成する。次に、静
的リンク部12の非依存テーブル生成部131は、基礎
クラスファイル521、・・・、522から、図11に
示すクラス設計非依存フィールドオフセットテーブルを
生成し、依存テーブル生成部132は、基礎クラスファ
イル521、・・・、522から、図12に示すクラス
設計依存フィールドオフセットテーブルを生成する。次
に、命令変換部14は、これらのテーブルに基づいて、
コンスタントプール内のオフセットを、前記それぞれの
テーブル生成の際に割り当てられたオフセット番号に置
換する。ここで、コンスタントプール内の前記オフセッ
トは、getfield命令、putfield命令等の所定の命令のオ
ペランドとなっているインスタンスフィールドを指示す
るものである。次に、リンク部15は、これらの他のリ
ンク処理を行う。
基礎クラスファイル521、・・・、522からクラ
ス、メソッド、フィールド等の定義を示す情報を収集
し、基礎クラス定義ファイル55に格納する。先述した
ように、基礎クラス定義ファイル55にはクラス設計依
存フィールドの名前、型、個数等の情報は含まれておら
ず、基礎クラス定義ファイル55は異なる種類のすべて
の端末に対して同じものが生成されることとなる。
動作 次に、プログラム生成装置10がユーザクラスのソース
プログラム512から軽量ユーザクラスファイル542
を生成する動作を図10に示す。前記軽量基礎クラスフ
ァイルの生成の後、コンパイル部11は、ユーザクラス
のソースプログラム512をコンパイルして、ユーザク
ラスファイル531、・・・、532を生成する。次
に、静的リンク部12の非依存テーブル生成部131
は、ユーザクラスファイル531、・・・、532及び
生成された前記基礎クラス定義ファイル55から、図1
3に示すクラス設計非依存フィールドオフセットテーブ
ルを生成する。次に、命令変換部14は、これらのテー
ブルに基づいて、コンスタントプール内のオフセット
を、テーブル生成の際に割り当てられたオフセット番号
に置換する。ここで、コンスタントプール内の前記オフ
セットは、所定の命令のオペランドとなっているインス
タンスフィールドを指示するものである。次に、リンク
部15は、これらの他のリンク処理を行う。
イル55は、一意に定まるものであって、端末装置20
の軽量基礎クラスファイルの構成に応じて異なるもので
はない。静的リンク部12は、基礎クラス定義ファイル
55を用いて、ユーザクラスファイルから基礎クラスフ
ァイルへのリンク処理を行う。また、ポインタを用いる
等により、軽量ユーザクラスファイルに対するインスタ
ンスフィールドオフセットテーブル、言い換えると、ク
ラス設計非依存フィールドオフセットテーブル中には、
クラス設計依存フィールドに関する情報が含まれないよ
うにするため、静的リンク部12は、複数の異なる端末
装置について、同一のユーザクラスのソースプログラム
512から同一の軽量ユーザクラスファイル542を生
成する。
非依存フィールドオフセットテーブル、及びクラス設計
依存フィールドオフセットテーブル、並びに軽量ユーザ
クラスファイルに対するクラス設計非依存フィールドオ
フセットテーブルについて、図11〜図13を用いて、
より具体的に説明する。
は、プログラム生成装置10により生成されるものであ
り、フィールドオフセット番号及びインスタントフィー
ルドからなる組を複数個含む領域を備えている。これら
のフィールドオフセットテーブルは、命令変換部14に
より、getfield命令、putfield命令を
変換するときに、使用される。また、静的リンク部12
が処理を終了するときに、破棄される。
と同様に、ハードウェアの構成の一部が異なる2つの端
末装置A、端末装置Bにて同一のユーザクラスのソース
プログラムから生成される軽量ユーザクラスファイルを
実行させることを想定する。また、プログラム生成装置
10は、記憶部に図1〜図3に示すJavaプログラム
を記憶しているものとする。
存フィールドオフセットテーブル 図1及び図2にそれぞれ示す基礎クラスBuilt_in_class
X及び基礎クラスBuilt_in_classYに対応して生成される
クラス設計非依存フィールドオフセットテーブルを図1
1に示す。静的リンク部12の非依存テーブル生成部1
31は、基礎クラスBuilt_in_classX及び基礎クラスBui
lt_in_classYのそれぞれに対して、クラス設計非依存フ
ィールドオフセットテーブルを生成する。
するクラス設計非依存フィールドオフセットテーブルに
示すように、非依存テーブル生成部131は、クラス設
計非依存フィールドfieldX1、fieldX2に対して、フィー
ルドオフセット番号「2」、「3」を定義順に割り当て
る。また、非依存テーブル生成部131は、オフセット
番号「1」に対応して確保される領域にnullを格納
する。インスタンスフィールドがnullである領域
は、端末装置でのインスタンス生成時にクラス設計依存
フィールドオフセットテーブルに対応する領域へのポイ
ンタを格納するインスタンス領域であることを示してい
る。
Yに対するクラス設計非依存フィールドオフセットテー
ブルに示すように、非依存テーブル生成部131は、基
礎クラスBuilt_in_classXから継承するクラス設計非依
存フィールドfieldX1、fieldX2には、基礎クラスBuilt_
in_classXと同じオフセット番号「2」、「3」を割り
当て、基礎クラスBuilt_in_classYにて新たに定義され
るクラス設計非依存フィールドfieldY1、fieldY2、fiel
dY3には、オフセット番号「5」、「6」、「7」 を定
義順に割り当る。また、非依存テーブル生成部131
は、オフセット番号「1」、「4」に対応して確保され
る領域にnullを格納する。ここで、オフセット番号
「1」に対応して確保される領域は、端末装置でのイン
スタンス生成時に基礎クラスBuilt_in_classXと同じク
ラス設計依存フィールドオフセットテーブルへのポイン
タを格納するインスタンス領域に対応している。また、
オフセット番号「4」に対応して確保される領域は、端
末装置でのインスタンス生成時に基礎クラスBuilt_in_c
lassYにて定義されるクラス設計依存フィールドに対す
るクラス設計依存フィールドオフセットテーブルに対応
する領域へのポインタを格納するインスタンス領域に対
応している。インスタンスフィールドのnullはこれ
らを示している。
フィールドオフセットテーブル 基礎クラスBuilt_in_classX及び基礎クラスBuilt_in_cl
assYに対応して生成されるクラス設計依存フィールドオ
フセットテーブルを図12に示す。前記のクラス設計非
依存フィールドオフセットテーブルは端末装置A、端末
装置Bについて同一であるが、用いられるクラス設計依
存フィールドが端末装置A、端末装置Bでは異なるた
め、クラス設計依存フィールドオフセットテーブルは端
末装置A、端末装置Bでは異なるものとなる。実際、端
末装置Aに対しては、依存テーブル生成部132は、図
12(a)に示すようなクラス設計依存フィールドオフ
セットテーブルを基礎クラスごとに生成し、端末装置B
に対しては、図12(b)に示すようなクラス設計依存
フィールドオフセットテーブルを基礎クラスごとに生成
する。
クラスファイル541が生成される際には、上記の基礎
クラスBuilt_in_classX、Built_in_classYに対応するク
ラス設計非依存フィールドオフセットテーブル、クラス
設計依存フィールドオフセットテーブルが生成される。 (3)ユーザクラスに対するクラス設計非依存フィール
ドオフセットテーブル 図10に示す軽量ユーザクラスファイル542が生成さ
れる際には、図13に示すようなユーザクラスUser_cla
ssに対応するクラス設計非依存フィールドオフセットテ
ーブルが生成され、さらに図14及び図15に示すイン
スタンスが端末装置20での実行に伴って生成される。
lassに対応して生成されるクラス設計非依存フィールド
オフセットテーブルを示す図であり、図14及び図15
は、それぞれ端末装置A、端末装置Bにて生成されるユ
ーザクラスUser_classのインスタンスを示す図である。
静的リンク部12の非依存テーブル生成部131は、ユ
ーザクラスUser_classに対して、クラス設計非依存フィ
ールドオフセットテーブルを生成する。
部131は、ユーザクラスUser_classに対するクラス設
計非依存フィールドオフセットテーブルでは、基礎クラ
スBuilt_in_classYから継承するクラス設計非依存フィ
ールドfieldX1、fieldX2、fieldY1、fieldY2、fieldY3
には、基礎クラスBuilt_in_classYと同じオフセット番
号「2」、「3」、「5」、「6」、「7」を割り当て
る。また、新たに定義されるクラス設計非依存フィール
ドfieldU1、fieldU2には、オフセット番号「8」、
「9」を定義順に割り当てる。また、非依存テーブル生
成部131は、オフセット番号「1」、「4」に対応し
て確保される領域に、それぞれnullを格納する。オ
フセット番号「1」、「4」に対応して確保される領域
には、端末装置でのインスタンス生成時に、基礎クラス
Built_in_classX、Built_in_classYと同じクラス設計依
存フィールドオフセットテーブルに対応する領域へのポ
インタが格納される。インスタンスフィールドのnul
lはこれらを示している。
図15に示すインスタンスを生成する。端末装置Aのイ
ンスタンス生成部22は、まず、メモリ上に、図13に
示すクラス設計非依存フィールドオフセットテーブルに
対応して領域701を確保する。なお、詳細について
は、後述する。続いて、図12(a)に示すクラス設計
依存フィールドオフセットテーブルに対応して領域70
2、703を確保する。この後、クラス設計非依存フィ
ールドオフセットテーブルに対応する領域701中のイ
ンスタンスフィールドnullに対応する2つのポイン
タ領域にそれぞれ順に、基礎クラスBuilt_in_
classXのクラス設計依存フィールドオフセットテ
ーブルに対応する領域702へのポインタ、及び基礎ク
ラスBuilt_in_classYのクラス設計依存
フィールドオフセットテーブルに対応する領域703へ
のポインタを格納する。このようにして、インスタンス
生成部22は、インスタンスを生成する。
22は、まず、メモリ上に、図13に示すクラス設計非
依存フィールドオフセットテーブルに対応して領域71
1を確保し、続いて、図12(b)に示すクラス設計依
存フィールドオフセットテーブルに対応して領域71
2、713を確保する。この後、クラス設計非依存フィ
ールドオフセットテーブルに対応する領域711中のイ
ンスタンスフィールドnullに対応する2つのポイン
タ領域にそれぞれ順に、基礎クラスBuilt_in_classXの
クラス設計依存フィールドオフセットテーブルに対応す
る領域712へのポインタ、及び基礎クラスBuilt_in_c
lassYのクラス設計依存フィールドオフセットテーブル
に対応する領域713へのポインタを格納する。このよ
うにして、インスタンス生成部22は、インスタンスを
生成する。
び図15に示すようなインスタンスが生成されるので、
例えば、ユーザクラスUser_classのfieldU1は、端末装
置A及び端末装置Bにて同様に、インスタンスに対応す
る領域中、第8番目の変数としてアクセスされることと
なる。プログラム実行システム1では、端末装置20が
上記のようにしてインスタンスを生成するので、静的リ
ンク部12の命令変換部14は、図16に示すようなク
ラス設計非依存フィールドに対応するgetfield命令及び
putfield命令のオペランドの変換を行う。
Javaのユーザクラスのクラスファイルにおいて、pu
tfield命令のオペランドとなっている<User_class.fiel
dU1>及びgetfield命令のオペランドとなっている<User_
class.fieldU2>は、コンスタントプールでのオフセット
を示している。命令変換部14は、上述のようなインス
タンスフィールドオフセットテーブルに基づいて、イン
スタンス領域中で、オフセットをインスタンスフィール
ドを特定するオフセット番号に変換する。また、「new
命令」のオペランドとなっている<User_class>について
も、同様に、所定の番号化を行う。その結果、図16
(b)に示すクラスファイルが得られる。この図に示す
ように、クラスファイル中のputfield命令及びgetfield
命令のオペランドが、「8」及び「9」に変換されてい
る。
なクラス設計依存フィールドに対応するgetfield命令及
びputfield命令のオペランドの変換を行う。図17は、
コンパイルされて基礎クラスファイルが生成される元と
なるJavaプログラムの例を示す図である。なお、図
17には、フィールドの定義のみを示しており、フィー
ルドの具体的な使用に関する記述を省略している。図1
8は、図17に示すインスタンスフィールドに対応し、
前記変換後のgetfield命令のオペランドを示す図であ
る。なお、putfield命令のオペランドについても同様で
ある。
ス設計非依存フィールドとしてfieldA1、fieldA2、fiel
dA3が定義され、またクラス設計依存フィールドとしてf
ieldA4が定義されている。命令変換部14は、fieldA
1、fieldA2、fieldA3に対応するgetfield命令のオペラ
ンドでコンスタントプールでのオフセットを示す<A.fie
ldA1>、<A.fieldA2>、<A.fieldA3>を、図18に示すよ
うに、インスタンス領域中でインスタンスフィールドを
特定するオフセット番号「1」、「2」、「3」にそれ
ぞれ変換する。一方、fieldA4に対応するgetfield命令
のオペランドでコンスタントプールでのオフセットを示
す<A.fieldA4>については、プリフィックスdepen
dentを用いるものとして、「getfield <A.fieldA4
>」を 「dependent getfield 1 1」 に変換する。ここで、getfield命令の1つ目のオペラン
ドは、クラス設計非依存フィールドでのオフセット番号
を示す。また、2つ目のオペランドは、クラス設計依存
フィールドでのオフセット番号を示す。
Aの基礎クラスBuilt_in_classYのクラスファイルにお
いて、putfield命令のオペランドとなっている<Built_i
n_classY.fieldU1>及びgetfield命令のオペランドとな
っている<Built_in_classY.privateY1>は、コンスタン
トプールでのオフセットを示している。命令変換部14
は、上述のようなインスタンスフィールドオフセットテ
ーブルに基づいて、インスタンス領域中で、オフセット
をインスタンスフィールドを特定するオフセット番号に
変換する。また、「new命令」のオペランドとなってい
る<Built_in_classY>についても、同様に、所定の番号
化を行う。その結果、図19(b)に示すクラスファイ
ルが得られる。
対応付けて記憶しているデータテーブルである。クラス
ID(クラス識別子)は、軽量クラスファイルにおい
て、各クラスを識別するための番号である。クラスID
は、重複を許さない。基礎クラスについては、1から、
連続した番号で、7FFFまでを割り当てる。ユーザク
ラスについては、8001から、連続した番号で、FF
FFまでを割り当てる。
4により、new命令変換の際に使用される。また、静
的リンク部12の処理が終了するときに、破棄される。
図20及び図21に、クラスID対応テーブルの一例を
それぞれ示す。図20に示す基礎クラスID対応テーブ
ルは、基礎クラスについて、クラス名とクラスIDとを
対応付けて記憶している。また、図21に示すユーザク
ラスID対応テーブルは、ユーザクラスについて、クラ
ス名とクラスIDとを対応付けて記憶している。
ィールドカウントテーブルと、クラス設計依存フィール
ドカウントテーブルとがある。 (1)クラス設計非依存フィールドカウントテーブル クラス設計非依存フィールドカウントテーブルは、クラ
スIDと非依存フィールドカウントとスーパークラスI
Dとを対応付けて記憶しているデータテーブルである。
る。非依存フィールドカウントは、対応するクラスID
により識別されるクラス内の非依存フィールドの数を示
す。スーパークラスIDは、対応するクラスIDにより
識別されるクラスのスーパークラスのクラスIDを示
す。
ブルの一例を図22及び図23に示す。図22に示すク
ラス設計非依存フィールドカウントテーブルは、端末装
置A及びBに共通の軽量基礎クラスファイルに対するも
のである。また、図23に示すクラス設計非依存フィー
ルドカウントテーブルは、端末装置A及びBに共通の軽
量ユーザクラスファイルに対するものである。
テーブル クラス設計依存フィールドカウントテーブルは、クラス
IDと非依存フィールドオフセットと依存フィールドカ
ウントとスーパークラスIDとを対応付けて記憶してい
るデータテーブルである。クラスIDは、上記に説明し
た通りである。
クラスIDにより識別されるクラスの非依存フィールド
のオフセット番号を示す。依存フィールドカウントは、
対応するクラスIDにより識別されるクラス内の依存フ
ィールドの数を示す。スーパークラスIDは、対応する
クラスIDにより識別されるクラスのスーパークラスの
クラスIDを示す。
ルの一例を図24(a)、(b)に示す。図24(a)
のクラス設計依存フィールドカウントテーブルは、端末
装置Aの軽量基礎クラスファイルに対するものである。
図24(b)のクラス設計依存フィールドカウントテー
ブルは、端末装置Bの軽量基礎クラスファイルに対する
ものである。
置10及び端末装置20において、図25〜図30のフ
ローチャートに示すような制御が行われることにより実
現される。 (1)基礎クラスファイルに対するリンクの動作 基礎クラスファイルに対するリンク処理の手順につい
て、図25〜図27に示すフローチャートを用いて説明
する。
れた基礎クラスファイルを読み込み(ステップS10
1)、すでに読み込まれたクラスファイル中において、
まだ読み込まれていないクラスファイルが、使用されて
いるか否かを判定し、まだ読み込まれていないクラスフ
ァイルが、すでに読み込まれたクラスファイル中で使用
されているときには(ステップS102にてYes)、
前記まだ読み込まれていないクラスファイルを読み込み
(ステップS103)、ステップS102へ戻り、まだ
読み込まれていないクラスファイルが、すでに読み込ま
れたクラスファイル中で使用されていないと判定される
まで(ステップS102にてNo)、ステップS103
において、基礎クラスファイルの読込みを繰り返す。
が、すでに読み込まれたクラスファイル中で使用されて
いないと判定されると(ステップS102にてNo)、
オフセットテーブル生成部13は、オフセットテーブル
の生成処理を行い(ステップS104a)、命令変換部
14は、命令変換の処理を行い(ステップS110
a)、リンク部15は、その他のリンク処理を行い(ス
テップS112)、静的リンク部12は、軽量基礎クラ
スファイルを記憶部へ書き込み(ステップS113)、
基礎クラス定義ファイルを記憶部へ書き込む(ステップ
S114)。
するリンク処理は、終了して、軽量基礎クラスファイル
と、基礎クラス定義ファイルが生成される。 (オフセットテーブル生成部13の動作)次に、ステッ
プS104aのオフセットテーブルの生成処理の詳細に
ついて、図26に示すフローチャートを用いて、説明す
る。
まれたクラスのうちで、インスタンスフィールドオフセ
ットテーブルが生成されていないクラスを対象として設
定し(ステップS104)、設定されたクラスのスーパ
ークラスが存在しないか、または、存在するときに、ス
ーパークラスには、インスタンスフィールドオフセット
テーブルが生成されているかを判定する。
しない、または、存在するときに、スーパークラスに
は、インスタンスフィールドオフセットテーブルが生成
されていると判定された場合に(ステップS105にて
Yes)、対象となるクラスに「1」から始まる連続す
る番号のクラスIDを付加し(ステップS107a)、
対象クラスのクラス名とクラスIDとを、図20に示す
ような基礎クラスID対応テーブルに追加して書き込み
(ステップS107b)、依存フィールドの1個のポイ
ンタ格納用領域と、対象クラスの非依存フィールドとを
取り出して、図11に示すような、スーパークラスのク
ラス設計非依存フィールドオフセットテーブルに追加
し、前記クラス設計非依存フィールドオフセットテーブ
ルを命令変換部14へ出力する。ここで、対象クラスの
スーパークラスが存在しないときには、対象クラスの非
依存フィールドからクラス設計非依存フィールドオフセ
ットテーブルを生成する(ステップS107c)。次
に、図22に示すように、非依存フィールドカウントテ
ーブルに、対象クラスのクラスID、非依存フィールド
カウント、スーパークラスIDを追加して書き込む。こ
こで、ステップS107cで生成した、クラス設計非依
存フィールドオフセットテーブルを元にして、ポインタ
領域及び継承元の非依存フィールド数を含めて、非依存
フィールドの数を数えて、非依存フィールドカウントを
算出する(ステップS107d)。
対象クラスの依存フィールドのみを取り出し、図12に
示すような、クラス設計依存フィールドオフセットテー
ブルを生成し、生成したクラス設計依存フィールドオフ
セットテーブルを命令変換部14へ出力し(ステップS
108a)、図24に示す依存フィールドカウントテー
ブルに、対象クラスのクラスID、非依存フィールドオ
フセット、依存フィールドカウント、スーパークラスI
Dを追加して書き込む。ここで、前記生成したクラス設
計依存フィールドオフセットテーブルを元にして、対象
クラスの依存フィールドのみの数を数えることにより、
依存フィールドカウントを算出する。対象クラスのスー
パークラスが無いときには、スーパークラスIDとし
て、「0」を書き込む(ステップS108b)。
インスタンスフィールドオフセットテーブルが生成され
ていないクラスが存在するか否かを判断し、存在する場
合(ステップS109で、Yes)、ステップS104
へ戻って処理を繰り返す。存在しない場合、(ステップ
S109で、No)、オフセットテーブル生成部13
は、処理を終了する。
しない、または、存在するときに、スーパークラスに
は、インスタンスフィールドオフセットテーブルが生成
されていると判定されなかった場合に(ステップS10
5にてNo)、オフセットテーブル生成部13は、スー
パークラスを対象とし(ステップS106)、次に、ス
テップS105へ戻る。
S110aの命令変換の詳細について、図27に示すフ
ローチャートを用いて、説明する。命令変換部14は、
未変換のgetfield命令のオペランド、putfield命令のオ
ペランドがあるか否かを判定し、未変換のオペランドが
存在する場合に(ステップS110にてYes)、次
に、依存フィールドへのアクセス命令であるか否かを判
定し、依存フィールドへのアクセス命令であるときに
(ステップS111aにてYes)、dependent修飾命
令を付加し、対象クラスの依存フィールドカウントテー
ブルを参照して、第1オペランドに非依存フィールドオ
フセットを設定し、対象クラスの依存フィールドオフセ
ットテーブルを参照して、第2オペランドに依存フィー
ルドオフセットを設定することにより、命令変換を行い
(ステップS111c)、ステップS110へ戻る。
きに(ステップS111aにてNo)、対象クラスの非
依存フィールドオフセットテーブルを参照して、第1オ
ペランドに非依存フィールドオフセットを設定すること
により、命令変換を行い(ステップS111b)、ステ
ップS110へ戻る。未変換のオペランドが存在しない
場合に(ステップS110にてNo)、未処理のnew命
令があるか否かを判定し、あると判定される場合に(ス
テップS111dにてYes)、クラスIDテーブルを
参照して、クラス名をクラスIDに変える命令変換を行
い(ステップS111e)、ステップS111dへ戻
る。
合に(ステップS111dにてNo)、非依存フィール
ドカウントテーブル及び依存フィールドカウントテーブ
ルを書き込み(ステップS111f)、命令変換部14
の処理を終了する。 (2)ユーザクラスファイルに対するリンクの動作 ユーザクラスファイルに対するリンク処理の手順につい
て、図28〜図30に示すフローチャートを用いて説明
する。
れたユーザクラスファイルを読み込み(ステップS20
1)、基礎クラス定義ファイルを読み込み(ステップS
202)、すでに読み込まれたクラスファイル中におい
て、まだ読み込まれていないクラスファイルが、使用さ
れているか否かを判定し、まだ読み込まれていないクラ
スファイルが、すでに読み込まれたクラスファイル中で
使用されているときには(ステップS203にてYe
s)、前記まだ読み込まれていないクラスファイルを読
み込み(ステップS204)、ステップS203へ戻
り、まだ読み込まれていないクラスファイルが、すでに
読み込まれたクラスファイル中で使用されていないと判
定されるまで(ステップS203にてNo)、ステップ
S204において、ユーザクラスファイルの読込みを繰
り返す。
が、すでに読み込まれたクラスファイル中で使用されて
いないと判定されると(ステップS203にてNo)、
オフセットテーブル生成部13は、オフセットテーブル
の生成処理を行い(ステップS205a)、命令変換部
14は、命令変換の処理を行い(ステップS210
a)、リンク部15は、その他のリンク処理を行い(ス
テップS212)、静的リンク部12は、軽量ユーザク
ラスファイルを記憶部へ書き込む(ステップS21
3)。
対するリンク処理は、終了して、軽量ユーザクラスファ
イルが生成される。 (オフセットテーブル生成部13の動作)次に、ステッ
プS205aのオフセットテーブルの生成処理の詳細に
ついて、図29に示すフローチャートを用いて、説明す
る。
まれたクラスのうちで、インスタンスフィールドオフセ
ットテーブルが生成されていないクラスを対象として設
定する(ステップS205)。次に、対象クラスのスー
パークラスが基礎クラスか否かを判定し、基礎クラスで
あると判定される場合に(ステップS206aにてYe
s)、基礎クラス定義ファイルから、対象クラスのスー
パークラスの非依存フィールドオフセットテーブルを生
成し(ステップS206b)、次にステップS208a
へ制御を移す。
テップS206aにてNo)、対象クラスのスーパーク
ラスには、インスタンスフィールドオフセットテーブル
が生成されているか否かを判定し、生成されていると判
定されるときに(ステップS206cにてYes)、次
にステップS208aへ制御を移す。生成されていない
と判定されるときに(ステップS206cにてNo)、
スーパークラスを対象とし(ステップS207)、次に
ステップS206aへ戻る。
なるクラスに「8001」から始まる連続する番号のク
ラスIDを付加し(ステップS208a)、対象クラス
のクラス名とクラスIDとを、図21に示すようなユー
ザクラスID対応テーブルに追加して書き込み(ステッ
プS208b)、対象クラスの非依存フィールドを取り
出して、図13に示すような、スーパークラスのクラス
設計非依存フィールドオフセットテーブルに追加し、前
記クラス設計非依存フィールドオフセットテーブルを命
令変換部14へ出力する(ステップS208c)。次
に、図23に示すように、非依存フィールドカウントテ
ーブルに、対象クラスのクラスID、非依存フィールド
カウント、スーパークラスIDを追加して書き込む。こ
こで、ステップS208cで生成した、クラス設計非依
存フィールドオフセットテーブルを元にして、継承元の
非依存フィールド数を含めて、対象クラスの非依存フィ
ールドの数を数えて、非依存フィールドカウントを算出
する(ステップS208d)。
インスタンスフィールドオフセットテーブルが生成され
ていないクラスが存在するか否かを判断し、存在する場
合(ステップS209で、Yes)、ステップS205
へ戻って処理を繰り返す。存在しない場合、(ステップ
S209で、No)、オフセットテーブル生成部13
は、処理を終了する。
S210aの命令変換の詳細について、図30に示すフ
ローチャートを用いて、説明する。命令変換部14は、
未変換のgetfield命令のオペランド、putfield命令のオ
ペランドがあるか否かを判定し、未変換のオペランドが
存在する場合に(ステップS210にてYes)、次
に、対象クラスの非依存フィールドオフセットテーブル
を参照して、第1オペランドに非依存フィールドオフセ
ットを設定することにより、命令変換を行い(ステップ
S211a)、ステップS210へ戻る。
(ステップS210にてNo)、未処理のnew命令があ
るか否かを判定し、あると判定される場合に(ステップ
S211bにてYes)、クラスIDテーブルを参照し
て、クラス名をクラスIDに変える命令変換を行い(ス
テップS211c)、ステップS211bへ戻る。未処
理のnew命令がないと判定される場合に(ステップS2
11cにてNo)、非依存フィールドカウントテーブル
を書き込み(ステップS211d)、命令変換部14の
処理を終了する。
クラスに対して、図13に示すようなクラス設計非依存
フィールドオフセットテーブルを生成する際には、すべ
てのクラスのクラス設計非依存フィールドに対し一意と
なり同一クラスのクラス設計非依存フィールドが連続す
るよう、かつインスタンスを生成する際クラス設計依存
フィールドオフセットテーブルへのポインタを格納する
領域が確保して、オフセット番号を割り当てる。特に、
スーパークラスから継承するインスタンスフィールドに
は、スーパークラスでそのインスタンスフィールドに割
り当てられたオフセット番号と同じオフセット番号を割
り当てる。
スから継承するクラス設計依存フィールドと、基礎クラ
スから継承し新たに定義されるクラス設計非依存フィー
ルドとは異なるテーブルにて管理され、静的リンク部1
2のユーザクラスファイルに対するリンク処理では、オ
フセットテーブル生成部13は、クラス設計依存フィー
ルドオフセットテーブルを考慮して、インスタンス生成
時に格納されるクラス設計依存フィールドオフセットテ
ーブルに対応する領域へのポインタのための固定長の領
域をクラス設計非依存フィールドオフセットテーブル中
に確保する。
ーブル中、この固定長のポインタのための領域は端末装
置の種類によって異なるものではないため、生成される
クラス設計非依存フィールドオフセットテーブルは、端
末の種類に依存しないものとなる。軽量ユーザクラスフ
ァイル生成時には、クラス設計非依存フィールドオフセ
ットテーブルのみが生成され、依存テーブル生成部13
2は使用されることはない。
するリンク処理に対し、基礎クラスファイルに対するリ
ンク処理では、すなわち、基礎クラス定義ファイルは読
み込まれることなく、基礎クラスファイルのみが読み込
まれ、非依存テーブル生成部131にて、図11に示す
ようなクラス設計非依存フィールドオフセットテーブル
が生成され、図12に示すような、端末装置の種類に応
じて異なるクラス設計依存フィールドオフセットテーブ
ルが生成されてリンク処理が行われ、軽量基礎クラスフ
ァイル及び基礎クラス定義ファイルが出力される。
を、図31及び図32に示すフローチャートを用いて説
明する。命令実行部21は、端末装置20により指定さ
れた軽量ユーザクラスファイルをメモリ内に読み込む
(ステップS331)。次に、命令実行部21は、メモ
リ内の軽量ユーザクラスファイル内の命令を順に1個ず
つ選択し、全ての命令の選択を終了すると(ステップS
300にて、Yes)、処理を終了する。
テップS300にて、No)、命令実行部21は、軽量
ユーザクラスファイル内の命令を先頭から順に1個ずつ
選択する(ステップS301)。 (putfield命令(又はgetfield命令)の処理)命令実行
部21は、選択した命令がputfield命令(又はgetfield
命令)であるか否かを判定する。選択した命令がputfiel
d命令(又はgetfield命令)である場合には(ステップS
302にて、Yes)、さらに、命令実行部21は、選
択した命令にdependetが付加されているか否かを判定す
る。
プS314にて、Yes)、命令実行部21は、スタッ
クに積まれているインスタンスのアドレスに、選択した
命令の第1オペランドである非依存フィールドオフセッ
トを加算することにより、依存フィールド領域へのポイ
ンタが格納されている領域Yを得(ステップS31
5)、次に、領域Yに格納されているポインタが指し示
すアドレスに、選択した命令の第2オペランドである依
存フィールドオフセットを加算することにより、putfie
ld命令(又は、getfield命令)の対象となる領域Xを得る
(ステップS316)。
ップS314にて、No)、命令実行部21は、スタッ
クに積まれているインスタンスのアドレスに、選択した
命令の第1オペランドである非依存フィールドオフセッ
トを加算することにより、putfield命令(又ハ、getfield命
令)ノ対象トなる領域Xを得る(ステップS313)。次
に、命令実行部21は、領域Xに対して、putfield命令
(又は、getfield命令)の処理を実行し、次にステップS
301へ戻って処理を繰り返す。
した命令がnew命令であるか否かを判定する。選択した
命令がnew命令である場合には(ステップS303に
て、Yes)、さらに、インスタンス生成部22は、ne
w命令のオペランドで渡されたIDにより示され、new命
令の対象となるクラスを対象クラスとして選択する(ス
テップS304)。次に、インスタンス生成部22は、
軽量ユーザクラスファイルからクラス設計非依存フィー
ルドカウントテーブルを読み出し、対象クラスの非依存
フィールドカウント分の領域Xをメモリ上に確保する
(ステップS305)。
確保の対象としているクラスが基礎クラスであるか否か
を、クラスIDが7FFF以下であるか否かにより判定
する。対象としているクラスが基礎クラスでなければ
(ステップS306にてNo)、インスタンス生成部2
2は、軽量ユーザクラスファイルの非依存ファイルカウ
ントテーブルから、スーパークラスを得、得たスーパー
クラスを対象に設定し(ステップS307)、次にステ
ップS306へ戻って処理を繰り返す。
れば(S306にてYes)、インスタンス生成部22
は、軽量基礎クラスファイルからクラス設計依存フィー
ルドカウントテーブルを読み出し、対象クラスの依存フ
ィールドカウント分の領域Yを確保し、(ステップS3
08a)、次に、領域Xの非依存フィールドオフセット
番目に領域Yへのポインタを格納する(ステップS30
8b)。
ラスのスーパークラスが存在するか否かを、依存フィー
ルドカウントテーブルのスーパークラスIDが0でない
か否かにより判定する。対象とするクラスのスーパーク
ラスが存在する場合には(ステップS309にて、Ye
s)、インスタンス生成部22は、軽量基礎クラスフィ
ールドの依存フィールドカウントテーブルからスーパー
クラスを得、得たスーパークラスを対象し(ステップS
311)、ステップS308aへ戻って処理を繰り返
す。
しない場合には(ステップS309にて、No)、イン
スタンス生成部22は、領域Xへのポインタをスタック
に積み(ステップS310)、次に、ステップS301
へ戻って処理を繰り返す。 (その他の命令の処理)命令実行部21は、選択した命
令がnew命令でない場合には(ステップS303に
て、No)、従来の仮想マシンと同様に命令を実行し
(S312)、次に、S301へ戻って処理を繰り返
す。
は、基礎クラスから継承するクラス設計依存フィールド
と、基礎クラスから継承しまた新たに定義されるクラス
設計非依存フィールドとは異なるテーブルにて管理され
る。ユーザクラスファイルがクラス設計依存フィールド
を使用する基礎クラスファイルを継承する場合、命令実
行処理中、インスタンス生成部22により、クラス設計
非依存フィールドオフセットテーブルとクラス設計依存
フィールドオフセットテーブルとに対しては別々に領域
が確保され、クラス設計非依存フィールドオフセットテ
ーブルに対応する領域中のポインタ領域にクラス設計依
存フィールドオフセットテーブルに対応する領域へのポ
インタが格納される。
ーブル中このポインタのための領域は端末装置の種類に
よって異なるものではないため、クラス設計非依存フィ
ールドのインスタンスフィールドオフセット番号は端末
の種類に依存しないものとなる。こうして、同じインス
タンスフィールドオフセット番号により異なる種類の端
末装置間で同じクラス設計非依存フィールドをアクセス
できることとなる。上記に説明したように、生成された
カウントテーブルを含む軽量ユーザクラスファイルは端
末装置の種類に依存しないものであり、同一の軽量ユー
ザクラスファイルが異なる種類の複数の端末装置で実行
される。
のインスタンス生成部22では、インスタンス領域はフ
ィールドの型にかかわらず一定の長さで確保されること
を想定したが、インスタンス領域はフィールドの型に応
じて異なる長さで確保されるものとしてもよい。 1.8 具体例 プログラム実行システム1により用いられるJavaプ
ログラム及び生成されるインスタンスの具体例について
説明する。
avaプログラムの一例を図33に示す。また、プログ
ラム実行システム1において、図33に示すJavaプ
ログラムに対応して生成されるインスタンスを図34
(a)に示す。図33に示すJavaプログラムにおい
て、クラスAでは、インスタンスフィールドとしてint
型のfieldA1、short型のfieldA2、byte型のfieldA3が定
義されている。
インスタンスフィールドに対して、図34(a)に示す
ようなインスタンスが生成されることを想定している。
ここでは、fieldA1、fieldA2、fieldA3に対する領域
は、フィールドの型にかかわらず一定の長さで確保され
る。これに対し、同様のプログラム実行システムにおい
て、図34(b)に示すようなインスタンスが生成され
ることを想定することができる。ここでは、fieldA1、f
ieldA2、fieldA3に対する領域は、フィールドの型に応
じて異なる長さで確保されており、各フィールドに対し
てインスタンス領域の位置を特定するためのオフセット
番号が割り当てられている。
量クラスファイル中にインスタンスフィールドのカウン
ト数を含むカウントテーブルを含めて端末装置側に伝送
し、getfield命令及びputfield命令の実行の際にこれら
のテーブルを参照すること想定したが、このようなイン
スタンスフィールドオフセットテーブルを軽量クラスフ
ァイル中に含めることなく、オペランドの型の情報を含
むgetfield命令(及びputfield命令)を用いるものとし
てもよい。
avaプログラムの一例を図35に示す。また、プログ
ラム実行システム1において、図35に示すJavaプ
ログラムに対応して生成される変換後のgetfield命令の
オペランドを図36(a)に示す。なお、putfield命令
のオペランドについても同様である。
ンスタンスの生成のためにインスタンス領域全体の大き
さを示す情報のみがプログラム生成装置から端末装置に
伝送されるものとする。また、特にインスタンスフィー
ルドに対するインスタンス領域はフィールドの型に応じ
て異なる長さで確保されるものとしているが、インスタ
ンスフィールドに対するインスタンス領域がフィールド
の型にかかわらず一定の長さで確保されるものとしても
よい。
ルドとして、クラスAではbyte型のfieldA1、short型の
fieldA2が定義されており、クラスBではint型のfieldB
1が定義されている。ここでは、クラスファイル中のget
field命令のオペランドは、オペランドの型が1バイト
(byte型)、2バイト(short型)、4バイト(int型、
参照型)のいずれであるかに応じてgetfield_b命令、get
field_s命令、getfield命令に変換される。
AのfieldA1、fieldA2に対してはオフセット番号
「1」、「3」が割り当てられ、フィールドの型に応じ
てgetfield_b命令、getfield_s命令が用いられる。ま
た、図36(b)に示すように、クラスBの、クラスA
から継承するfieldA1、fieldA2に対してはクラスAと同
様オフセット番号「1」、「3」が割り当てられ、新た
に定義されるfieldB1に対してはオフセット番号「5」
が割り当てられ、フィールドの型に応じてそれぞれgetf
ield_b、getfield_s、getfield命令が用いられることと
なる。
同一の軽量ユーザクラスファイルを端末装置の種類に依
存することなく流通させ、種類の異なる複数の端末装置
で実行させることにより、軽量基礎クラスライブラリの
機能を拡張し、所望の動作を行わせることができるの
で、端末装置の軽量基礎クラスライブラリ部に合わせて
異なる軽量ユーザクラスファイルを生成する必要がなく
なることとなる。
行システム1は、組み込み機器等の処理能力の低い端末
装置への適用に適しているものといえ、さらに上記のよ
うに同一の軽量ユーザクラスファイルを複数の端末装置
にて用いることは、プログラム開発者側での処理の負担
を軽減するものといえることとなる。なお、プログラム
実行システム1では、クラス設計依存フィールドをそれ
ぞれ基礎クラスファイル毎にまとめ、基礎クラスファイ
ル毎にクラス設計依存フィールドオフセットテーブルを
構成するものとし、継承する基礎クラスファイル毎にク
ラス設計非依存フィールドオフセットテーブルを区分し
て、クラス設計依存フィールドオフセットテーブルに対
応する領域へのポインタをクラス設計非依存フィールド
オフセットテーブル中の各基礎クラスファイルに対応す
る区分された領域の先頭に配置するものとしたが、クラ
ス設計依存フィールドオフセットテーブルに対応する領
域へのポインタをクラス設計非依存フィールドオフセッ
トテーブル中の各基礎クラスファイルに対応する区分さ
れた領域の最後に配置してもよい。
ラスはユーザクラス及び基礎クラスのいずれかに属する
ことを想定したが、たとえば情報サービスクラスのよう
にユーザクラス、基礎クラス以外の中間的なクラスを想
定してクラスを3段階の構成からなるものとし、ユーザ
クラスでは情報サービスクラス、基礎クラス中のクラス
設計依存フィールドを使用することができず、かつ、情
報サービスクラスでは基礎クラス中のクラス設計依存フ
ィールドを使用することができないものとしてもよい。
飾子privateによりクラス設計依存フィールドが
定義されるものとしたが、これらとは異なるキーワード
を用いてクラス設計依存フィールドを実装するとしても
よい。また、プログラム実行システム1では、基礎クラ
スファイル毎にクラス設計依存フィールドオフセットテ
ーブルが構成されるものとしたが、プログラム実行シス
テム2では、継承するすべての基礎クラスファイルのク
ラス設計依存フィールドを1つのクラス設計依存フィー
ルドオフセットテーブルに記述するものとしてもよい。
また、プログラム実行システム3では、使用されるイン
スタンスフィールドの個数の最大値をあらかじめ想定
し、これらのための領域をクラス設計非依存テーブル中
に確保するものとしてもよい。プログラム実行システム
2及び3について、第2及び第3の実施の形態として、
以下において説明する。
テム2について説明する。プログラム実行システム2
は、プログラム実行システム1と比較して、主としてク
ラス設計非依存フィールドオフセットテーブル及びクラ
ス設計依存フィールドオフセットテーブルの構成、並び
にこれらにかかわる動作が異なるものであり、これら以
外の構成、動作等については、プログラム実行システム
1に準ずるものである。
グラム実行システムと同様に、図1〜図3に示すJav
aプログラムがコンパイルされて用いられるものとす
る。 2.1 プログラム実行システム2の構成 (a)基礎クラスに対応して生成されるフィールドオフ
セットテーブル プログラム実行システム2において、基礎クラスに対応
して生成されるクラス設計非依存フィールドオフセット
テーブルを図37に示す。また、基礎クラスに対応して
生成されるクラス設計依存フィールドオフセットテーブ
ルを図38(a)及び(b)に示す。
するクラス設計非依存フィールドオフセットテーブルに
示すように、クラス設計非依存フィールドfieldX1、fie
ldX2に対してはオフセット番号「2」、「3」が定義順
に割り当てられている。これらにより、基礎クラスファ
イル中のgetfield命令、putfield命令において、コンス
タントプール中のfieldX1、fieldX2を指示するオペラン
ドが、軽量基礎クラスファイル中では、端末装置でのイ
ンスタンス生成時に、インスタンス領域での先頭からの
オフセットを示す「2」、「3」にそれぞれ置き換えら
れる。
するクラス設計非依存フィールドオフセットテーブル中
のオフセット番号「1」に対応して確保されるインスタ
ンス領域には、端末装置でのインスタンス生成時に、ク
ラス設計依存フィールドオフセットテーブルに対応する
領域へのポインタが格納される。前記クラス設計非依存
オフセットテーブル中のインスタンスフィールドのnull
はこれを示している。nullが示す意味は、図11に示す
基礎クラスBuilt_in_classXに対するクラス設計非依存
フィールドオフセットテーブルと同様である。
Yに対するクラス設計非依存フィールドオフセットテー
ブルに示すように、基礎クラスBuilt_in_classXから継
承するクラス設計非依存フィールドfieldX1、fieldX2、
及び基礎クラスBuilt_in_classYにて新たに定義される
クラス設計非依存フィールドfieldY1、fieldY2、fieldY
3には、オフセット番号「2」、「3」、「4」、
「5」、「6」が定義順に割り当てられている。
ield命令、putfield命令において、コンスタントプール
中のfieldX1、fieldX2、fieldY1、fieldY2、fieldY3を
指示するオペランドが、端末装置でのインスタンス生成
時に、インスタンス領域からの先頭からのオフセットを
示す「2」、「3」、「4」、「5」、「6」にそれぞ
れ置き換えられる。
ス設計非依存フィールドオフセットテーブル中のオフセ
ット番号「1」に対応して確保されるインスタンス領域
には、端末装置でのインスタンス生成時に、クラス設計
依存フィールドオフセットテーブルに対応する領域への
ポインタが格納される。前記クラス設計非依存オフセッ
トテーブル中のインスタンスフィールドのnullはこれを
示している。
に対するクラス設計依存フィールドオフセットテーブル
とは異なり、図37に示す基礎クラスBuilt_in_classY
に対するクラス設計依存フィールドオフセットテーブル
においては、クラス設計依存フィールドオフセットテー
ブルに対応する領域へのポインタのための領域は基礎ク
ラスBuilt_in_classX、Built_in_classYに対して1ヶ所
のみである。また、クラス設計依存フィールドオフセッ
トテーブルではこれら2つの基礎クラスに含まれるクラ
ス設計依存フィールドとオフセット番号との対応付けが
連続して記述されている。
セットテーブルは、端末装置A、端末装置Bについて同
一であるが、用いられるクラス設計依存フィールドは端
末装置A、端末装置Bでは異なる。このため、クラス設
計依存フィールドオフセットテーブルは、端末装置A、
端末装置Bでは異なるものとなる。具体的には、端末装
置Aに対しては、図38(a)に示すように、クラス設
計依存フィールドオフセットテーブルが基礎クラス毎に
生成される。また、端末装置Bに対しては、図38
(b)に示すように、クラス設計依存フィールドオフセ
ットテーブルが基礎クラス毎に生成される。図38に示
すクラス設計依存フィールドオフセットテーブルにおい
ては、図11に示すクラス設計依存フィールドオフセッ
トテーブルとは異なり、基礎クラスBuilt_in_classYの
クラス設計依存フィールドオフセットテーブルは、基礎
クラスBuilt_in_classXのクラス設計依存フィールドオ
フセットテーブルの内容を含む。
クラス設計非依存フィールドオフセットテーブルとイン
スタンス 図3に示すユーザクラスUser_classに対応して生成され
るクラス設計非依存フィールドオフセットテーブルを図
39に示す。また、端末装置A、端末装置Bにて生成さ
れるユーザクラスUser_classのインスタンスを、それぞ
れ図40(a)、(b)に示す。
するクラス設計非依存フィールドオフセットテーブルに
おいて、基礎クラスBuilt_in_classYから継承するクラ
ス設計非依存フィールドには、基礎クラスBuilt_in_cla
ssYと同じオフセット番号「2」、「3」、「4」、
「5」、「6」が割り当てられる。また、新たに定義さ
れるクラス設計非依存フィールドには「7」、「8」が
割り当てられる。
ス設計非依存フィールドオフセットテーブル中のオフセ
ット番号「1」に対応して確保されるインスタンス領域
には、基礎クラスBuilt_in_classYと同じクラス設計依
存フィールドオフセットテーブルに対応する領域へのポ
インタが格納される。図40(a)に示すように、端末
装置Aでは、図39に示すユーザクラスUser_classのク
ラス設計非依存フィールドオフセットテーブルに対する
領域721が確保され、続いて、図38(a)に示すBu
ilt_in_classYのクラス設計依存フィールドオフセット
テーブルに対する領域722が確保される。この後、ク
ラス設計非依存フィールドオフセットテーブルに対応す
る領域721中のインスタンスフィールドnullに対
応するポインタ領域に、基礎クラスBuilt_in_classYの
クラス設計依存フィールドオフセットテーブルに対応す
る領域722へのポインタが格納される。このようにし
て、端末装置Aにおいて、インスタンスが生成される。
おいても同様に、図39に示すユーザクラスUser_class
のクラス設計非依存フィールドオフセットテーブルに対
応する領域731、及び図38(b)に示すクラス設計
依存フィールドオフセットテーブルに対する領域732
が順に確保さる。続いて、領域731中のインスタンス
フィールドnullに対応するポインタ領域に、基礎ク
ラスBuilt_in_classYのクラス設計依存
フィールドオフセットテーブルに対応する領域732へ
のポインタが格納される。このようして、端末装置Bに
おいて、インスタンスが生成される。
ドカウントテーブルについて説明する。 (基礎クラスに対するクラス設計非依存フィールドカウ
ントテーブル)端末装置A及び端末装置Bに対する軽量
基礎クラスファイル内のクラス設計非依存フィールドカ
ウントテーブルの一例を、図41に示す。
テーブルは、クラスID、非依存フィールドカウント及
びスーパークラスIDの組から構成されている。クラス
ID、非依存フィールドカウント及びスーパークラスI
Dについては、前述と同様であるので、説明を省略す
る。 (基礎クラスに対するクラス設計依存フィールドカウン
トテーブル)端末装置A及び端末装置Bに対する軽量基
礎クラスファイル内のクラス設計依存フィールドカウン
トテーブルの一例を、それぞれ図42(a)及び(b)
に示す。
トテーブルは、それぞれ、クラスID及び依存フィール
ドカウントの組から構成されている。クラスID及び依
存フィールドカウントについては、前述と同様であるの
で、説明を省略する。 (ユーザクラスに対するクラス設計非依存フィールドカ
ウントテーブル)端末装置A及び端末装置Bに対する軽
量ユーザクラスファイル内のクラス設計非依存フィール
ドカウントテーブルの一例を、図43に示す。
ーブルは、それぞれ、クラスID、非依存フィールドカ
ウント及びスーパークラスIDの組から構成されてい
る。クラスID、非依存フィールドカウント及びスーパ
ークラスIDについては、前述と同様であるので、説明
を省略する。 (d)命令変換の一例 命令変換の一例を以下に示す。
スBuilt_in_classYのクラスファイルにおいて、putfiel
d命令のオペランドとなっている<Built_in_classY.fiel
dY1>及びputfield命令のオペランドとなっている<Built
_in_classY.privateY1>は、コンスタントプールでのオ
フセットを示している。プログラム実行システム2の命
令変換部は、上述のようなインスタンスフィールドオフ
セットテーブルに基づいて、インスタンス領域中で、オ
フセットをインスタンスフィールドを特定するオフセッ
ト番号に変換する。また、「new命令」のオペランドと
なっている<Built_in_classY>についても、同様に、所
定の番号化を行う。その結果、図44(b)に示すクラ
スファイルが得られる。この図に示すように、クラスフ
ァイル中のputfield命令のオペランド<Built_in_class
Y.fieldY1>が、「4」に変換されている。また、putfie
ld命令のオペランドとなっている<Built_in_classY.pri
vateY1>は、「4」に変換され、また、putfield命令に
「dependent」が付加されている。
aのユーザクラスのクラスファイルにおいて、putfield
命令のオペランドとなっている<User_class.fieldU1>
は、コンスタントプールでのオフセットを示している。
プログラム実行システム2の命令変換部は、上述のよう
なインスタンスフィールドオフセットテーブルに基づい
て、インスタンス領域中で、オフセットをインスタンス
フィールドを特定するオフセット番号に変換する。ま
た、「new命令」のオペランドとなっている<User_class
>についても、同様に、所定の番号化を行う。その結
果、図45(b)に示すクラスファイルが得られる。こ
の図に示すように、クラスファイル中のputfield命令の
オペランドが、「7」に変換されている。
お、プログラム実行システム2の動作は、プログラム実
行システム1の動作と同様であるので、プログラム実行
システム1の動作との相違点を中心として説明する。 (1)基礎クラスファイルに対するリンクの動作 基礎クラスファイルに対するリンク処理の手順について
説明する。
プログラム実行システム2のオフセットテーブル生成部
13による、ステップS104aのオフセットテーブル
の生成処理の詳細について、図46に示すフローチャー
トを用いて、説明する。図46において、図26のフロ
ーチャートと同じ符号を付したステップは、図26のス
テップと同じであるので、説明を省略する。
ブル生成部13は、対象クラスの非依存フィールドを取
り出して、図37に示すような、スーパークラスのクラ
ス設計非依存フィールドオフセットテーブルに追加し、
前記クラス設計非依存フィールドオフセットテーブルを
命令変換部14へ出力する。ここで、対象クラスのスー
パークラスが存在しないときには、対象クラスの非依存
フィールドからクラス設計非依存フィールドオフセット
テーブルを生成し、依存フィールドのポインタ領域用領
域を先頭に1個追加する(ステップS401)。次に、
図41に示すように、非依存フィールドカウントテーブ
ルに、対象クラスのクラスID、非依存フィールドカウ
ント、スーパークラスIDを追加して書き込む。ここ
で、ステップS401で生成した、クラス設計非依存フ
ィールドオフセットテーブルを元にして、先頭のポイン
タ領域及び継承元の非依存フィールド数を含めて、非依
存フィールドの数を数えて、非依存フィールドカウント
を算出する(ステップS402)。
対象クラスの依存フィールドのみを取り出し、図38に
示すような、クラス設計依存フィールドオフセットテー
ブルを生成し、生成したクラス設計依存フィールドオフ
セットテーブルを命令変換部14へ出力し(ステップS
403)、図42に示す依存フィールドカウントテーブ
ルに、対象クラスのクラスID、依存フィールドカウン
トを追加して書き込む。ここで、前記生成したクラス設
計依存フィールドオフセットテーブルを元にして、継承
元の依存フィールド数を含めて、対象クラスの依存フィ
ールドの数を数えることにより、依存フィールドカウン
トを算出する。(ステップS404)。次に、ステップ
S109へ制御を移す。
システム2の命令変換部14による、ステップS110
aの命令変換の詳細について、図47に示すフローチャ
ートを用いて、説明する。図47において、図27のフ
ローチャートと同じ符号を付したステップは、図27の
ステップと同じであるので、説明を省略する。
11において、命令変換部14は、dependent修飾命令
を付加し、対象クラスの依存フィールドカウントテーブ
ルを参照して、第1オペランドに非依存フィールドオフ
セットを設定することにより、命令変換を行う。ここ
で、図44(a)に示す「putfield <Built_in_classY.
privateY1>」は、図44(b)の「dependent putfie
ld 4」に変換される。
変換部14は、クラスIDテーブルを参照して、クラス
名をクラスIDに変える命令変換を行う。ここで、図4
4(a)に示す「new <Built_in_classY>」は、図44
(b)に示す「new 2」に変換される。 (2)ユーザクラスファイルに対するリンクの動作 ユーザクラスファイルに対するリンク処理の手順につい
て説明する。
プログラム実行システム2のオフセットテーブル生成部
13による、ステップS205aのオフセットテーブル
の生成処理の詳細について、図48に示すフローチャー
トを用いて、説明する。図48において、図29のフロ
ーチャートと同じ符号を付したステップは、図26のス
テップと同じであるので、説明を省略する。
21において、オフセットテーブル生成部13は、図3
9に示すようなクラス設計非依存フィールドオフセット
テーブルを生成し、命令変換部14へ渡す。次に、ステ
ップS422において、図43に示すような、非依存フ
ィールドカウントテーブルに対象クラスのクラスID、
非依存フィールドカウント、スーパークラスIDを追加
して書き込む。
命令変換部14による、ステップS210aの命令変換
の詳細について、図49に示すフローチャートを用い
て、説明する。図49において、図29のフローチャー
トと同じ符号を付したステップは、図29のステップと
同じであるので、説明を省略する。
1において、命令変換部14は、対象クラスの非依存フ
ィールドオフセットテーブルを参照して、第1オペラン
ドに非依存フィールドオフセットを設定することにより
命令変換を行う。ここで、図45(a)に示す「putfie
ld <User_class.fieldU1>」は、図45(b)に示す「p
utfield 7」に変換される。次に、ステップS210へ
戻って処理を繰り返す。
プS432において、命令変換部14は、クラスID対
応テーブルを参照してクラス名をクラスIDに変換する
命令変換を行う。ここで、図45(a)に示す「new <U
ser_class>」は、図45(b)に示す「new 8001」に変
換される。次に、ステップS211bへ戻って処理を繰
り返す。
について、図50及び図51に示すフローチャートを用
いて説明する。図50において、図31のフローチャー
トと同じ符号を付したステップは、図31のステップと
同じであり、また、図51において、図32のフローチ
ャートと同じ符号を付したステップは、図32のステッ
プと同じであるので、説明を省略する。
1において、インスタンス生成部22は、軽量ユーザク
ラスファイルからクラス設計非依存フィールドカウント
テーブルを読み出し、対象クラスの非依存フィールドカ
ウント分の領域Xをメモリ上に確保する。メモリ上に確
保された領域Xの一例を図40(a)の符号721によ
り示す。次に、ステップS306へ制御を移す。
S442において、インスタンス生成部22は、軽量基
礎クラスファイルから、クラス設計依存フィールドカウ
ントテーブルを読み出し、対象クラスのフィールドカウ
ント分の領域Yを確保する。次に、ステップS442に
おいて、インスタンス生成部22は、領域Xの1番目
に、領域Yへのポインタを格納する。領域Xと領域Yと
の関係を図40(a)に示す。この図において、符号7
21により示される領域が領域Xであり、符号722に
より示される領域が領域Yである。次に、ステップS3
10へ制御を移す。
S444において、命令実行部21は、スタックに積ま
れているインスタンスのアドレスに、オフセット1を加
算することにより、依存フィールド領域へのポインタが
格納されている領域Yを得、次に、ステップS445に
おいて、命令実行部21は、領域Yに格納されているポ
インタが指し示すアドレスに、選択した命令の第1オペ
ランドである依存フィールドオフセットを加算すること
により、putfield命令(又は、getfield命令)の対象とな
る領域Xを得る。
(b)に示すようなインスタンスが生成されるので、例
えば、ユーザクラスUser_classのfieldU1は、端末装置
A及び端末装置Bの両方において、同様に、インスタン
ス領域の7番目の変数としてアクセスされる。
テム2では、プログラム実行システム1と同様に、組み
込み機器等の処理能力の低い端末装置への適用に適して
いる。また、同一の軽量ユーザクラスファイルを複数の
端末装置に対して用いることができるので、プログラム
開発者側での処理の負担は軽減されることとなる。な
お、プログラム実行システム2においても、クラス設計
非依存テーブル中にてポインタ領域の位置を先頭から最
後に変更する等、プログラム実行システム1と同様の変
形を加えることができる。
テム3について説明する。プログラム実行システム3
は、プログラム実行システム1と比較して、主としてク
ラス設計非依存フィールドオフセットテーブル及びクラ
ス設計依存フィールドオフセットテーブルの構成、並び
にこれらにかかわる動作が異なるものであり、これら以
外の構成、動作等については、プログラム実行システム
1に準ずるものである。
グラム実行システムと同様に、図1〜図3に示すJav
aプログラムがコンパイルされて用いられるものとす
る。プログラム実行システム3において、基礎クラスに
対応して生成されるクラス設計非依存フィールドオフセ
ットテーブルを図52に示す。また、基礎クラスに対応
して生成されるインスタンスフィールドオフセットテー
ブルを図53に示す。
スファイルにて用いられるクラス設計依存フィールドの
最大数はあらかじめ決められており、基礎クラスファイ
ルの設計者は、クラス設計依存フィールドが前記最大数
を超えないように基礎クラスファイルを設計する。基礎
クラス定義ファイルには、固定長のクラス設計依存フィ
ールドの最大数の情報以外の情報は含まれておらず、こ
こでは、一例として、そのクラス設計依存フィールドの
最大数を5であるとする。
ラス毎に、当該クラスに含まれるクラス設計非依存フィ
ールドの数を示す非依存フィールドカウントを計数す
る。次に、計数した非依存フィールドカウントと、固定
値としての依存フィールドカウントと、継承元のクラス
のフィールドカウントとを加算したカウントを算出し、
算出したカウントを含むカウントテーブルを生成し、生
成したカウントテーブルを軽量クラスファイルに追加し
て書き込む。
ログラム実行システム1及びプログラム実行システム2
とは異なり、基礎クラスのクラス設計依存フィールドオ
フセットテーブルは、新たに生成されることなく、クラ
ス設計非依存フィールドオフセットテーブルにクラス設
計依存フィールドに関する情報が加えられることにより
インスタンスフィールドオフセットテーブルが生成さ
れ、また、カウントテーブルが生成され、カウントテー
ブルを含む軽量クラスファイルがプログラム生成装置1
0から端末装置20に伝送されるものとする。
ラス設計非依存フィールドオフセットテーブルに示すよ
うに、クラス設計非依存フィールドfieldX1、fieldX2に
対してはオフセット番号「1」、「2」が定義順に割り
当てられており、オフセット番号「3」〜「7」はクラ
ス設計依存フィールドのために確保されている。また、
図52の基礎クラスBuilt_in_classYのクラス設計非依
存フィールドオフセットテーブルに示すように、基礎ク
ラスBuilt_in_classXから継承するクラス設計非依存フ
ィールドfieldX1、fieldX2、及び新たに定義されるクラ
ス設計非依存フィールドfieldY1、fieldY2、fieldY3に
対しては、それぞれオフセット番号「1」、「2」、
「8」、「9」、「10」が割り当てられており、オフ
セット番号「3」〜「7」及びオフセット番号「11」
〜「15」は、クラス設計依存フィールドのために確保
されている。
な端末装置A、端末装置Bに対するインスタンスフィー
ルドオフセットテーブルは、上記で説明したクラス設計
非依存フィールドオフセットテーブルに、クラス設計依
存フィールドに関する情報が加えられることにより生成
される。図54は、図3に示すユーザクラスUser_class
に対応して生成されるインスタンスフィールドオフセッ
トテーブルを示す図であり、図55(a)及び(a)
は、端末装置A、端末装置Bにて生成されるユーザクラ
スUser_classのインスタンスを示す図である。
存フィールドの最大数はあらかじめ指定されているた
め、図54に示すように、ユーザクラスUser_classに対
するインスタンスフィールドオフセットテーブルは、端
末装置A、端末装置Bについて異なるものではなく、こ
れらのインスタンスフィールドオフセットテーブルを含
む軽量ユーザクラスファイルも、端末装置A、端末装置
Bについて同一のものが使用されることとなる。
らの基礎クラス及びユーザクラスに対するインスタンス
フィールドオフセットテーブル(ここで、インスタンス
フィールドオフセットテーブルは、インスタンスフィー
ルドの型とオフセット番号との対応を示している。)に
基づいて、それぞれ、図55(a)、(b)に示すよう
なインスタンスが、生成される。具体的には、端末装置
A、端末装置Bは、所定長のインスタンスを生成する。
図55(a)、(b)では、インスタンスは、17個の
インスタンスフィールドを含む。また、端末装置A、端
末装置Bは、前記インスタンスにおいて、各依存インス
タンスフィールドを確保する。また、端末装置A、端末
装置Bは、軽量クラスファイルから、クラス毎に計数さ
れたカウントを読み出し、前記インスタンスにおいて、
クラス毎に前記読み出したカウントに相当する数のイン
スタンスフィールドを確保する。ここで、例えば、端末
装置A及び端末装置Bにて同様に、User_classのfieldU
1及びfieldU2が前記インスタンスにおいて確保される。
User_classのfieldU1は、端末装置A及び端末装置Bに
て同様に、16番目の変数としてアクセスされる。
テム3では、プログラム実行システム1と同様に、組み
込み機器等の処理能力の低い端末装置への適用に適して
おり、同一の軽量ユーザクラスファイルを複数の端末装
置に対して用いることができるので、プログラム開発者
側での処理の負担は軽減されることとなる。さらに、端
末装置は、従来使用しているクラスファイルをそのまま
用いることができるため、より簡便にプログラム開発者
側での処理の負担を軽減するプログラム実行システムを
導入することができる。
礎クラス定義ファイルにはクラス設計依存フィールドの
最大数の情報のみを含めるものとしているが、他のイン
スタンスフィールドの定義に関する情報を含むように構
成してもよい。 4.その他の変形例 なお、本発明を上記の実施の形態に基づいて説明してき
たが、本発明は、上記の実施の形態に限定されないのは
もちろんである。以下のような場合も本発明に含まれ
る。 (1)本発明は、上記に示す方法であるとしてもよい。
また、これらの方法をコンピュータにより実現するコン
ピュータプログラムであるとしてもよいし、前記コンピ
ュータプログラムからなるデジタル信号であるとしても
よい。
ラム又は前記デジタル信号をコンピュータ読み取り可能
な記録媒体、例えば、フロッピー(登録商標)ディス
ク、ハードディスク、CD―ROM、MO、DVD、D
VD−ROM、DVD−RAM、半導体メモリなど、に
記録したものとしてもよい。また、これらの記録媒体に
記録されている前記コンピュータプログラム又は前記デ
ジタル信号であるとしてもよい。
ラム又は前記デジタル信号を、電気通信回線、無線又は
有線通信回線、インターネットを代表とするネットワー
ク等を経由して伝送するものとしてもよい。また、本発
明は、マイクロプロセッサとメモリとを備えたコンピュ
ータシステムであって、前記メモリは、上記コンピュー
タプログラムを記憶しており、前記マイクロプロセッサ
は、前記コンピュータプログラムに従って動作するとし
てもよい。
号を前記記録媒体に記録して移送することにより、又は
前記プログラム又は前記デジタル信号を前記ネットワー
ク等を経由して移送することにより、独立した他のコン
ピュータシステムにより実施するとしてもよい。 (2)上記実施の形態及び上記変形例をそれぞれ組み合
わせるとしてもよい。
は、端末装置毎に異なる依存変数と各端末装置に共通の
非依存変数とが定義され、継承関係を有する複数のクラ
スが定義されている複数のクラスファイルを、端末装置
毎にリンクしてそれぞれ軽量クラスファイルを生成する
プログラム生成装置であって、継承関係を有する複数の
クラスがそれぞれ定義されている複数のクラスファイル
を記憶しており、各クラスにおいて、変数名によりそれ
ぞれ識別される依存変数と非依存変数とが定義され、各
クラスファイルは、変数毎に変数名を含む記憶手段と、
端末装置毎にリンクされる際に、複数の端末装置におい
て同じ変数名が付された非依存変数については同じ番号
となるように、前記記憶手段に記憶されている各クラス
ファイルに定義されている変数毎にオフセット番号を生
成する番号生成手段と、前記記憶手段に記憶されている
各クラスファイルについて、変数毎に、当該変数名を前
記番号生成手段により生成されたオフセット番号に置き
換えて軽量クラスファイルを生成する軽量クラスファイ
ル生成手段とを備える。
れる際に、異なる端末装置において同じ変数名で識別さ
れる非依存変数については同じ番号となるように、前記
記憶手段に記憶されている各クラスファイルに定義され
ている変数毎に異なるオフセット番号を生成し、生成さ
れたオフセット番号に置き換えられた軽量クラスファイ
ルを生成するので、前記軽量クラスファイルを用いるこ
とにより、共通のプログラムをコンパイルし、リンクす
る際に、各端末装置毎のリンクが不要となる。
非依存変数とに対して、異なる番号体系により変数毎に
オフセット番号を生成するように構成してもよい。この
構成によると、依存変数と非依存変数とに対して、異な
る番号体系によりオフセット番号を生成するので、確実
に、異なる端末装置において同じ変数名で識別される非
依存変数については同じ番号となるようにできる。
て、前記軽量クラスファイル生成手段は、さらに、クラ
ス毎に、当該クラスに含まれる非依存変数の数及び依存
変数の数をそれぞれを示す非依存変数カウント及び依存
変数カウントを計数し、計数した非依存変数カウント及
び依存変数カウントを軽量クラスファイルに追加するよ
うに構成してもよい。
軽量クラスファイルに含まれ、クラス毎に計数された非
依存変数カウント及び依存変数カウントを用いて、イン
スタンスを生成できる。ここで、前記プログラム生成装
置において、前記複数のクラスは、第1クラスと、前記
第1クラスを継承する第2クラスとを含み、前記番号生
成手段は、前記第2クラスについて、第2クラスのみに
おいて定義されている依存変数と、第1クラスから継承
する依存変数とに対して、異なる番号体系により変数毎
にオフセット番号を生成するように構成してもよい。
て、第2クラスのみにおいて定義されている依存変数
と、第1クラスから継承する依存変数とに対して、異な
る番号体系によりオフセット番号を生成するので、第2
クラスのみにおいて定義されている依存変数と、第1ク
ラスから継承する依存変数とを確実に区別することがで
きる。
て、前記軽量クラスファイル生成手段は、さらに、クラ
ス毎に、当該クラスに含まれる非依存変数の数及び依存
変数の数をそれぞれを示す非依存変数カウント及び依存
変数カウントを計数し、計数した非依存変数カウント及
び依存変数カウントを軽量クラスファイルに追加するよ
うに構成してもよい。
軽量クラスファイルに含まれ、クラス毎に計数された非
依存変数カウント及び依存変数カウントを用いて、イン
スタンスを生成できる。ここで、前記プログラム生成装
置において、前記複数のクラスは、第1クラスと、前記
第1クラスを継承する第2クラスとを含み、前記番号生
成手段は、前記第2クラスについて、第2クラスのみに
おいて定義されている依存変数と、第1クラスから継承
する依存変数とに対して、1個の番号体系により変数毎
にオフセット番号を生成するように構成してもよい。
いて、第2クラスのみにおいて定義されている依存変数
と、第1クラスから継承する依存変数とに対して、1個
の番号体系によりオフセット番号を生成するので、用い
られる番号体系が少なく、管理が容易である。ここで、
前記プログラム生成装置において、前記軽量クラスファ
イル生成手段は、さらに、クラス毎に、当該クラスに含
まれる非依存変数の数及び依存変数の数をそれぞれを示
す非依存変数カウント及び依存変数カウントを計数し、
計数した非依存変数カウント及び依存変数カウントを軽
量クラスファイルに追加するように構成してもよい。
軽量クラスファイルに含まれ、クラス毎に計数された非
依存変数カウント及び依存変数カウントを用いて、イン
スタンスを生成できる。ここで、前記プログラム生成装
置において、前記複数のクラスは、第1クラスと、前記
第1クラスを継承する第2クラスとを含み、前記番号生
成手段は、全ての依存変数と非依存変数とに対して、1
個の番号体系によりオフセット番号を生成し、ここで、
前記第2クラスについて、第2クラスのみにおいて定義
されている変数と、第1クラスから継承する変数とに対
して、一定の間隔を空けて変数毎にオフセット番号を生
成するように構成してもよい。
存変数とに対して、1個の番号体系によりオフセット番
号を生成し、ここで、前記第2クラスについて、第2ク
ラスのみにおいて定義されている変数と、第1クラスか
ら継承する変数とに対して、一定の間隔を空けてオフセ
ット番号を生成するので、オフセット番号の管理が容易
である。
て、前記軽量クラスファイル生成手段は、さらに、クラ
ス毎に、当該クラスに含まれる非依存変数の数を示す非
依存変数カウントを計数し、計数した非依存変数カウン
トと固定値としての依存変数カウントとを加算して得ら
れるカウントを軽量クラスファイルに追加するように構
成してもよい。
軽量クラスファイルに含まれ、クラス毎に計数された非
依存変数カウントを用いて、インスタンスを生成でき
る。また、本発明は、プログラム生成装置により生成さ
れた軽量クラスファイルに従って動作する仮想マシンで
あって、前記プログラム生成装置により生成された軽量
クラスファイルを記憶している記憶手段と、前記軽量ク
ラスファイルを読み出し、読み出した軽量クラスファイ
ル内の変数毎のオフセット番号に基づいて、インスタン
スを生成するインスタンス生成手段と、生成されたイン
スタンスを用いて、軽量クラスファイル内に定義されて
いる命令を実行する実行手段とを備える。
置により生成された軽量クラスファイル内の変数毎のオ
フセット番号に基づいて、インスタンスを生成するの
で、共通のプログラムをコンパイルし、リンクする際
に、各端末装置のリンクが不要となり、こうして生成さ
れたプログラムを各端末装置で実行できる。また、本発
明は、プログラム生成装置により生成された軽量クラス
ファイルに従って動作する仮想マシンであって、前記プ
ログラム生成装置により生成された軽量クラスファイル
を記憶している記憶手段と、前記軽量クラスファイルを
読み出し、読み出した前記軽量クラスファイルに含まれ
るクラス毎に計数された非依存変数カウント及び依存変
数カウントに基づいて、メモリ上にそれぞれ第1領域と
第2領域とを確保し、前記第1領域へのポインタを前記
第2領域中に格納することにより、インスタンスを生成
するインスタンス生成手段と、生成されたインスタンス
を用いて、軽量クラスファイル内に定義されている命令
を実行する実行手段とを備える。
ルに含まれる第1テーブルと第2テーブルとに基づい
て、メモリ上にそれぞれ第1領域と第2領域とを確保
し、前記第1領域へのポインタを前記第2領域中に格納
することにより、インスタンスを生成するので、確実に
インスタンスの生成ができる。
装置Aにおいて、処理を行わせるための基礎クラスファ
イルを生成する元となり、Javaにより記述されたソ
ースプログラムの一例を示す。
装置Bにおいて、処理を行わせるための基礎クラスファ
イルを生成する元となり、Javaにより記述されたソ
ースプログラムの一例を示す。
装置A及びBにおいて、共通に使用されるユーザクラス
ファイルを生成する元となり、Javaにより記述され
たソースプログラムの一例を示す。
装置Aにおいて、基礎クラスファイルに対するインスタ
ンスフィールドオフセットテーブルを示す。
装置Bにおいて、基礎クラスファイルに対するインスタ
ンスフィールドオフセットテーブルを示す。
装置Aにおいて、ユーザクラスファイルに対するインス
タンスフィールドオフセットテーブルを示す。
装置Bにおいて、ユーザクラスファイルに対するインス
タンスフィールドオフセットテーブルを示す。
ク図である。
プログラム511から軽量基礎クラスファイル541を
生成する動作を示す。
ースプログラム512から軽量ユーザクラスファイル5
42を生成する動作を示す。
uilt_in_classYに対応して生成されるクラス設計非依存
フィールドオフセットテーブルを示す。
t_in_classX及び基礎クラスBuilt_in_classYに対応して
生成されるクラス設計依存フィールドオフセットテーブ
ルを示す。 (b)端末装置Bについて、基礎クラスBuilt_in_class
X及び基礎クラスBuilt_in_classYに対応して生成される
クラス設計依存フィールドオフセットテーブルを示す。
計非依存フィールドオフセットテーブルを示す。
_classのインスタンスを示す。
_classのインスタンスを示す。
ラスファイルの一例を示す。 (b)変換後のJavaのユーザクラスのクラスファイ
ルの一例を示す。
される元となるJavaプログラムの一例を示す。
示す。
t_in_classYを示す。 (b)端末装置Aの変換後の基礎クラスBuilt_in_class
Yを示す。
を示す。
例を示す。
ァイルに対するクラス設計非依存フィールドカウントテ
ーブルの一例を示す。
ファイルに対するクラス設計非依存フィールドカウント
テーブルの一例を示す。
に対するクラス設計依存フィールドカウントテーブルの
一例を示す。 (b)端末装置Bの軽量基礎クラスファイルに対するク
ラス設計依存フィールドカウントテーブルの一例を示
す。
順を示すフローチャートである。
フローチャートである。
る。
手順を示すフローチャートである。
フローチャートである。
る。
ローチャートである。図32に続く。
ローチャートである。図31から続く。
元となるJavaプログラムの一例を示す。
図33に示すJavaプログラムに対応して生成される
インスタンスを示す。 (b)別のプログラム実行システムにおいて、図33に
示すJavaプログラムに対応して生成されるインスタ
ンスを示す。
元となるJavaプログラムの一例を示す。
応して生成される変換後のgetfield命令のオペランドを
示す。クラスAに対応するものである。 (b)図35に示すJavaプログラムに対応して生成
される変換後のgetfield命令のオペランドを示す。クラ
スBに対応するものである。
ラスに対応して生成されるクラス設計非依存フィールド
オフセットテーブルを示す。
応して生成されるクラス設計依存フィールドオフセット
テーブルを示す。 (b)端末装置Bについて、基礎クラスに対応して生成
されるクラス設計依存フィールドオフセットテーブルを
示す。
て生成されるクラス設計非依存フィールドオフセットテ
ーブルを示す。
スUser_classのインスタンスを示す。 (b)端末装置Bにて生成されるユーザクラスUser_cla
ssのインスタンスを示す。
クラスファイル内のクラス設計非依存フィールドカウン
トテーブルの一例を示す。
ァイル内のクラス設計依存フィールドカウントテーブル
の一例を示す。 (b)端末装置Bに対する軽量基礎クラスファイル内の
クラス設計依存フィールドカウントテーブルの一例を示
す。
ザクラスファイル内のクラス設計非依存フィールドカウ
ントテーブルの一例を示す。
t_in_classYのクラスファイルの一例を示す。 (b)変換後の端末装置Aの基礎クラスBuilt_in_class
Yのクラスファイルの一例を示す。
ルの一例を示す。 (b)変換後のユーザクラスのクラスファイルの一例を
示す。
おいて、プログラム実行システム2のオフセットテーブ
ル生成部13によるオフセットテーブルの生成処理の詳
細を示すフローチャートである。
おいて、プログラム実行システム2の命令変換部14に
よる命令変換の詳細を示すフローチャートである。
において、プログラム実行システム2のオフセットテー
ブル生成部13によるオフセットテーブルの生成処理の
詳細を示すフローチャートである。
において、プログラム実行システム2の命令変換部14
による命令変換の詳細を示すフローチャートである。
ローチャートである。図51へ続く。
ローチャートである。図51から続く。
uilt_in_classYのクラス設計非依存フィールドオフセッ
トテーブルを示す。
ールドオフセットテーブルを示す。 (b)端末装置Bに対するインスタンスフィールドオフ
セットテーブルを示す。
て生成されるインスタンスフィールドオフセットテーブ
ルを示す。
スUser_classのインスタンスを示す。 (b)端末装置Bにて生成されるユーザクラスUser_cla
ssのインスタンスを示す。
Claims (19)
- 【請求項1】 端末装置毎に異なる依存変数と各端末装
置に共通の非依存変数とが定義され、継承関係を有する
複数のクラスが定義されている複数のクラスファイル
を、端末装置毎にリンクしてそれぞれ軽量クラスファイ
ルを生成するプログラム生成装置であって、 継承関係を有する複数のクラスがそれぞれ定義されてい
る複数のクラスファイルを記憶しており、各クラスにお
いて、変数名によりそれぞれ識別される依存変数と非依
存変数とが定義され、各クラスファイルは、変数毎に変
数名を含む記憶手段と、 端末装置毎にリンクされる際に、複数の端末装置におい
て同じ変数名が付された非依存変数については同じ番号
となるように、前記記憶手段に記憶されている各クラス
ファイルに定義されている変数毎にオフセット番号を生
成する番号生成手段と、 前記記憶手段に記憶されている各クラスファイルについ
て、変数毎に、当該変数名を前記番号生成手段により生
成されたオフセット番号に置き換えて軽量クラスファイ
ルを生成する軽量クラスファイル生成手段とを備えるこ
とを特徴とするプログラム生成装置。 - 【請求項2】 前記番号生成手段は、依存変数と非依存
変数とに対して、異なる番号体系により変数毎にオフセ
ット番号を生成することを特徴とする請求項1に記載の
プログラム生成装置。 - 【請求項3】 前記プログラム生成装置において、 前記軽量クラスファイル生成手段は、さらに、クラス毎
に、当該クラスに含まれる非依存変数の数及び依存変数
の数をそれぞれを示す非依存変数カウント及び依存変数
カウントを計数し、計数した非依存変数カウント及び依
存変数カウントを軽量クラスファイルに追加することを
特徴とする請求項2に記載のプログラム生成装置。 - 【請求項4】 前記プログラム生成装置において、 前記複数のクラスは、第1クラスと、前記第1クラスを
継承する第2クラスとを含み、 前記番号生成手段は、前記第2クラスについて、第2ク
ラスのみにおいて定義されている依存変数と、第1クラ
スから継承する依存変数とに対して、異なる番号体系に
より変数毎にオフセット番号を生成することを特徴とす
る請求項2に記載のプログラム生成装置。 - 【請求項5】 前記プログラム生成装置において、 前記軽量クラスファイル生成手段は、さらに、クラス毎
に、当該クラスに含まれる非依存変数の数及び依存変数
の数をそれぞれを示す非依存変数カウント及び依存変数
カウントを計数し、計数した非依存変数カウント及び依
存変数カウントを軽量クラスファイルに追加することを
特徴とする請求項4に記載のプログラム生成装置。 - 【請求項6】 前記プログラム生成装置において、 前記複数のクラスは、第1クラスと、前記第1クラスを
継承する第2クラスとを含み、 前記番号生成手段は、前記第2クラスについて、第2ク
ラスのみにおいて定義されている依存変数と、第1クラ
スから継承する依存変数とに対して、1個の番号体系に
より変数毎にオフセット番号を生成することを特徴とす
る請求項2に記載のプログラム生成装置。 - 【請求項7】 前記プログラム生成装置において、 前記軽量クラスファイル生成手段は、さらに、クラス毎
に、当該クラスに含まれる非依存変数の数及び依存変数
の数をそれぞれを示す非依存変数カウント及び依存変数
カウントを計数し、計数した非依存変数カウント及び依
存変数カウントを軽量クラスファイルに追加することを
特徴とする請求項6に記載のプログラム生成装置。 - 【請求項8】 前記プログラム生成装置において、 前記複数のクラスは、第1クラスと、前記第1クラスを
継承する第2クラスとを含み、 前記番号生成手段は、全ての依存変数と非依存変数とに
対して、1個の番号体系によりオフセット番号を生成
し、ここで、前記第2クラスについて、第2クラスのみ
において定義されている変数と、第1クラスから継承す
る変数とに対して、一定の間隔を空けて変数毎にオフセ
ット番号を生成することを特徴とする請求項1に記載の
プログラム生成装置。 - 【請求項9】 前記プログラム生成装置において、 前記軽量クラスファイル生成手段は、さらに、クラス毎
に、当該クラスに含まれる非依存変数の数を示す非依存
変数カウントを計数し、計数した非依存変数カウントと
固定値としての依存変数カウントとを加算して得られる
カウントを軽量クラスファイルに追加することを特徴と
する請求項8に記載のプログラム生成装置。 - 【請求項10】 プログラム生成装置により生成された
軽量クラスファイルに従って動作する仮想マシンであっ
て、 請求項1のプログラム生成装置により生成された軽量ク
ラスファイルを記憶している記憶手段と、 前記軽量クラスファイルを読み出し、読み出した軽量ク
ラスファイル内の変数毎のオフセット番号に基づいて、
インスタンスを生成するインスタンス生成手段と、 生成されたインスタンスを用いて、軽量クラスファイル
内に定義されている命令を実行する実行手段とを備える
ことを特徴とする仮想マシン。 - 【請求項11】 プログラム生成装置により生成された
軽量クラスファイルに従って動作する仮想マシンであっ
て、 請求項3のプログラム生成装置により生成された軽量ク
ラスファイルを記憶している記憶手段と、 前記軽量クラスファイルを読み出し、読み出した前記軽
量クラスファイルに含まれるクラス毎に計数された非依
存変数カウント及び依存変数カウントに基づいて、メモ
リ上にそれぞれ第1領域と第2領域とを確保し、前記第
1領域へのポインタを前記第2領域中に格納することに
より、インスタンスを生成するインスタンス生成手段
と、 生成されたインスタンスを用いて、軽量クラスファイル
内に定義されている命令を実行する実行手段とを備える
ことを特徴とする仮想マシン。 - 【請求項12】 端末装置毎に異なる依存変数と各端末
装置に共通の非依存変数とが定義され、継承関係を有す
る複数のクラスが定義されている複数のクラスファイル
を、端末装置毎にリンクしてそれぞれ軽量クラスファイ
ルを生成するプログラム生成装置で用いられるプログラ
ム生成方法であって、 前記プログラム生成装置は、継承関係を有する複数のク
ラスがそれぞれ定義されている複数のクラスファイルを
記憶しており、各クラスにおいて、変数名によりそれぞ
れ識別される依存変数と非依存変数とが定義され、各ク
ラスファイルは、変数毎に変数名を含む記憶手段を備
え、 前記プログラム生成方法は、 端末装置毎にリンクされる際に、複数の端末装置におい
て同じ変数名が付された非依存変数については同じ番号
となるように、前記記憶手段に記憶されている各クラス
ファイルに定義されている変数毎にオフセット番号を生
成する番号生成ステップと、 前記記憶手段に記憶されている各クラスファイルについ
て、変数毎に、当該変数名を前記番号生成手段により生
成されたオフセット番号に置き換えて軽量クラスファイ
ルを生成する軽量クラスファイル生成ステップとを含む
ことを特徴とするプログラム生成方法。 - 【請求項13】 端末装置毎に異なる依存変数と各端末
装置に共通の非依存変数とが定義され、継承関係を有す
る複数のクラスが定義されている複数のクラスファイル
を、端末装置毎にリンクしてそれぞれ軽量クラスファイ
ルを生成するコンピュータで用いられるコンピュータプ
ログラムを記憶しているコンピュータ読み取り可能な記
録媒体であって、 前記コンピュータは、継承関係を有する複数のクラスが
それぞれ定義されている複数のクラスファイルを記憶し
ており、各クラスにおいて、変数名によりそれぞれ識別
される依存変数と非依存変数とが定義されており、各ク
ラスファイルは、変数毎に変数名を含む記憶手段を備
え、 前記コンピュータプログラムは、 端末装置毎にリンクされる際に、複数の端末装置におい
て同じ変数名が付された非依存変数については同じ番号
となるように、前記記憶手段に記憶されている各クラス
ファイルに定義されている変数毎にオフセット番号を生
成する番号生成ステップと、 前記記憶手段に記憶されている各クラスファイルについ
て、変数毎に、当該変数名を前記番号生成手段により生
成されたオフセット番号に置き換えて軽量クラスファイ
ルを生成する軽量クラスファイル生成ステップとを含む
ことを特徴とする記録媒体。 - 【請求項14】 プログラム生成装置により生成された
軽量クラスファイルに従って動作する仮想マシンで用い
られるプログラム実行方法であって、 前記仮想マシンは、請求項1のプログラム生成装置によ
り生成された軽量クラスファイルを記憶している記憶手
段を備え、 前記プログラム実行方法は、 前記軽量クラスファイルを読み出し、読み出した軽量ク
ラスファイル内の変数毎のオフセット番号に基づいて、
インスタンスを生成するインスタンス生成ステップと、 生成されたインスタンスを用いて、軽量クラスファイル
内に定義されている命令を実行する実行ステップとを含
むことを特徴とするプログラム実行方法。 - 【請求項15】 プログラム生成装置により生成された
軽量クラスファイルに従って動作する仮想マシンで用い
られるコンピュータプログラムを記憶しているコンピュ
ータ読み取り可能な記録媒体であって、 前記仮想マシンは、請求項1のプログラム生成装置によ
り生成された軽量クラスファイルを記憶している記憶手
段を備え、 前記コンピュータプログラムは、 前記軽量クラスファイルを読み出し、読み出した軽量ク
ラスファイル内の変数毎のオフセット番号に基づいて、
インスタンスを生成するインスタンス生成ステップと、 生成されたインスタンスを用いて、軽量クラスファイル
内に定義されている命令を実行する実行ステップとを含
むことを特徴とする記録媒体。 - 【請求項16】 請求項1のプログラム生成装置により
生成された軽量クラスファイルを記憶しているコンピュ
ータ読み取り可能な記録媒体。 - 【請求項17】 端末装置毎に異なる依存変数と各端末
装置に共通の非依存変数とが定義され、継承関係を有す
る複数のクラスが定義されている複数のクラスファイル
を、端末装置毎にリンクしてそれぞれ軽量クラスファイ
ルを生成するコンピュータで用いられるコンピュータプ
ログラムであって、 前記コンピュータは、継承関係を有する複数のクラスが
それぞれ定義されている複数のクラスファイルを記憶し
ており、各クラスにおいて、変数名によりそれぞれ識別
される依存変数と非依存変数とが定義されており、各ク
ラスファイルは、変数毎に変数名を含む記憶手段を備
え、 前記コンピュータプログラムは、 端末装置毎にリンクされる際に、複数の端末装置におい
て同じ変数名が付された非依存変数については同じ番号
となるように、前記記憶手段に記憶されている各クラス
ファイルに定義されている変数毎にオフセット番号を生
成する番号生成ステップと、 前記記憶手段に記憶されている各クラスファイルについ
て、変数毎に、当該変数名を前記番号生成手段により生
成されたオフセット番号に置き換えて軽量クラスファイ
ルを生成する軽量クラスファイル生成ステップとを含む
ことを特徴とするコンピュータプログラム。 - 【請求項18】 プログラム生成装置により生成された
軽量クラスファイルに従って動作する仮想マシンで用い
られるコンピュータプログラムであって、 前記仮想マシンは、請求項1のプログラム生成装置によ
り生成された軽量クラスファイルを記憶している記憶手
段を備え、 前記コンピュータプログラムは、 前記軽量クラスファイルを読み出し、読み出した軽量ク
ラスファイル内の変数毎のオフセット番号に基づいて、
インスタンスを生成するインスタンス生成ステップと、 生成されたインスタンスを用いて、軽量クラスファイル
内に定義されている命令を実行する実行ステップとを含
むことを特徴とするコンピュータプログラム。 - 【請求項19】 請求項1のプログラム生成装置により
生成されたコンピュータプログラムとしての軽量クラス
ファイル。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001044020A JP2001312406A (ja) | 2000-02-21 | 2001-02-20 | プログラム生成装置 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000043499 | 2000-02-21 | ||
JP2000-43499 | 2000-02-21 | ||
JP2001044020A JP2001312406A (ja) | 2000-02-21 | 2001-02-20 | プログラム生成装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2001312406A true JP2001312406A (ja) | 2001-11-09 |
Family
ID=26585777
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001044020A Pending JP2001312406A (ja) | 2000-02-21 | 2001-02-20 | プログラム生成装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2001312406A (ja) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000029706A (ja) * | 1997-10-31 | 2000-01-28 | Sun Microsyst Inc | クラスファイルのプリプロセシング及びパッケ―ジングのための方法及び装置 |
-
2001
- 2001-02-20 JP JP2001044020A patent/JP2001312406A/ja active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000029706A (ja) * | 1997-10-31 | 2000-01-28 | Sun Microsyst Inc | クラスファイルのプリプロセシング及びパッケ―ジングのための方法及び装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11307990B2 (en) | Deploying a smart contract | |
Koshy et al. | VMSTAR: synthesizing scalable runtime environments for sensor networks | |
JP3689368B2 (ja) | データ処理リソースを備えたマルチアプリケーション組込システムにアプリケーションをローディングする方法、対応するシステムおよび実行方法 | |
US7516442B2 (en) | Resource manifest | |
US7316010B1 (en) | Methods for sharing conditionally across class loaders dynamically compiled code | |
CA2199108C (en) | Parallel distributed processing system and method of same | |
US5907707A (en) | Object model for Java | |
US7305376B2 (en) | Multiple language-dependent resources compacted into a single resource file | |
US20040268301A1 (en) | Adding new compiler methods to an integrated development environment | |
US7665075B1 (en) | Methods for sharing of dynamically compiled code across class loaders by making the compiled code loader reentrant | |
US6106574A (en) | Computer-implemented object-oriented method for relating objects in a compiler to locations in the source program and to inlined call histories | |
US6675377B1 (en) | Program conversion apparatus | |
WO2011042228A1 (en) | Method and system to handle java class versioning | |
US20090187897A1 (en) | Compiling method and compiling program | |
JP2001312406A (ja) | プログラム生成装置 | |
US8793671B2 (en) | Interface optimization in a closed system | |
JP4500040B2 (ja) | コンパイラプログラム、コンパイラプログラムを記録したコンピュータ読み取り可能な記録媒体、コンパイル方法及びコンパイル装置 | |
CN113626071B (zh) | 函数注册方法、系统、电子设备及存储介质 | |
US20100306739A1 (en) | Fast late binding of object methods | |
US7024657B2 (en) | Program generation apparatus for program execution system, replaces variable name in each class file by assigned offset number so that same offset numbers are assigned to non-dependent variables with same variable name | |
CN115328679A (zh) | 异构函数库的自动化集成方法、计算设备及其系统 | |
CN1256766A (zh) | 业务独立积木式组件的实现 | |
JP3241214B2 (ja) | 分散処理装置及びプロセス実行方法 | |
JP2000122876A (ja) | 情報処理装置 | |
JP4741313B2 (ja) | プログラム生成装置、プログラム生成方法及びコンパイラ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20071212 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20101214 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110209 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110301 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110421 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20110517 |