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
Application number
JP2001044020A
Other languages
English (en)
Inventor
Masaki Kawai
正樹 河合
Takuji Kawamoto
琢二 川本
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 JP2001044020A priority Critical patent/JP2001312406A/ja
Publication of JP2001312406A publication Critical patent/JP2001312406A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 オブジェクト指向言語で記述されたソースプ
ログラムから実行プログラムを生成するプログラム生成
装置であって、複数種類の異なる端末装置毎に、異なる
基礎クラスを有し、各端末装置用の実行プログラムを生
成するプログラム生成装置において、共通のプログラム
をコンパイルし、リンクする際に、端末装置毎のリンク
を不要とする。 【解決手段】オフセットテーブル生成部13は、端末装
置の種類に応じて個数又は型が変わり得て基礎クラスフ
ァイルから継承するクラス設計依存フィールドにかから
わないように、基礎クラスファイルから継承されるクラ
ス設計非依存フィールド及び新たに定義されるクラス設
計非依存フィールドに対するオフセット番号を割り当て
る。命令変換部14は、この番号に基づいて、ユーザク
ラスファイル中の命令を変換する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、オブジェクト指向
言語で記述されたソースプログラムから実行プログラム
を生成し、実行する技術に関する。
【0002】
【従来の技術】従来より、ユーザによりプログラミング
言語にて記述されたソースプログラムをコンパイル、リ
ンク等することによって実行プログラムを生成し、組み
込み機器(携帯電話、STB(セットトップボック
ス)、テレビジョンなどとして使用されるコンピュー
タ)又はパーソナルコンピュータ(以下、PCとする)
にてこの生成された実行プログラムを実行させるための
プログラム実行システムが種々知られている。
【0003】以下、オブジェクト指向言語であるJav
a(Javaは、Sun Microsystems社
の商標)により記述されたソースプログラムに基づいて
組み込み機器を動作させるための従来のプログラム実行
システムについて説明する。前記従来のプログラム実行
システムは、プログラム生成装置と組み込み機器である
端末装置とから構成される。
【0004】プログラム生成装置では、1個のユーザク
ラスのソースプログラムと、前記ソースプログラムにお
いて使用され、端末装置毎に異なる基礎ライブラリ内の
プログラムとが、コンパイル及びリンクされ、端末装置
毎に、異なる軽量ユーザクラスファイルが生成される。
ここで、基礎ライブラリは、端末装置の種類毎に異なる
ものが用意されており、各基礎ライブラリは、端末装置
に依存し、端末装置固有のハードウェアの制御に直接関
わるプログラム、例えば、ディスプレィユニットへの表
示やデータの通信等を制御するためのプログラムをファ
イル群として含んでいる。
【0005】端末装置毎に生成された軽量ユーザクラス
ファイルは、対応する端末装置内に格納され、各端末装
置は、軽量ユーザクラスファイルに従って動作する。以
下では、ハードウェアの構成の一部が異なる2種類の端
末装置A及び端末装置Bを想定し、同一のユーザクラス
のソースプログラムからそれぞれ軽量ユーザクラスファ
イルを生成し、生成した各軽量ユーザクラスファイルを
対応する端末装置において実行させるものとし、前記従
来のプログラム実行システムについて、さらに詳細に説
明する。
【0006】端末装置A及びBにおいて、同様の処理を
行わせるための基礎クラスファイルを生成する元とな
り、Javaにより記述されたソースプログラムの一例
を、それぞれ図1及び図2に示す。また、端末装置A及
びBにおいて、共通に使用されるユーザクラスファイル
を生成する元となり、Javaにより記述されたソース
プログラムの一例を、図3に示す。なお、これらの図に
おいては、フィールドの定義のみを示しており、メソッ
ドでのこれらのフィールドの具体的な使用に関する記述
は省略している。
【0007】図1に示すように、クラスBuilt_in_class
Xでは、インスタンスフィールドprivateX1、privateX
2、privateX3と、インスタンスフィールドfieldX1、fie
ldX2とが使用されている。インスタンスフィールドpriv
ateX1、privateX2、privateX3には、修飾子privateが用
いられて定義されているので、他のクラスに含まれるメ
ソッドからのアクセスが禁止されている。また、インス
タンスフィールドfieldX1、fieldX2は、他のクラスから
のアクセスを許容されている。
【0008】また、クラスBuilt_in_classYでは、イン
スタンスフィールドprivateY1、privateY2と、インスタ
ンスフィールドfieldY1、fieldY2、fieldY3とが使用さ
れている。インスタンスフィールドprivateY1、private
Y2には、修飾子privateが用いられて定義されているの
で、他のクラスに含まれるメソッドからのアクセスが禁
止されている。また、インスタンスフィールドfieldY
1、fieldY2、fieldY3は、他のクラスからのアクセスを
許容されている。
【0009】また、図2に示すように、上記と同様に、
クラスBuilt_in_classXでは、他のクラスに含まれるメ
ソッドからのアクセスが禁止されているインスタンスフ
ィールドprivateX1と、他のクラスからのアクセスを許
容されているインスタンスフィールドfieldX1、fieldX2
とが使用されている。また、クラスBuilt_in_classYで
は、他のクラスに含まれるメソッドからのアクセスが禁
止されているインスタンスフィールドprivateY1、priva
teY2、privateY3と、他のクラスからのアクセスを許容
されているインスタンスフィールドfieldY1、fieldY2、
fieldY3とが使用されている。
【0010】これらのソースプログラムにおいて、クラ
スBuilt_in_classXは、クラスBuilt_in_classYにより継
承され、クラスBuilt_in_classYは、クラスUser_class
により継承されている。端末装置A及びBについて、ク
ラスBuilt_in_classX及びクラスBuilt_in_classYは、コ
ンパイルされ、それぞれ1個の基礎クラスファイルが構
成される。
【0011】これらに示すように、端末装置Aであるか
端末装置Bであるかにかかわらず、同一の機能を有する
同一の名前のクラスBuilt_in_classX及びBuilt_in_clas
sYが用いられている。これらの中で使用されるインスタ
ンスフィールドに関しては、他のクラスからのアクセス
を許容するものについて、同じ名前の同じ内容を示すも
の、例えば、fieldX1、fieldX2、fieldY1、fieldY2、fi
eldY3が用いられている。
【0012】また、他のクラスからのアクセスを禁止す
るものについては、異なる個数の異なる内容を示すも
の、例えば、端末装置AのprivateX1、privateX2、priv
ateX3、端末装置BのprivateX1が用いられている。な
お、端末AのprivateX1と端末装置BのprivateX1とは名
前が同一であるが異なる内容を示す。また、端末装置A
のprivateY1、privateY2と端末BのprivateY1、private
Y2についても同様に、名前が同一であるが異なる内容を
示す。
【0013】これらの、修飾子privateが用いられて定
義される、端末装置Aに対するインスタンスフィールド
privateX1、privateX2、privateX3、privateY1、privat
eY2、及び端末装置Bに対するインスタンスフィールドp
rivateX1、privateY1、privateY2、privateY3は、端末
装置A、端末装置Bのそれぞれのハードウェアに応じた
制御を行うために用いられ、端末装置の基礎クラスの設
計に依存するものであり、以下では、これらをクラス設
計依存フィールドと呼ぶ。
【0014】また、これら以外の端末装置A、端末装置
Bに対して共通のインスタンスフィールドfielX1、fiel
dX2、fieldY1、fieldY2、fieldY3は、端末装置A、端末
装置Bに対して共通した制御を行うために用いられ、端
末装置の基礎クラスの設計に依存しないものであり、以
下では、これらをクラス設計非依存フィールドと呼ぶ。
【0015】クラスUser_classは、コンパイルされて、
1個のユーザクラスファイルを構成する。図3に示すよ
うに、クラスUser_classでは、インスタンスフィールド
fieldU1、fieldU2が用いられている。前記プログラム生
成装置では、以上のようなクラスBuilt_in_classX、ク
ラスBuilt_in_classY及びクラスUser_classのそれぞれ
にて用いられているインスタンスフィールドにクラスご
とに一意の番号が割り当てられ、図4〜図7に示すよう
なインスタンスフィールドオフセットテーブルが生成さ
れる。
【0016】図4及び図5は、基礎クラスファイルに対
するインスタンスフィールドオフセットテーブルを示す
図であり、図6及び図7は、ユーザクラスファイルに対
するインスタンスフィールドオフセットテーブルを示す
図である。図4及び図6は、それぞれ端末装置Aに対す
る基礎クラスファイル、ユーザクラスファイルに対する
ものであり、図5及び図7は、それぞれ端末装置Bに対
する基礎クラスファイル、ユーザクラスファイルに対す
るものである。
【0017】図4及び図5に示すように、クラスBuilt_
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と同じオフセット番号が割り当て
られている。
【0018】また、図6及び図7に示すように、クラス
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においても同様である。
【0019】また、図6及び図7に示すクラスUser_cla
ssのインスタンスフィールドオフセットテーブルでは、
インスタンスフィールドfieldU1、fieldU2について、端
末装置Aでは、オフセット番号「11」及び「12」が
割り当てられており、端末装置Bでは、オフセット番号
「10」及び「11」が割り当てられている。次に、前
記プログラム生成装置では、これらのテーブルに基づい
て、クラスファイル中の命令の中でオペランドとして使
用されているインスタンスフィールドのオフセット番号
化が行われ、コンスタントプール内の識別情報が削除さ
れることとなる。こうして、同一の1個のユーザクラス
のソースプログラムから、端末装置毎に異なる軽量ユー
ザクラスファイルが生成される。
【0020】
【発明が解決しようとする課題】このように、従来のプ
ログラム実行システムにおいては、同一のユーザクラス
のソースプログラムであるにもかかわらず、端末装置
(言い換えれば、軽量基礎クラスファイル)の種類数分
のリンクを行わなければならないという問題点がある。
【0021】上記の問題点を解決するために、本発明
は、オブジェクト指向言語で記述されたソースプログラ
ムから実行プログラムを生成するプログラム生成装置で
あって、複数種類の異なる端末装置毎に、異なる基礎ク
ラスを有し、各端末装置用の実行プログラムを生成する
プログラム生成装置において、共通のプログラムをコン
パイルし、リンクする際に、端末装置毎のリンクを不要
とするプログラム生成装置、プログラム生成方法、プロ
グラム生成プログラムを記録している記録媒体、仮想マ
シン、プログラム実行方法、プログラム実行プログラム
を記録している記録媒体、前記プログラム生成装置によ
り生成されたプログラムを記録している記録媒体を提供
することを目的とする。
【0022】
【課題を解決するための手段】上記目的を達成するため
に、本発明は、端末装置毎に異なる依存変数と各端末装
置に共通の非依存変数とが定義され、継承関係を有する
複数のクラスが定義されている複数のクラスファイル
を、端末装置毎にリンクしてそれぞれ軽量クラスファイ
ルを生成するプログラム生成装置であって、継承関係を
有する複数のクラスがそれぞれ定義されている複数のク
ラスファイルを記憶しており、各クラスにおいて、変数
名によりそれぞれ識別される依存変数と非依存変数とが
定義され、各クラスファイルは、変数毎に変数名を含む
記憶手段と、端末装置毎にリンクされる際に、複数の端
末装置において同じ変数名が付された非依存変数につい
ては同じ番号となるように、前記記憶手段に記憶されて
いる各クラスファイルに定義されている変数毎にオフセ
ット番号を生成する番号生成手段と、前記記憶手段に記
憶されている各クラスファイルについて、変数毎に、当
該変数名を前記番号生成手段により生成されたオフセッ
ト番号に置き換えて軽量クラスファイルを生成する軽量
クラスファイル生成手段とを備えることを特徴とする。
【0023】ここで、前記番号生成手段は、依存変数と
非依存変数とに対して、異なる番号体系により変数毎に
オフセット番号を生成するように構成してもよい。ここ
で、前記プログラム生成装置において、前記複数のクラ
スは、第1クラスと、前記第1クラスを継承する第2ク
ラスとを含み、前記番号生成手段は、前記第2クラスに
ついて、第2クラスのみにおいて定義されている依存変
数と、第1クラスから継承する依存変数とに対して、異
なる番号体系により変数毎にオフセット番号を生成する
ように構成してもよい。
【0024】ここで、前記プログラム生成装置におい
て、前記複数のクラスは、第1クラスと、前記第1クラ
スを継承する第2クラスとを含み、前記番号生成手段
は、前記第2クラスについて、第2クラスのみにおいて
定義されている依存変数と、第1クラスから継承する依
存変数とに対して、1個の番号体系により変数毎にオフ
セット番号を生成するように構成してもよい。
【0025】ここで、前記プログラム生成装置におい
て、前記複数のクラスは、第1クラスと、前記第1クラ
スを継承する第2クラスとを含み、前記番号生成手段
は、全ての依存変数と非依存変数とに対して、1個の番
号体系によりオフセット番号を生成し、ここで、前記第
2クラスについて、第2クラスのみにおいて定義されて
いる変数と、第1クラスから継承する変数とに対して、
一定の間隔を空けて変数毎にオフセット番号を生成する
ように構成してもよい。
【0026】また、本発明は、プログラム生成装置によ
り生成された軽量クラスファイルに従って動作する仮想
マシンであって、前記のプログラム生成装置により生成
された軽量クラスファイルを記憶している記憶手段と、
前記軽量クラスファイルを読み出し、読み出した軽量ク
ラスファイル内の変数毎のオフセット番号に基づいて、
インスタンスを生成するインスタンス生成手段と、生成
されたインスタンスを用いて、軽量クラスファイル内に
定義されている命令を実行する実行手段とを備えること
を特徴とする。
【0027】また、本発明は、プログラム生成装置によ
り生成された軽量クラスファイルに従って動作する仮想
マシンであって、前記プログラム生成装置により生成さ
れた軽量クラスファイルを記憶している記憶手段と、前
記軽量クラスファイルを読み出し、読み出した前記軽量
クラスファイルに含まれるクラス毎に計数された非依存
変数カウント及び依存変数カウントに基づいて、メモリ
上にそれぞれ第1領域と第2領域とを確保し、前記第1
領域へのポインタを前記第2領域中に格納することによ
り、インスタンスを生成するインスタンス生成手段と、
生成されたインスタンスを用いて、軽量クラスファイル
内に定義されている命令を実行する実行手段とを備える
ことを特徴とする。
【0028】
【発明の実施の形態】本発明に係る実施の形態としての
プログラム実行システムについて説明する。 1.第1の実施の形態 本発明の第1の実施の形態としてのプログラム実行シス
テム1について説明する。
【0029】1.1 プログラム実行システム1の構成 プログラム実行システム1の構成について、図8に示す
構成の概略を説明するためのブロック図を用いて説明す
る。プログラム実行システム1は、図8に示すように、
プログラム生成装置10と組み込み機器である端末装置
(軽装仮想マシン)20とから構成される。プログラム
生成装置10は、コンパイル部11と静的リンク部12
と図示してない記憶部とを含んでおり、端末装置20
は、命令実行部21とインスタンス生成部22と図示し
てない記憶部とを含んでいる。
【0030】プログラム生成装置10及び端末装置20
は、ともに、マイクロプロセッサ、RAM、ROMなど
を含むコンピュータシステムであり、RAM又はROM
にはコンピュータプログラムが記憶されており、前記マ
イクロプロセッサが、前記コンピュータプログラムに従
って動作することにより、プログラム生成装置10及び
端末装置20は、その機能を達成する。
【0031】なお、コンパイル部11と静的リンク部1
2とは、1個のプログラム生成装置10に含まれるもの
としているが、それぞれ別の異なる装置に含まれるもの
としてもよい。このとき、1個の装置は、軽量ユーザク
ラスファイル56を生成するプログラム生成部を含むよ
うに構成することができる。 (1)ソースプログラム51 ソースプログラム51は、プログラム生成装置10内の
記憶部に格納されている。ソースプログラム51は、ユ
ーザによりJavaを用いて記述されたソースプログラ
ムであり、複数のクラスを含む。ソースプログラム51
は、基礎クラスに関するものとユーザクラスに関するも
のとを含む。
【0032】(2)基礎クラス定義ファイル55 基礎クラス定義ファイル55は、あらかじめ、プログラ
ム生成装置10内の記憶部に格納されている。基礎クラ
ス定義ファイル55は、端末装置20にあらかじめ記憶
されている軽量基礎クラスライブラリ58に含まれる、
クラス、メソッド、フィールドの定義を示すものであ
る。基礎クラス定義ファイル55は、クラス設計依存フ
ィールドの名前、型、個数等の情報を含まない。
【0033】(3)コンパイル部11 コンパイル部11は、記憶部からソースプログラム51
を読み出し、ソースプログラム51をコンパイルし、ソ
ースプログラム51に含まれるクラスの各々に対応する
クラスファイル52、・・・、53を生成する。クラス
ファイル52、・・・、53は、基礎クラスに関するも
のとユーザクラスに関するものとを含む。コンパイル部
11は、生成したクラスファイル52、・・・、53を
記憶部に書き込む。
【0034】(4)静的リンク部12 静的リンク部12は、クラスファイル52、・・・、5
3と、基礎クラス定義ファイル55を記憶部から読み出
し、基礎クラス定義ファイル55を必要に応じて用い、
クラスファイル52、・・・、53中のコンスタントプ
ール内の識別情報を解決し、この解決により不要となっ
た識別情報を削除し、軽量クラスファイル54、・・・
を生成し、生成した軽量クラスファイル54、・・・を
記憶部へ書き込む。
【0035】軽量クラスファイル54、・・・は、軽量
基礎クラスファイルと軽量ユーザクラスファイルとを含
む。軽量基礎クラスファイルは、端末装置20固有のハ
ードウェアの構成、制御に関わる軽量クラスファイルで
あり、また、軽量ユーザクラスファイルは、ユーザクラ
スファイルとしての軽量クラスファイルである。静的リ
ンク部12は、オフセットテーブル生成部13と命令変
換部14とリンク部15とから構成されている。
【0036】オフセットテーブル生成部13は、クラス
ファイル中で使用されているインスタンスフィールドに
オフセット番号を割り当てる。オフセットテーブル生成
部13は、非依存テーブル生成部131と、依存テーブ
ル生成部132とを含んでいる。非依存テーブル生成部
131は、端末装置のハードウェア(言い換えると、基
礎クラス)の設計に依存しないクラス設計非依存フィー
ルドに対するクラス設計非依存フィールドオフセットテ
ーブルを生成する。依存テーブル生成部132は、端末
装置のハードウェア(言い換えると、基礎クラス)の設
計に依存するクラス設計依存フィールドに対するクラス
設計依存フィールドオフセットテーブルを生成する。ま
た、オフセットテーブル生成部13は、カウントテーブ
ルを生成し、生成したカウントテーブルを軽量クラスフ
ァイルに追加して書き込む。
【0037】命令変換部14は、クラスファイル中のイ
ンスタンスフィールドを指示するコンスタントプール内
のオフセットを割り当てられたオフセット番号に置換す
る。リンク部15は、その他のリンク処理を行う。 (5)軽量ユーザクラスファイル56、軽量基礎クラス
ファイル57 軽量基礎クラスファイルは、軽量基礎クラスファイル5
7として、軽量ユーザクラスファイル56の実行に先立
って端末装置20中に格納される。また、軽量ユーザク
ラスファイルは、軽量ユーザクラスファイル56とし
て、流通の対象とされて所定の伝送路を介してダウンロ
ードされることによって端末装置20に読み込まれて格
納される。
【0038】軽量基礎クラスライブラリ58は、上記の
軽量基礎クラスファイル複数をファイル群としてあらか
じめ収めている。上記のようにして読み込まれた軽量ユ
ーザクラスファイル56と軽量ユーザクラスファイル5
6により使用が指定されている軽量基礎クラスライブラ
リ58中の軽量基礎クラスファイル57とは、すでにリ
ンクされているもの、言い換えると、識別情報が解決さ
れているものである。
【0039】(6)命令実行部21、インスタンス生成
部22 命令実行部21は、軽量ユーザクラスファイル56中の
命令を呼び出し、必要に応じて軽量基礎クラスファイル
57を呼び出し、実行する。インスタンス生成部22
は、命令の実行に伴って、インスタンスを生成する。 1.2 プログラム生成装置10の動作 プログラム生成装置10が、軽量基礎クラスファイル及
び軽量ユーザクラスファイルを生成する動作について、
図9及び図10を用いて、説明する。
【0040】(1)軽量基礎クラスファイルの生成の動
作 プログラム生成装置10が基礎クラスのソースプログラ
ム511から軽量基礎クラスファイル541を生成する
動作を図9に示す。コンパイル部11は、基礎クラスの
ソースプログラム511をコンパイルして、基礎クラス
ファイル521、・・・、522を生成する。次に、静
的リンク部12の非依存テーブル生成部131は、基礎
クラスファイル521、・・・、522から、図11に
示すクラス設計非依存フィールドオフセットテーブルを
生成し、依存テーブル生成部132は、基礎クラスファ
イル521、・・・、522から、図12に示すクラス
設計依存フィールドオフセットテーブルを生成する。次
に、命令変換部14は、これらのテーブルに基づいて、
コンスタントプール内のオフセットを、前記それぞれの
テーブル生成の際に割り当てられたオフセット番号に置
換する。ここで、コンスタントプール内の前記オフセッ
トは、getfield命令、putfield命令等の所定の命令のオ
ペランドとなっているインスタンスフィールドを指示す
るものである。次に、リンク部15は、これらの他のリ
ンク処理を行う。
【0041】また、オフセットテーブル生成部13は、
基礎クラスファイル521、・・・、522からクラ
ス、メソッド、フィールド等の定義を示す情報を収集
し、基礎クラス定義ファイル55に格納する。先述した
ように、基礎クラス定義ファイル55にはクラス設計依
存フィールドの名前、型、個数等の情報は含まれておら
ず、基礎クラス定義ファイル55は異なる種類のすべて
の端末に対して同じものが生成されることとなる。
【0042】(2)軽量ユーザクラスファイルの生成の
動作 次に、プログラム生成装置10がユーザクラスのソース
プログラム512から軽量ユーザクラスファイル542
を生成する動作を図10に示す。前記軽量基礎クラスフ
ァイルの生成の後、コンパイル部11は、ユーザクラス
のソースプログラム512をコンパイルして、ユーザク
ラスファイル531、・・・、532を生成する。次
に、静的リンク部12の非依存テーブル生成部131
は、ユーザクラスファイル531、・・・、532及び
生成された前記基礎クラス定義ファイル55から、図1
3に示すクラス設計非依存フィールドオフセットテーブ
ルを生成する。次に、命令変換部14は、これらのテー
ブルに基づいて、コンスタントプール内のオフセット
を、テーブル生成の際に割り当てられたオフセット番号
に置換する。ここで、コンスタントプール内の前記オフ
セットは、所定の命令のオペランドとなっているインス
タンスフィールドを指示するものである。次に、リンク
部15は、これらの他のリンク処理を行う。
【0043】(3)まとめ 本プログラム実行システム1では、基礎クラス定義ファ
イル55は、一意に定まるものであって、端末装置20
の軽量基礎クラスファイルの構成に応じて異なるもので
はない。静的リンク部12は、基礎クラス定義ファイル
55を用いて、ユーザクラスファイルから基礎クラスフ
ァイルへのリンク処理を行う。また、ポインタを用いる
等により、軽量ユーザクラスファイルに対するインスタ
ンスフィールドオフセットテーブル、言い換えると、ク
ラス設計非依存フィールドオフセットテーブル中には、
クラス設計依存フィールドに関する情報が含まれないよ
うにするため、静的リンク部12は、複数の異なる端末
装置について、同一のユーザクラスのソースプログラム
512から同一の軽量ユーザクラスファイル542を生
成する。
【0044】1.3 フィールドオフセットテーブル ここでは、軽量基礎クラスファイルに対するクラス設計
非依存フィールドオフセットテーブル、及びクラス設計
依存フィールドオフセットテーブル、並びに軽量ユーザ
クラスファイルに対するクラス設計非依存フィールドオ
フセットテーブルについて、図11〜図13を用いて、
より具体的に説明する。
【0045】これらのフィールドオフセットテーブル
は、プログラム生成装置10により生成されるものであ
り、フィールドオフセット番号及びインスタントフィー
ルドからなる組を複数個含む領域を備えている。これら
のフィールドオフセットテーブルは、命令変換部14に
より、getfield命令、putfield命令を
変換するときに、使用される。また、静的リンク部12
が処理を終了するときに、破棄される。
【0046】また、前記従来のプログラム実行システム
と同様に、ハードウェアの構成の一部が異なる2つの端
末装置A、端末装置Bにて同一のユーザクラスのソース
プログラムから生成される軽量ユーザクラスファイルを
実行させることを想定する。また、プログラム生成装置
10は、記憶部に図1〜図3に示すJavaプログラム
を記憶しているものとする。
【0047】(1)基礎クラスに対するクラス設計非依
存フィールドオフセットテーブル 図1及び図2にそれぞれ示す基礎クラスBuilt_in_class
X及び基礎クラスBuilt_in_classYに対応して生成される
クラス設計非依存フィールドオフセットテーブルを図1
1に示す。静的リンク部12の非依存テーブル生成部1
31は、基礎クラスBuilt_in_classX及び基礎クラスBui
lt_in_classYのそれぞれに対して、クラス設計非依存フ
ィールドオフセットテーブルを生成する。
【0048】図11の基礎クラスBuilt_in_classXに対
するクラス設計非依存フィールドオフセットテーブルに
示すように、非依存テーブル生成部131は、クラス設
計非依存フィールドfieldX1、fieldX2に対して、フィー
ルドオフセット番号「2」、「3」を定義順に割り当て
る。また、非依存テーブル生成部131は、オフセット
番号「1」に対応して確保される領域にnullを格納
する。インスタンスフィールドがnullである領域
は、端末装置でのインスタンス生成時にクラス設計依存
フィールドオフセットテーブルに対応する領域へのポイ
ンタを格納するインスタンス領域であることを示してい
る。
【0049】また、図11の基礎クラスBuilt_in_class
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はこれ
らを示している。
【0050】(2)基礎クラスに対するクラス設計依存
フィールドオフセットテーブル 基礎クラスBuilt_in_classX及び基礎クラスBuilt_in_cl
assYに対応して生成されるクラス設計依存フィールドオ
フセットテーブルを図12に示す。前記のクラス設計非
依存フィールドオフセットテーブルは端末装置A、端末
装置Bについて同一であるが、用いられるクラス設計依
存フィールドが端末装置A、端末装置Bでは異なるた
め、クラス設計依存フィールドオフセットテーブルは端
末装置A、端末装置Bでは異なるものとなる。実際、端
末装置Aに対しては、依存テーブル生成部132は、図
12(a)に示すようなクラス設計依存フィールドオフ
セットテーブルを基礎クラスごとに生成し、端末装置B
に対しては、図12(b)に示すようなクラス設計依存
フィールドオフセットテーブルを基礎クラスごとに生成
する。
【0051】以上説明したように、図9に示す軽量基礎
クラスファイル541が生成される際には、上記の基礎
クラスBuilt_in_classX、Built_in_classYに対応するク
ラス設計非依存フィールドオフセットテーブル、クラス
設計依存フィールドオフセットテーブルが生成される。 (3)ユーザクラスに対するクラス設計非依存フィール
ドオフセットテーブル 図10に示す軽量ユーザクラスファイル542が生成さ
れる際には、図13に示すようなユーザクラスUser_cla
ssに対応するクラス設計非依存フィールドオフセットテ
ーブルが生成され、さらに図14及び図15に示すイン
スタンスが端末装置20での実行に伴って生成される。
【0052】図13は、図3に示すユーザクラスUser_c
lassに対応して生成されるクラス設計非依存フィールド
オフセットテーブルを示す図であり、図14及び図15
は、それぞれ端末装置A、端末装置Bにて生成されるユ
ーザクラスUser_classのインスタンスを示す図である。
静的リンク部12の非依存テーブル生成部131は、ユ
ーザクラスUser_classに対して、クラス設計非依存フィ
ールドオフセットテーブルを生成する。
【0053】図13に示すように、非依存テーブル生成
部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はこれらを示している。
【0054】1.4 生成されるインスタンス 端末装置20のインスタンス生成部22は、図14及び
図15に示すインスタンスを生成する。端末装置Aのイ
ンスタンス生成部22は、まず、メモリ上に、図13に
示すクラス設計非依存フィールドオフセットテーブルに
対応して領域701を確保する。なお、詳細について
は、後述する。続いて、図12(a)に示すクラス設計
依存フィールドオフセットテーブルに対応して領域70
2、703を確保する。この後、クラス設計非依存フィ
ールドオフセットテーブルに対応する領域701中のイ
ンスタンスフィールドnullに対応する2つのポイン
タ領域にそれぞれ順に、基礎クラスBuilt_in_
classXのクラス設計依存フィールドオフセットテ
ーブルに対応する領域702へのポインタ、及び基礎ク
ラスBuilt_in_classYのクラス設計依存
フィールドオフセットテーブルに対応する領域703へ
のポインタを格納する。このようにして、インスタンス
生成部22は、インスタンスを生成する。
【0055】同様に、端末装置Bのインスタンス生成部
22は、まず、メモリ上に、図13に示すクラス設計非
依存フィールドオフセットテーブルに対応して領域71
1を確保し、続いて、図12(b)に示すクラス設計依
存フィールドオフセットテーブルに対応して領域71
2、713を確保する。この後、クラス設計非依存フィ
ールドオフセットテーブルに対応する領域711中のイ
ンスタンスフィールドnullに対応する2つのポイン
タ領域にそれぞれ順に、基礎クラスBuilt_in_classXの
クラス設計依存フィールドオフセットテーブルに対応す
る領域712へのポインタ、及び基礎クラスBuilt_in_c
lassYのクラス設計依存フィールドオフセットテーブル
に対応する領域713へのポインタを格納する。このよ
うにして、インスタンス生成部22は、インスタンスを
生成する。
【0056】端末装置A及び端末装置Bでは、図14及
び図15に示すようなインスタンスが生成されるので、
例えば、ユーザクラスUser_classのfieldU1は、端末装
置A及び端末装置Bにて同様に、インスタンスに対応す
る領域中、第8番目の変数としてアクセスされることと
なる。プログラム実行システム1では、端末装置20が
上記のようにしてインスタンスを生成するので、静的リ
ンク部12の命令変換部14は、図16に示すようなク
ラス設計非依存フィールドに対応するgetfield命令及び
putfield命令のオペランドの変換を行う。
【0057】具体的には、図16(a)に示す、通常の
Javaのユーザクラスのクラスファイルにおいて、pu
tfield命令のオペランドとなっている<User_class.fiel
dU1>及びgetfield命令のオペランドとなっている<User_
class.fieldU2>は、コンスタントプールでのオフセット
を示している。命令変換部14は、上述のようなインス
タンスフィールドオフセットテーブルに基づいて、イン
スタンス領域中で、オフセットをインスタンスフィール
ドを特定するオフセット番号に変換する。また、「new
命令」のオペランドとなっている<User_class>について
も、同様に、所定の番号化を行う。その結果、図16
(b)に示すクラスファイルが得られる。この図に示す
ように、クラスファイル中のputfield命令及びgetfield
命令のオペランドが、「8」及び「9」に変換されてい
る。
【0058】命令変換部14は、さらに、次に示すよう
なクラス設計依存フィールドに対応するgetfield命令及
びputfield命令のオペランドの変換を行う。図17は、
コンパイルされて基礎クラスファイルが生成される元と
なるJavaプログラムの例を示す図である。なお、図
17には、フィールドの定義のみを示しており、フィー
ルドの具体的な使用に関する記述を省略している。図1
8は、図17に示すインスタンスフィールドに対応し、
前記変換後のgetfield命令のオペランドを示す図であ
る。なお、putfield命令のオペランドについても同様で
ある。
【0059】図17に示すように、クラスAでは、クラ
ス設計非依存フィールドとして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つ目のオペランドは、クラス設計依存
フィールドでのオフセット番号を示す。
【0060】具体的には、図19(a)に示す端末装置
Aの基礎クラスBuilt_in_classYのクラスファイルにお
いて、putfield命令のオペランドとなっている<Built_i
n_classY.fieldU1>及びgetfield命令のオペランドとな
っている<Built_in_classY.privateY1>は、コンスタン
トプールでのオフセットを示している。命令変換部14
は、上述のようなインスタンスフィールドオフセットテ
ーブルに基づいて、インスタンス領域中で、オフセット
をインスタンスフィールドを特定するオフセット番号に
変換する。また、「new命令」のオペランドとなってい
る<Built_in_classY>についても、同様に、所定の番号
化を行う。その結果、図19(b)に示すクラスファイ
ルが得られる。
【0061】1.5 クラスID対応テーブル クラスID対応テーブルは、クラス名とクラスIDとを
対応付けて記憶しているデータテーブルである。クラス
ID(クラス識別子)は、軽量クラスファイルにおい
て、各クラスを識別するための番号である。クラスID
は、重複を許さない。基礎クラスについては、1から、
連続した番号で、7FFFまでを割り当てる。ユーザク
ラスについては、8001から、連続した番号で、FF
FFまでを割り当てる。
【0062】クラスID対応テーブルは、命令変換部1
4により、new命令変換の際に使用される。また、静
的リンク部12の処理が終了するときに、破棄される。
図20及び図21に、クラスID対応テーブルの一例を
それぞれ示す。図20に示す基礎クラスID対応テーブ
ルは、基礎クラスについて、クラス名とクラスIDとを
対応付けて記憶している。また、図21に示すユーザク
ラスID対応テーブルは、ユーザクラスについて、クラ
ス名とクラスIDとを対応付けて記憶している。
【0063】1.6 フィールドカウントテーブル フィールドカウントテーブルには、クラス設計非依存フ
ィールドカウントテーブルと、クラス設計依存フィール
ドカウントテーブルとがある。 (1)クラス設計非依存フィールドカウントテーブル クラス設計非依存フィールドカウントテーブルは、クラ
スIDと非依存フィールドカウントとスーパークラスI
Dとを対応付けて記憶しているデータテーブルである。
【0064】クラスIDは、上記に説明した通りであ
る。非依存フィールドカウントは、対応するクラスID
により識別されるクラス内の非依存フィールドの数を示
す。スーパークラスIDは、対応するクラスIDにより
識別されるクラスのスーパークラスのクラスIDを示
す。
【0065】クラス設計非依存フィールドカウントテー
ブルの一例を図22及び図23に示す。図22に示すク
ラス設計非依存フィールドカウントテーブルは、端末装
置A及びBに共通の軽量基礎クラスファイルに対するも
のである。また、図23に示すクラス設計非依存フィー
ルドカウントテーブルは、端末装置A及びBに共通の軽
量ユーザクラスファイルに対するものである。
【0066】(2)クラス設計依存フィールドカウント
テーブル クラス設計依存フィールドカウントテーブルは、クラス
IDと非依存フィールドオフセットと依存フィールドカ
ウントとスーパークラスIDとを対応付けて記憶してい
るデータテーブルである。クラスIDは、上記に説明し
た通りである。
【0067】非依存フィールドオフセットは、対応する
クラスIDにより識別されるクラスの非依存フィールド
のオフセット番号を示す。依存フィールドカウントは、
対応するクラスIDにより識別されるクラス内の依存フ
ィールドの数を示す。スーパークラスIDは、対応する
クラスIDにより識別されるクラスのスーパークラスの
クラスIDを示す。
【0068】クラス設計依存フィールドカウントテーブ
ルの一例を図24(a)、(b)に示す。図24(a)
のクラス設計依存フィールドカウントテーブルは、端末
装置Aの軽量基礎クラスファイルに対するものである。
図24(b)のクラス設計依存フィールドカウントテー
ブルは、端末装置Bの軽量基礎クラスファイルに対する
ものである。
【0069】1.7 プログラム実行システム1の動作 プログラム実行システム1の動作は、プログラム生成装
置10及び端末装置20において、図25〜図30のフ
ローチャートに示すような制御が行われることにより実
現される。 (1)基礎クラスファイルに対するリンクの動作 基礎クラスファイルに対するリンク処理の手順につい
て、図25〜図27に示すフローチャートを用いて説明
する。
【0070】静的リンク部12は、利用者により指定さ
れた基礎クラスファイルを読み込み(ステップS10
1)、すでに読み込まれたクラスファイル中において、
まだ読み込まれていないクラスファイルが、使用されて
いるか否かを判定し、まだ読み込まれていないクラスフ
ァイルが、すでに読み込まれたクラスファイル中で使用
されているときには(ステップS102にてYes)、
前記まだ読み込まれていないクラスファイルを読み込み
(ステップS103)、ステップS102へ戻り、まだ
読み込まれていないクラスファイルが、すでに読み込ま
れたクラスファイル中で使用されていないと判定される
まで(ステップS102にてNo)、ステップS103
において、基礎クラスファイルの読込みを繰り返す。
【0071】まだ読み込まれていないクラスファイル
が、すでに読み込まれたクラスファイル中で使用されて
いないと判定されると(ステップS102にてNo)、
オフセットテーブル生成部13は、オフセットテーブル
の生成処理を行い(ステップS104a)、命令変換部
14は、命令変換の処理を行い(ステップS110
a)、リンク部15は、その他のリンク処理を行い(ス
テップS112)、静的リンク部12は、軽量基礎クラ
スファイルを記憶部へ書き込み(ステップS113)、
基礎クラス定義ファイルを記憶部へ書き込む(ステップ
S114)。
【0072】このようにして、基礎クラスファイルに対
するリンク処理は、終了して、軽量基礎クラスファイル
と、基礎クラス定義ファイルが生成される。 (オフセットテーブル生成部13の動作)次に、ステッ
プS104aのオフセットテーブルの生成処理の詳細に
ついて、図26に示すフローチャートを用いて、説明す
る。
【0073】オフセットテーブル生成部13は、読み込
まれたクラスのうちで、インスタンスフィールドオフセ
ットテーブルが生成されていないクラスを対象として設
定し(ステップS104)、設定されたクラスのスーパ
ークラスが存在しないか、または、存在するときに、ス
ーパークラスには、インスタンスフィールドオフセット
テーブルが生成されているかを判定する。
【0074】設定されたクラスのスーパークラスが存在
しない、または、存在するときに、スーパークラスに
は、インスタンスフィールドオフセットテーブルが生成
されていると判定された場合に(ステップS105にて
Yes)、対象となるクラスに「1」から始まる連続す
る番号のクラスIDを付加し(ステップS107a)、
対象クラスのクラス名とクラスIDとを、図20に示す
ような基礎クラスID対応テーブルに追加して書き込み
(ステップS107b)、依存フィールドの1個のポイ
ンタ格納用領域と、対象クラスの非依存フィールドとを
取り出して、図11に示すような、スーパークラスのク
ラス設計非依存フィールドオフセットテーブルに追加
し、前記クラス設計非依存フィールドオフセットテーブ
ルを命令変換部14へ出力する。ここで、対象クラスの
スーパークラスが存在しないときには、対象クラスの非
依存フィールドからクラス設計非依存フィールドオフセ
ットテーブルを生成する(ステップS107c)。次
に、図22に示すように、非依存フィールドカウントテ
ーブルに、対象クラスのクラスID、非依存フィールド
カウント、スーパークラスIDを追加して書き込む。こ
こで、ステップS107cで生成した、クラス設計非依
存フィールドオフセットテーブルを元にして、ポインタ
領域及び継承元の非依存フィールド数を含めて、非依存
フィールドの数を数えて、非依存フィールドカウントを
算出する(ステップS107d)。
【0075】次に、オフセットテーブル生成部13は、
対象クラスの依存フィールドのみを取り出し、図12に
示すような、クラス設計依存フィールドオフセットテー
ブルを生成し、生成したクラス設計依存フィールドオフ
セットテーブルを命令変換部14へ出力し(ステップS
108a)、図24に示す依存フィールドカウントテー
ブルに、対象クラスのクラスID、非依存フィールドオ
フセット、依存フィールドカウント、スーパークラスI
Dを追加して書き込む。ここで、前記生成したクラス設
計依存フィールドオフセットテーブルを元にして、対象
クラスの依存フィールドのみの数を数えることにより、
依存フィールドカウントを算出する。対象クラスのスー
パークラスが無いときには、スーパークラスIDとし
て、「0」を書き込む(ステップS108b)。
【0076】次に、オフセットテーブル生成部13は、
インスタンスフィールドオフセットテーブルが生成され
ていないクラスが存在するか否かを判断し、存在する場
合(ステップS109で、Yes)、ステップS104
へ戻って処理を繰り返す。存在しない場合、(ステップ
S109で、No)、オフセットテーブル生成部13
は、処理を終了する。
【0077】設定されたクラスのスーパークラスが存在
しない、または、存在するときに、スーパークラスに
は、インスタンスフィールドオフセットテーブルが生成
されていると判定されなかった場合に(ステップS10
5にてNo)、オフセットテーブル生成部13は、スー
パークラスを対象とし(ステップS106)、次に、ス
テップS105へ戻る。
【0078】(命令変換部14の動作)次に、ステップ
S110aの命令変換の詳細について、図27に示すフ
ローチャートを用いて、説明する。命令変換部14は、
未変換のgetfield命令のオペランド、putfield命令のオ
ペランドがあるか否かを判定し、未変換のオペランドが
存在する場合に(ステップS110にてYes)、次
に、依存フィールドへのアクセス命令であるか否かを判
定し、依存フィールドへのアクセス命令であるときに
(ステップS111aにてYes)、dependent修飾命
令を付加し、対象クラスの依存フィールドカウントテー
ブルを参照して、第1オペランドに非依存フィールドオ
フセットを設定し、対象クラスの依存フィールドオフセ
ットテーブルを参照して、第2オペランドに依存フィー
ルドオフセットを設定することにより、命令変換を行い
(ステップS111c)、ステップS110へ戻る。
【0079】依存フィールドへのアクセス命令でないと
きに(ステップS111aにてNo)、対象クラスの非
依存フィールドオフセットテーブルを参照して、第1オ
ペランドに非依存フィールドオフセットを設定すること
により、命令変換を行い(ステップS111b)、ステ
ップS110へ戻る。未変換のオペランドが存在しない
場合に(ステップS110にてNo)、未処理のnew命
令があるか否かを判定し、あると判定される場合に(ス
テップS111dにてYes)、クラスIDテーブルを
参照して、クラス名をクラスIDに変える命令変換を行
い(ステップS111e)、ステップS111dへ戻
る。
【0080】未処理のnew命令がないと判定される場
合に(ステップS111dにてNo)、非依存フィール
ドカウントテーブル及び依存フィールドカウントテーブ
ルを書き込み(ステップS111f)、命令変換部14
の処理を終了する。 (2)ユーザクラスファイルに対するリンクの動作 ユーザクラスファイルに対するリンク処理の手順につい
て、図28〜図30に示すフローチャートを用いて説明
する。
【0081】静的リンク部12は、利用者により指定さ
れたユーザクラスファイルを読み込み(ステップS20
1)、基礎クラス定義ファイルを読み込み(ステップS
202)、すでに読み込まれたクラスファイル中におい
て、まだ読み込まれていないクラスファイルが、使用さ
れているか否かを判定し、まだ読み込まれていないクラ
スファイルが、すでに読み込まれたクラスファイル中で
使用されているときには(ステップS203にてYe
s)、前記まだ読み込まれていないクラスファイルを読
み込み(ステップS204)、ステップS203へ戻
り、まだ読み込まれていないクラスファイルが、すでに
読み込まれたクラスファイル中で使用されていないと判
定されるまで(ステップS203にてNo)、ステップ
S204において、ユーザクラスファイルの読込みを繰
り返す。
【0082】まだ読み込まれていないクラスファイル
が、すでに読み込まれたクラスファイル中で使用されて
いないと判定されると(ステップS203にてNo)、
オフセットテーブル生成部13は、オフセットテーブル
の生成処理を行い(ステップS205a)、命令変換部
14は、命令変換の処理を行い(ステップS210
a)、リンク部15は、その他のリンク処理を行い(ス
テップS212)、静的リンク部12は、軽量ユーザク
ラスファイルを記憶部へ書き込む(ステップS21
3)。
【0083】このようにして、ユーザクラスファイルに
対するリンク処理は、終了して、軽量ユーザクラスファ
イルが生成される。 (オフセットテーブル生成部13の動作)次に、ステッ
プS205aのオフセットテーブルの生成処理の詳細に
ついて、図29に示すフローチャートを用いて、説明す
る。
【0084】オフセットテーブル生成部13は、読み込
まれたクラスのうちで、インスタンスフィールドオフセ
ットテーブルが生成されていないクラスを対象として設
定する(ステップS205)。次に、対象クラスのスー
パークラスが基礎クラスか否かを判定し、基礎クラスで
あると判定される場合に(ステップS206aにてYe
s)、基礎クラス定義ファイルから、対象クラスのスー
パークラスの非依存フィールドオフセットテーブルを生
成し(ステップS206b)、次にステップS208a
へ制御を移す。
【0085】基礎クラスでないと判定される場合に(ス
テップS206aにてNo)、対象クラスのスーパーク
ラスには、インスタンスフィールドオフセットテーブル
が生成されているか否かを判定し、生成されていると判
定されるときに(ステップS206cにてYes)、次
にステップS208aへ制御を移す。生成されていない
と判定されるときに(ステップS206cにてNo)、
スーパークラスを対象とし(ステップS207)、次に
ステップS206aへ戻る。
【0086】オフセットテーブル生成部13は、対象と
なるクラスに「8001」から始まる連続する番号のク
ラスIDを付加し(ステップS208a)、対象クラス
のクラス名とクラスIDとを、図21に示すようなユー
ザクラスID対応テーブルに追加して書き込み(ステッ
プS208b)、対象クラスの非依存フィールドを取り
出して、図13に示すような、スーパークラスのクラス
設計非依存フィールドオフセットテーブルに追加し、前
記クラス設計非依存フィールドオフセットテーブルを命
令変換部14へ出力する(ステップS208c)。次
に、図23に示すように、非依存フィールドカウントテ
ーブルに、対象クラスのクラスID、非依存フィールド
カウント、スーパークラスIDを追加して書き込む。こ
こで、ステップS208cで生成した、クラス設計非依
存フィールドオフセットテーブルを元にして、継承元の
非依存フィールド数を含めて、対象クラスの非依存フィ
ールドの数を数えて、非依存フィールドカウントを算出
する(ステップS208d)。
【0087】次に、オフセットテーブル生成部13は、
インスタンスフィールドオフセットテーブルが生成され
ていないクラスが存在するか否かを判断し、存在する場
合(ステップS209で、Yes)、ステップS205
へ戻って処理を繰り返す。存在しない場合、(ステップ
S209で、No)、オフセットテーブル生成部13
は、処理を終了する。
【0088】(命令変換部14の動作)次に、ステップ
S210aの命令変換の詳細について、図30に示すフ
ローチャートを用いて、説明する。命令変換部14は、
未変換のgetfield命令のオペランド、putfield命令のオ
ペランドがあるか否かを判定し、未変換のオペランドが
存在する場合に(ステップS210にてYes)、次
に、対象クラスの非依存フィールドオフセットテーブル
を参照して、第1オペランドに非依存フィールドオフセ
ットを設定することにより、命令変換を行い(ステップ
S211a)、ステップS210へ戻る。
【0089】未変換のオペランドが存在しない場合に
(ステップS210にてNo)、未処理のnew命令があ
るか否かを判定し、あると判定される場合に(ステップ
S211bにてYes)、クラスIDテーブルを参照し
て、クラス名をクラスIDに変える命令変換を行い(ス
テップS211c)、ステップS211bへ戻る。未処
理のnew命令がないと判定される場合に(ステップS2
11cにてNo)、非依存フィールドカウントテーブル
を書き込み(ステップS211d)、命令変換部14の
処理を終了する。
【0090】(まとめ)前記対象として設定されている
クラスに対して、図13に示すようなクラス設計非依存
フィールドオフセットテーブルを生成する際には、すべ
てのクラスのクラス設計非依存フィールドに対し一意と
なり同一クラスのクラス設計非依存フィールドが連続す
るよう、かつインスタンスを生成する際クラス設計依存
フィールドオフセットテーブルへのポインタを格納する
領域が確保して、オフセット番号を割り当てる。特に、
スーパークラスから継承するインスタンスフィールドに
は、スーパークラスでそのインスタンスフィールドに割
り当てられたオフセット番号と同じオフセット番号を割
り当てる。
【0091】プログラム実行システム1では、基礎クラ
スから継承するクラス設計依存フィールドと、基礎クラ
スから継承し新たに定義されるクラス設計非依存フィー
ルドとは異なるテーブルにて管理され、静的リンク部1
2のユーザクラスファイルに対するリンク処理では、オ
フセットテーブル生成部13は、クラス設計依存フィー
ルドオフセットテーブルを考慮して、インスタンス生成
時に格納されるクラス設計依存フィールドオフセットテ
ーブルに対応する領域へのポインタのための固定長の領
域をクラス設計非依存フィールドオフセットテーブル中
に確保する。
【0092】クラス設計非依存フィールドオフセットテ
ーブル中、この固定長のポインタのための領域は端末装
置の種類によって異なるものではないため、生成される
クラス設計非依存フィールドオフセットテーブルは、端
末の種類に依存しないものとなる。軽量ユーザクラスフ
ァイル生成時には、クラス設計非依存フィールドオフセ
ットテーブルのみが生成され、依存テーブル生成部13
2は使用されることはない。
【0093】これらのようなユーザクラスファイルに対
するリンク処理に対し、基礎クラスファイルに対するリ
ンク処理では、すなわち、基礎クラス定義ファイルは読
み込まれることなく、基礎クラスファイルのみが読み込
まれ、非依存テーブル生成部131にて、図11に示す
ようなクラス設計非依存フィールドオフセットテーブル
が生成され、図12に示すような、端末装置の種類に応
じて異なるクラス設計依存フィールドオフセットテーブ
ルが生成されてリンク処理が行われ、軽量基礎クラスフ
ァイル及び基礎クラス定義ファイルが出力される。
【0094】(3)端末装置20の命令実行処理の動作 端末装置(軽装仮想マシン)20の命令実行処理の手順
を、図31及び図32に示すフローチャートを用いて説
明する。命令実行部21は、端末装置20により指定さ
れた軽量ユーザクラスファイルをメモリ内に読み込む
(ステップS331)。次に、命令実行部21は、メモ
リ内の軽量ユーザクラスファイル内の命令を順に1個ず
つ選択し、全ての命令の選択を終了すると(ステップS
300にて、Yes)、処理を終了する。
【0095】命令の選択が終了していないときには(ス
テップS300にて、No)、命令実行部21は、軽量
ユーザクラスファイル内の命令を先頭から順に1個ずつ
選択する(ステップS301)。 (putfield命令(又はgetfield命令)の処理)命令実行
部21は、選択した命令がputfield命令(又はgetfield
命令)であるか否かを判定する。選択した命令がputfiel
d命令(又はgetfield命令)である場合には(ステップS
302にて、Yes)、さらに、命令実行部21は、選
択した命令にdependetが付加されているか否かを判定す
る。
【0096】付加されていると判定するときは(ステッ
プS314にて、Yes)、命令実行部21は、スタッ
クに積まれているインスタンスのアドレスに、選択した
命令の第1オペランドである非依存フィールドオフセッ
トを加算することにより、依存フィールド領域へのポイ
ンタが格納されている領域Yを得(ステップS31
5)、次に、領域Yに格納されているポインタが指し示
すアドレスに、選択した命令の第2オペランドである依
存フィールドオフセットを加算することにより、putfie
ld命令(又は、getfield命令)の対象となる領域Xを得る
(ステップS316)。
【0097】付加されていないと判定するときは(ステ
ップS314にて、No)、命令実行部21は、スタッ
クに積まれているインスタンスのアドレスに、選択した
命令の第1オペランドである非依存フィールドオフセッ
トを加算することにより、putfield命令(又ハ、getfield命
令)ノ対象トなる領域Xを得る(ステップS313)。次
に、命令実行部21は、領域Xに対して、putfield命令
(又は、getfield命令)の処理を実行し、次にステップS
301へ戻って処理を繰り返す。
【0098】(new命令の処理)命令実行部21は、選択
した命令がnew命令であるか否かを判定する。選択した
命令がnew命令である場合には(ステップS303に
て、Yes)、さらに、インスタンス生成部22は、ne
w命令のオペランドで渡されたIDにより示され、new命
令の対象となるクラスを対象クラスとして選択する(ス
テップS304)。次に、インスタンス生成部22は、
軽量ユーザクラスファイルからクラス設計非依存フィー
ルドカウントテーブルを読み出し、対象クラスの非依存
フィールドカウント分の領域Xをメモリ上に確保する
(ステップS305)。
【0099】続いて、インスタンス生成部22は、領域
確保の対象としているクラスが基礎クラスであるか否か
を、クラスIDが7FFF以下であるか否かにより判定
する。対象としているクラスが基礎クラスでなければ
(ステップS306にてNo)、インスタンス生成部2
2は、軽量ユーザクラスファイルの非依存ファイルカウ
ントテーブルから、スーパークラスを得、得たスーパー
クラスを対象に設定し(ステップS307)、次にステ
ップS306へ戻って処理を繰り返す。
【0100】対象とてしているクラスが基礎クラスであ
れば(S306にてYes)、インスタンス生成部22
は、軽量基礎クラスファイルからクラス設計依存フィー
ルドカウントテーブルを読み出し、対象クラスの依存フ
ィールドカウント分の領域Yを確保し、(ステップS3
08a)、次に、領域Xの非依存フィールドオフセット
番目に領域Yへのポインタを格納する(ステップS30
8b)。
【0101】次に、インスタンス生成部22は、対象ク
ラスのスーパークラスが存在するか否かを、依存フィー
ルドカウントテーブルのスーパークラスIDが0でない
か否かにより判定する。対象とするクラスのスーパーク
ラスが存在する場合には(ステップS309にて、Ye
s)、インスタンス生成部22は、軽量基礎クラスフィ
ールドの依存フィールドカウントテーブルからスーパー
クラスを得、得たスーパークラスを対象し(ステップS
311)、ステップS308aへ戻って処理を繰り返
す。
【0102】対象とするクラスのスーパークラスが存在
しない場合には(ステップS309にて、No)、イン
スタンス生成部22は、領域Xへのポインタをスタック
に積み(ステップS310)、次に、ステップS301
へ戻って処理を繰り返す。 (その他の命令の処理)命令実行部21は、選択した命
令がnew命令でない場合には(ステップS303に
て、No)、従来の仮想マシンと同様に命令を実行し
(S312)、次に、S301へ戻って処理を繰り返
す。
【0103】(まとめ)プログラム実行システム1で
は、基礎クラスから継承するクラス設計依存フィールド
と、基礎クラスから継承しまた新たに定義されるクラス
設計非依存フィールドとは異なるテーブルにて管理され
る。ユーザクラスファイルがクラス設計依存フィールド
を使用する基礎クラスファイルを継承する場合、命令実
行処理中、インスタンス生成部22により、クラス設計
非依存フィールドオフセットテーブルとクラス設計依存
フィールドオフセットテーブルとに対しては別々に領域
が確保され、クラス設計非依存フィールドオフセットテ
ーブルに対応する領域中のポインタ領域にクラス設計依
存フィールドオフセットテーブルに対応する領域へのポ
インタが格納される。
【0104】クラス設計非依存フィールドオフセットテ
ーブル中このポインタのための領域は端末装置の種類に
よって異なるものではないため、クラス設計非依存フィ
ールドのインスタンスフィールドオフセット番号は端末
の種類に依存しないものとなる。こうして、同じインス
タンスフィールドオフセット番号により異なる種類の端
末装置間で同じクラス設計非依存フィールドをアクセス
できることとなる。上記に説明したように、生成された
カウントテーブルを含む軽量ユーザクラスファイルは端
末装置の種類に依存しないものであり、同一の軽量ユー
ザクラスファイルが異なる種類の複数の端末装置で実行
される。
【0105】プログラム実行システム1の端末装置20
のインスタンス生成部22では、インスタンス領域はフ
ィールドの型にかかわらず一定の長さで確保されること
を想定したが、インスタンス領域はフィールドの型に応
じて異なる長さで確保されるものとしてもよい。 1.8 具体例 プログラム実行システム1により用いられるJavaプ
ログラム及び生成されるインスタンスの具体例について
説明する。
【0106】(1)具体例1 コンパイルされてクラスファイルを生成する元となるJ
avaプログラムの一例を図33に示す。また、プログ
ラム実行システム1において、図33に示すJavaプ
ログラムに対応して生成されるインスタンスを図34
(a)に示す。図33に示すJavaプログラムにおい
て、クラスAでは、インスタンスフィールドとしてint
型のfieldA1、short型のfieldA2、byte型のfieldA3が定
義されている。
【0107】プログラム実行システム1では、これらの
インスタンスフィールドに対して、図34(a)に示す
ようなインスタンスが生成されることを想定している。
ここでは、fieldA1、fieldA2、fieldA3に対する領域
は、フィールドの型にかかわらず一定の長さで確保され
る。これに対し、同様のプログラム実行システムにおい
て、図34(b)に示すようなインスタンスが生成され
ることを想定することができる。ここでは、fieldA1、f
ieldA2、fieldA3に対する領域は、フィールドの型に応
じて異なる長さで確保されており、各フィールドに対し
てインスタンス領域の位置を特定するためのオフセット
番号が割り当てられている。
【0108】また、プログラム実行システム1では、軽
量クラスファイル中にインスタンスフィールドのカウン
ト数を含むカウントテーブルを含めて端末装置側に伝送
し、getfield命令及びputfield命令の実行の際にこれら
のテーブルを参照すること想定したが、このようなイン
スタンスフィールドオフセットテーブルを軽量クラスフ
ァイル中に含めることなく、オペランドの型の情報を含
むgetfield命令(及びputfield命令)を用いるものとし
てもよい。
【0109】(2)具体例2 コンパイルされてクラスファイルを生成する元となるJ
avaプログラムの一例を図35に示す。また、プログ
ラム実行システム1において、図35に示すJavaプ
ログラムに対応して生成される変換後のgetfield命令の
オペランドを図36(a)に示す。なお、putfield命令
のオペランドについても同様である。
【0110】ここでは、端末装置でのnew命令によるイ
ンスタンスの生成のためにインスタンス領域全体の大き
さを示す情報のみがプログラム生成装置から端末装置に
伝送されるものとする。また、特にインスタンスフィー
ルドに対するインスタンス領域はフィールドの型に応じ
て異なる長さで確保されるものとしているが、インスタ
ンスフィールドに対するインスタンス領域がフィールド
の型にかかわらず一定の長さで確保されるものとしても
よい。
【0111】図35に示すように、インスタンスフィー
ルドとして、クラスAではbyte型のfieldA1、short型の
fieldA2が定義されており、クラスBではint型のfieldB
1が定義されている。ここでは、クラスファイル中のget
field命令のオペランドは、オペランドの型が1バイト
(byte型)、2バイト(short型)、4バイト(int型、
参照型)のいずれであるかに応じてgetfield_b命令、get
field_s命令、getfield命令に変換される。
【0112】実際、図36(a)に示すように、クラス
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命令が用いられることと
なる。
【0113】1.9 まとめ 以上説明したように、プログラム実行システム1では、
同一の軽量ユーザクラスファイルを端末装置の種類に依
存することなく流通させ、種類の異なる複数の端末装置
で実行させることにより、軽量基礎クラスライブラリの
機能を拡張し、所望の動作を行わせることができるの
で、端末装置の軽量基礎クラスライブラリ部に合わせて
異なる軽量ユーザクラスファイルを生成する必要がなく
なることとなる。
【0114】軽量クラスファイルを用いるプログラム実
行システム1は、組み込み機器等の処理能力の低い端末
装置への適用に適しているものといえ、さらに上記のよ
うに同一の軽量ユーザクラスファイルを複数の端末装置
にて用いることは、プログラム開発者側での処理の負担
を軽減するものといえることとなる。なお、プログラム
実行システム1では、クラス設計依存フィールドをそれ
ぞれ基礎クラスファイル毎にまとめ、基礎クラスファイ
ル毎にクラス設計依存フィールドオフセットテーブルを
構成するものとし、継承する基礎クラスファイル毎にク
ラス設計非依存フィールドオフセットテーブルを区分し
て、クラス設計依存フィールドオフセットテーブルに対
応する領域へのポインタをクラス設計非依存フィールド
オフセットテーブル中の各基礎クラスファイルに対応す
る区分された領域の先頭に配置するものとしたが、クラ
ス設計依存フィールドオフセットテーブルに対応する領
域へのポインタをクラス設計非依存フィールドオフセッ
トテーブル中の各基礎クラスファイルに対応する区分さ
れた領域の最後に配置してもよい。
【0115】また、プログラム実行システム1では、ク
ラスはユーザクラス及び基礎クラスのいずれかに属する
ことを想定したが、たとえば情報サービスクラスのよう
にユーザクラス、基礎クラス以外の中間的なクラスを想
定してクラスを3段階の構成からなるものとし、ユーザ
クラスでは情報サービスクラス、基礎クラス中のクラス
設計依存フィールドを使用することができず、かつ、情
報サービスクラスでは基礎クラス中のクラス設計依存フ
ィールドを使用することができないものとしてもよい。
【0116】また、プログラム実行システム1では、修
飾子privateによりクラス設計依存フィールドが
定義されるものとしたが、これらとは異なるキーワード
を用いてクラス設計依存フィールドを実装するとしても
よい。また、プログラム実行システム1では、基礎クラ
スファイル毎にクラス設計依存フィールドオフセットテ
ーブルが構成されるものとしたが、プログラム実行シス
テム2では、継承するすべての基礎クラスファイルのク
ラス設計依存フィールドを1つのクラス設計依存フィー
ルドオフセットテーブルに記述するものとしてもよい。
また、プログラム実行システム3では、使用されるイン
スタンスフィールドの個数の最大値をあらかじめ想定
し、これらのための領域をクラス設計非依存テーブル中
に確保するものとしてもよい。プログラム実行システム
2及び3について、第2及び第3の実施の形態として、
以下において説明する。
【0117】2.第2の実施の形態 本発明の第2の実施の形態としてのプログラム実行シス
テム2について説明する。プログラム実行システム2
は、プログラム実行システム1と比較して、主としてク
ラス設計非依存フィールドオフセットテーブル及びクラ
ス設計依存フィールドオフセットテーブルの構成、並び
にこれらにかかわる動作が異なるものであり、これら以
外の構成、動作等については、プログラム実行システム
1に準ずるものである。
【0118】なお、以下の説明においては、従来のプロ
グラム実行システムと同様に、図1〜図3に示すJav
aプログラムがコンパイルされて用いられるものとす
る。 2.1 プログラム実行システム2の構成 (a)基礎クラスに対応して生成されるフィールドオフ
セットテーブル プログラム実行システム2において、基礎クラスに対応
して生成されるクラス設計非依存フィールドオフセット
テーブルを図37に示す。また、基礎クラスに対応して
生成されるクラス設計依存フィールドオフセットテーブ
ルを図38(a)及び(b)に示す。
【0119】図37の基礎クラスBuilt_in_classXに対
するクラス設計非依存フィールドオフセットテーブルに
示すように、クラス設計非依存フィールドfieldX1、fie
ldX2に対してはオフセット番号「2」、「3」が定義順
に割り当てられている。これらにより、基礎クラスファ
イル中のgetfield命令、putfield命令において、コンス
タントプール中のfieldX1、fieldX2を指示するオペラン
ドが、軽量基礎クラスファイル中では、端末装置でのイ
ンスタンス生成時に、インスタンス領域での先頭からの
オフセットを示す「2」、「3」にそれぞれ置き換えら
れる。
【0120】図37の基礎クラスBuilt_in_classXに対
するクラス設計非依存フィールドオフセットテーブル中
のオフセット番号「1」に対応して確保されるインスタ
ンス領域には、端末装置でのインスタンス生成時に、ク
ラス設計依存フィールドオフセットテーブルに対応する
領域へのポインタが格納される。前記クラス設計非依存
オフセットテーブル中のインスタンスフィールドのnull
はこれを示している。nullが示す意味は、図11に示す
基礎クラスBuilt_in_classXに対するクラス設計非依存
フィールドオフセットテーブルと同様である。
【0121】また、図37の基礎クラスBuilt_in_class
Yに対するクラス設計非依存フィールドオフセットテー
ブルに示すように、基礎クラスBuilt_in_classXから継
承するクラス設計非依存フィールドfieldX1、fieldX2、
及び基礎クラスBuilt_in_classYにて新たに定義される
クラス設計非依存フィールドfieldY1、fieldY2、fieldY
3には、オフセット番号「2」、「3」、「4」、
「5」、「6」が定義順に割り当てられている。
【0122】これらにより基礎クラスファイル中のgetf
ield命令、putfield命令において、コンスタントプール
中のfieldX1、fieldX2、fieldY1、fieldY2、fieldY3を
指示するオペランドが、端末装置でのインスタンス生成
時に、インスタンス領域からの先頭からのオフセットを
示す「2」、「3」、「4」、「5」、「6」にそれぞ
れ置き換えられる。
【0123】基礎クラスBuilt_in_classYに対するクラ
ス設計非依存フィールドオフセットテーブル中のオフセ
ット番号「1」に対応して確保されるインスタンス領域
には、端末装置でのインスタンス生成時に、クラス設計
依存フィールドオフセットテーブルに対応する領域への
ポインタが格納される。前記クラス設計非依存オフセッ
トテーブル中のインスタンスフィールドのnullはこれを
示している。
【0124】図11に示す基礎クラスBuilt_in_classY
に対するクラス設計依存フィールドオフセットテーブル
とは異なり、図37に示す基礎クラスBuilt_in_classY
に対するクラス設計依存フィールドオフセットテーブル
においては、クラス設計依存フィールドオフセットテー
ブルに対応する領域へのポインタのための領域は基礎ク
ラスBuilt_in_classX、Built_in_classYに対して1ヶ所
のみである。また、クラス設計依存フィールドオフセッ
トテーブルではこれら2つの基礎クラスに含まれるクラ
ス設計依存フィールドとオフセット番号との対応付けが
連続して記述されている。
【0125】これらのクラス設計非依存フィールドオフ
セットテーブルは、端末装置A、端末装置Bについて同
一であるが、用いられるクラス設計依存フィールドは端
末装置A、端末装置Bでは異なる。このため、クラス設
計依存フィールドオフセットテーブルは、端末装置A、
端末装置Bでは異なるものとなる。具体的には、端末装
置Aに対しては、図38(a)に示すように、クラス設
計依存フィールドオフセットテーブルが基礎クラス毎に
生成される。また、端末装置Bに対しては、図38
(b)に示すように、クラス設計依存フィールドオフセ
ットテーブルが基礎クラス毎に生成される。図38に示
すクラス設計依存フィールドオフセットテーブルにおい
ては、図11に示すクラス設計依存フィールドオフセッ
トテーブルとは異なり、基礎クラスBuilt_in_classYの
クラス設計依存フィールドオフセットテーブルは、基礎
クラスBuilt_in_classXのクラス設計依存フィールドオ
フセットテーブルの内容を含む。
【0126】(b)ユーザクラスに対応して生成される
クラス設計非依存フィールドオフセットテーブルとイン
スタンス 図3に示すユーザクラスUser_classに対応して生成され
るクラス設計非依存フィールドオフセットテーブルを図
39に示す。また、端末装置A、端末装置Bにて生成さ
れるユーザクラスUser_classのインスタンスを、それぞ
れ図40(a)、(b)に示す。
【0127】図39に示すユーザクラスUser_classに対
するクラス設計非依存フィールドオフセットテーブルに
おいて、基礎クラスBuilt_in_classYから継承するクラ
ス設計非依存フィールドには、基礎クラスBuilt_in_cla
ssYと同じオフセット番号「2」、「3」、「4」、
「5」、「6」が割り当てられる。また、新たに定義さ
れるクラス設計非依存フィールドには「7」、「8」が
割り当てられる。
【0128】端末装置でのインスタンス生成時に、クラ
ス設計非依存フィールドオフセットテーブル中のオフセ
ット番号「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において、インスタンスが生成される。
【0129】図40(b)に示すように、端末装置Bに
おいても同様に、図39に示すユーザクラスUser_class
のクラス設計非依存フィールドオフセットテーブルに対
応する領域731、及び図38(b)に示すクラス設計
依存フィールドオフセットテーブルに対する領域732
が順に確保さる。続いて、領域731中のインスタンス
フィールドnullに対応するポインタ領域に、基礎ク
ラスBuilt_in_classYのクラス設計依存
フィールドオフセットテーブルに対応する領域732へ
のポインタが格納される。このようして、端末装置Bに
おいて、インスタンスが生成される。
【0130】(c)フィールドカウントテーブル プログラム実行システムにおいて、用いられるフィール
ドカウントテーブルについて説明する。 (基礎クラスに対するクラス設計非依存フィールドカウ
ントテーブル)端末装置A及び端末装置Bに対する軽量
基礎クラスファイル内のクラス設計非依存フィールドカ
ウントテーブルの一例を、図41に示す。
【0131】このクラス設計非依存フィールドカウント
テーブルは、クラスID、非依存フィールドカウント及
びスーパークラスIDの組から構成されている。クラス
ID、非依存フィールドカウント及びスーパークラスI
Dについては、前述と同様であるので、説明を省略す
る。 (基礎クラスに対するクラス設計依存フィールドカウン
トテーブル)端末装置A及び端末装置Bに対する軽量基
礎クラスファイル内のクラス設計依存フィールドカウン
トテーブルの一例を、それぞれ図42(a)及び(b)
に示す。
【0132】これらのクラス設計依存フィールドカウン
トテーブルは、それぞれ、クラスID及び依存フィール
ドカウントの組から構成されている。クラスID及び依
存フィールドカウントについては、前述と同様であるの
で、説明を省略する。 (ユーザクラスに対するクラス設計非依存フィールドカ
ウントテーブル)端末装置A及び端末装置Bに対する軽
量ユーザクラスファイル内のクラス設計非依存フィール
ドカウントテーブルの一例を、図43に示す。
【0133】このクラス設計依存フィールドカウントテ
ーブルは、それぞれ、クラスID、非依存フィールドカ
ウント及びスーパークラスIDの組から構成されてい
る。クラスID、非依存フィールドカウント及びスーパ
ークラスIDについては、前述と同様であるので、説明
を省略する。 (d)命令変換の一例 命令変換の一例を以下に示す。
【0134】図44(a)に示す端末装置Aの基礎クラ
ス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」が付加されている。
【0135】また、図45(a)に示す、通常のJav
aのユーザクラスのクラスファイルにおいて、putfield
命令のオペランドとなっている<User_class.fieldU1>
は、コンスタントプールでのオフセットを示している。
プログラム実行システム2の命令変換部は、上述のよう
なインスタンスフィールドオフセットテーブルに基づい
て、インスタンス領域中で、オフセットをインスタンス
フィールドを特定するオフセット番号に変換する。ま
た、「new命令」のオペランドとなっている<User_class
>についても、同様に、所定の番号化を行う。その結
果、図45(b)に示すクラスファイルが得られる。こ
の図に示すように、クラスファイル中のputfield命令の
オペランドが、「7」に変換されている。
【0136】2.2 プログラム実行システム2の動作 プログラム実行システム2の動作について説明する。な
お、プログラム実行システム2の動作は、プログラム実
行システム1の動作と同様であるので、プログラム実行
システム1の動作との相違点を中心として説明する。 (1)基礎クラスファイルに対するリンクの動作 基礎クラスファイルに対するリンク処理の手順について
説明する。
【0137】(オフセットテーブル生成部13の動作)
プログラム実行システム2のオフセットテーブル生成部
13による、ステップS104aのオフセットテーブル
の生成処理の詳細について、図46に示すフローチャー
トを用いて、説明する。図46において、図26のフロ
ーチャートと同じ符号を付したステップは、図26のス
テップと同じであるので、説明を省略する。
【0138】ステップS107bの後、オフセットテー
ブル生成部13は、対象クラスの非依存フィールドを取
り出して、図37に示すような、スーパークラスのクラ
ス設計非依存フィールドオフセットテーブルに追加し、
前記クラス設計非依存フィールドオフセットテーブルを
命令変換部14へ出力する。ここで、対象クラスのスー
パークラスが存在しないときには、対象クラスの非依存
フィールドからクラス設計非依存フィールドオフセット
テーブルを生成し、依存フィールドのポインタ領域用領
域を先頭に1個追加する(ステップS401)。次に、
図41に示すように、非依存フィールドカウントテーブ
ルに、対象クラスのクラスID、非依存フィールドカウ
ント、スーパークラスIDを追加して書き込む。ここ
で、ステップS401で生成した、クラス設計非依存フ
ィールドオフセットテーブルを元にして、先頭のポイン
タ領域及び継承元の非依存フィールド数を含めて、非依
存フィールドの数を数えて、非依存フィールドカウント
を算出する(ステップS402)。
【0139】次に、オフセットテーブル生成部13は、
対象クラスの依存フィールドのみを取り出し、図38に
示すような、クラス設計依存フィールドオフセットテー
ブルを生成し、生成したクラス設計依存フィールドオフ
セットテーブルを命令変換部14へ出力し(ステップS
403)、図42に示す依存フィールドカウントテーブ
ルに、対象クラスのクラスID、依存フィールドカウン
トを追加して書き込む。ここで、前記生成したクラス設
計依存フィールドオフセットテーブルを元にして、継承
元の依存フィールド数を含めて、対象クラスの依存フィ
ールドの数を数えることにより、依存フィールドカウン
トを算出する。(ステップS404)。次に、ステップ
S109へ制御を移す。
【0140】(命令変換部14の動作)プログラム実行
システム2の命令変換部14による、ステップS110
aの命令変換の詳細について、図47に示すフローチャ
ートを用いて、説明する。図47において、図27のフ
ローチャートと同じ符号を付したステップは、図27の
ステップと同じであるので、説明を省略する。
【0141】ステップS111aの後で、ステップS4
11において、命令変換部14は、dependent修飾命令
を付加し、対象クラスの依存フィールドカウントテーブ
ルを参照して、第1オペランドに非依存フィールドオフ
セットを設定することにより、命令変換を行う。ここ
で、図44(a)に示す「putfield <Built_in_classY.
privateY1>」は、図44(b)の「dependent putfie
ld 4」に変換される。
【0142】また、ステップS111eにおいて、命令
変換部14は、クラスIDテーブルを参照して、クラス
名をクラスIDに変える命令変換を行う。ここで、図4
4(a)に示す「new <Built_in_classY>」は、図44
(b)に示す「new 2」に変換される。 (2)ユーザクラスファイルに対するリンクの動作 ユーザクラスファイルに対するリンク処理の手順につい
て説明する。
【0143】(オフセットテーブル生成部13の動作)
プログラム実行システム2のオフセットテーブル生成部
13による、ステップS205aのオフセットテーブル
の生成処理の詳細について、図48に示すフローチャー
トを用いて、説明する。図48において、図29のフロ
ーチャートと同じ符号を付したステップは、図26のス
テップと同じであるので、説明を省略する。
【0144】ステップS208bの後で、ステップS4
21において、オフセットテーブル生成部13は、図3
9に示すようなクラス設計非依存フィールドオフセット
テーブルを生成し、命令変換部14へ渡す。次に、ステ
ップS422において、図43に示すような、非依存フ
ィールドカウントテーブルに対象クラスのクラスID、
非依存フィールドカウント、スーパークラスIDを追加
して書き込む。
【0145】次に、ステップS209へ制御を移す。 (命令変換部14の動作)プログラム実行システム2の
命令変換部14による、ステップS210aの命令変換
の詳細について、図49に示すフローチャートを用い
て、説明する。図49において、図29のフローチャー
トと同じ符号を付したステップは、図29のステップと
同じであるので、説明を省略する。
【0146】ステップS210の後で、ステップS43
1において、命令変換部14は、対象クラスの非依存フ
ィールドオフセットテーブルを参照して、第1オペラン
ドに非依存フィールドオフセットを設定することにより
命令変換を行う。ここで、図45(a)に示す「putfie
ld <User_class.fieldU1>」は、図45(b)に示す「p
utfield 7」に変換される。次に、ステップS210へ
戻って処理を繰り返す。
【0147】また、ステップS211bの後で、ステッ
プS432において、命令変換部14は、クラスID対
応テーブルを参照してクラス名をクラスIDに変換する
命令変換を行う。ここで、図45(a)に示す「new <U
ser_class>」は、図45(b)に示す「new 8001」に変
換される。次に、ステップS211bへ戻って処理を繰
り返す。
【0148】(3)端末装置20の命令実行処理の動作 端末装置(軽装仮想マシン)20の命令実行処理の手順
について、図50及び図51に示すフローチャートを用
いて説明する。図50において、図31のフローチャー
トと同じ符号を付したステップは、図31のステップと
同じであり、また、図51において、図32のフローチ
ャートと同じ符号を付したステップは、図32のステッ
プと同じであるので、説明を省略する。
【0149】ステップS304の後で、ステップS44
1において、インスタンス生成部22は、軽量ユーザク
ラスファイルからクラス設計非依存フィールドカウント
テーブルを読み出し、対象クラスの非依存フィールドカ
ウント分の領域Xをメモリ上に確保する。メモリ上に確
保された領域Xの一例を図40(a)の符号721によ
り示す。次に、ステップS306へ制御を移す。
【0150】また、ステップS306の後で、ステップ
S442において、インスタンス生成部22は、軽量基
礎クラスファイルから、クラス設計依存フィールドカウ
ントテーブルを読み出し、対象クラスのフィールドカウ
ント分の領域Yを確保する。次に、ステップS442に
おいて、インスタンス生成部22は、領域Xの1番目
に、領域Yへのポインタを格納する。領域Xと領域Yと
の関係を図40(a)に示す。この図において、符号7
21により示される領域が領域Xであり、符号722に
より示される領域が領域Yである。次に、ステップS3
10へ制御を移す。
【0151】次に、ステップS314の後で、ステップ
S444において、命令実行部21は、スタックに積ま
れているインスタンスのアドレスに、オフセット1を加
算することにより、依存フィールド領域へのポインタが
格納されている領域Yを得、次に、ステップS445に
おいて、命令実行部21は、領域Yに格納されているポ
インタが指し示すアドレスに、選択した命令の第1オペ
ランドである依存フィールドオフセットを加算すること
により、putfield命令(又は、getfield命令)の対象とな
る領域Xを得る。
【0152】次に、ステップS317へ制御を移す。 2.3 まとめ 端末装置A及び端末装置Bでは、図40(a)及び
(b)に示すようなインスタンスが生成されるので、例
えば、ユーザクラスUser_classのfieldU1は、端末装置
A及び端末装置Bの両方において、同様に、インスタン
ス領域の7番目の変数としてアクセスされる。
【0153】以上説明したように、プログラム実行シス
テム2では、プログラム実行システム1と同様に、組み
込み機器等の処理能力の低い端末装置への適用に適して
いる。また、同一の軽量ユーザクラスファイルを複数の
端末装置に対して用いることができるので、プログラム
開発者側での処理の負担は軽減されることとなる。な
お、プログラム実行システム2においても、クラス設計
非依存テーブル中にてポインタ領域の位置を先頭から最
後に変更する等、プログラム実行システム1と同様の変
形を加えることができる。
【0154】3.第3の実施の形態 本発明の第3の実施の形態としてのプログラム実行シス
テム3について説明する。プログラム実行システム3
は、プログラム実行システム1と比較して、主としてク
ラス設計非依存フィールドオフセットテーブル及びクラ
ス設計依存フィールドオフセットテーブルの構成、並び
にこれらにかかわる動作が異なるものであり、これら以
外の構成、動作等については、プログラム実行システム
1に準ずるものである。
【0155】なお、以下の説明においては、従来のプロ
グラム実行システムと同様に、図1〜図3に示すJav
aプログラムがコンパイルされて用いられるものとす
る。プログラム実行システム3において、基礎クラスに
対応して生成されるクラス設計非依存フィールドオフセ
ットテーブルを図52に示す。また、基礎クラスに対応
して生成されるインスタンスフィールドオフセットテー
ブルを図53に示す。
【0156】プログラム実行システム3では、基礎クラ
スファイルにて用いられるクラス設計依存フィールドの
最大数はあらかじめ決められており、基礎クラスファイ
ルの設計者は、クラス設計依存フィールドが前記最大数
を超えないように基礎クラスファイルを設計する。基礎
クラス定義ファイルには、固定長のクラス設計依存フィ
ールドの最大数の情報以外の情報は含まれておらず、こ
こでは、一例として、そのクラス設計依存フィールドの
最大数を5であるとする。
【0157】また、プログラム実行システム3では、ク
ラス毎に、当該クラスに含まれるクラス設計非依存フィ
ールドの数を示す非依存フィールドカウントを計数す
る。次に、計数した非依存フィールドカウントと、固定
値としての依存フィールドカウントと、継承元のクラス
のフィールドカウントとを加算したカウントを算出し、
算出したカウントを含むカウントテーブルを生成し、生
成したカウントテーブルを軽量クラスファイルに追加し
て書き込む。
【0158】また、プログラム実行システム3では、プ
ログラム実行システム1及びプログラム実行システム2
とは異なり、基礎クラスのクラス設計依存フィールドオ
フセットテーブルは、新たに生成されることなく、クラ
ス設計非依存フィールドオフセットテーブルにクラス設
計依存フィールドに関する情報が加えられることにより
インスタンスフィールドオフセットテーブルが生成さ
れ、また、カウントテーブルが生成され、カウントテー
ブルを含む軽量クラスファイルがプログラム生成装置1
0から端末装置20に伝送されるものとする。
【0159】図52の基礎クラスBuilt_in_classXのク
ラス設計非依存フィールドオフセットテーブルに示すよ
うに、クラス設計非依存フィールド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」は、クラス設計依存フィールドのために確保
されている。
【0160】図53(a)、(b)にそれぞれ示すよう
な端末装置A、端末装置Bに対するインスタンスフィー
ルドオフセットテーブルは、上記で説明したクラス設計
非依存フィールドオフセットテーブルに、クラス設計依
存フィールドに関する情報が加えられることにより生成
される。図54は、図3に示すユーザクラスUser_class
に対応して生成されるインスタンスフィールドオフセッ
トテーブルを示す図であり、図55(a)及び(a)
は、端末装置A、端末装置Bにて生成されるユーザクラ
スUser_classのインスタンスを示す図である。
【0161】端末装置において使用されるクラス設計依
存フィールドの最大数はあらかじめ指定されているた
め、図54に示すように、ユーザクラスUser_classに対
するインスタンスフィールドオフセットテーブルは、端
末装置A、端末装置Bについて異なるものではなく、こ
れらのインスタンスフィールドオフセットテーブルを含
む軽量ユーザクラスファイルも、端末装置A、端末装置
Bについて同一のものが使用されることとなる。
【0162】実際、端末装置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番目の変数としてアクセスされる。
【0163】以上説明したように、プログラム実行シス
テム3では、プログラム実行システム1と同様に、組み
込み機器等の処理能力の低い端末装置への適用に適して
おり、同一の軽量ユーザクラスファイルを複数の端末装
置に対して用いることができるので、プログラム開発者
側での処理の負担は軽減されることとなる。さらに、端
末装置は、従来使用しているクラスファイルをそのまま
用いることができるため、より簡便にプログラム開発者
側での処理の負担を軽減するプログラム実行システムを
導入することができる。
【0164】なお、プログラム実行システム3では、基
礎クラス定義ファイルにはクラス設計依存フィールドの
最大数の情報のみを含めるものとしているが、他のイン
スタンスフィールドの定義に関する情報を含むように構
成してもよい。 4.その他の変形例 なお、本発明を上記の実施の形態に基づいて説明してき
たが、本発明は、上記の実施の形態に限定されないのは
もちろんである。以下のような場合も本発明に含まれ
る。 (1)本発明は、上記に示す方法であるとしてもよい。
また、これらの方法をコンピュータにより実現するコン
ピュータプログラムであるとしてもよいし、前記コンピ
ュータプログラムからなるデジタル信号であるとしても
よい。
【0165】また、本発明は、前記コンピュータプログ
ラム又は前記デジタル信号をコンピュータ読み取り可能
な記録媒体、例えば、フロッピー(登録商標)ディス
ク、ハードディスク、CD―ROM、MO、DVD、D
VD−ROM、DVD−RAM、半導体メモリなど、に
記録したものとしてもよい。また、これらの記録媒体に
記録されている前記コンピュータプログラム又は前記デ
ジタル信号であるとしてもよい。
【0166】また、本発明は、前記コンピュータプログ
ラム又は前記デジタル信号を、電気通信回線、無線又は
有線通信回線、インターネットを代表とするネットワー
ク等を経由して伝送するものとしてもよい。また、本発
明は、マイクロプロセッサとメモリとを備えたコンピュ
ータシステムであって、前記メモリは、上記コンピュー
タプログラムを記憶しており、前記マイクロプロセッサ
は、前記コンピュータプログラムに従って動作するとし
てもよい。
【0167】また、前記プログラム又は前記デジタル信
号を前記記録媒体に記録して移送することにより、又は
前記プログラム又は前記デジタル信号を前記ネットワー
ク等を経由して移送することにより、独立した他のコン
ピュータシステムにより実施するとしてもよい。 (2)上記実施の形態及び上記変形例をそれぞれ組み合
わせるとしてもよい。
【0168】
【発明の効果】上記の目的を達成するために、本発明
は、端末装置毎に異なる依存変数と各端末装置に共通の
非依存変数とが定義され、継承関係を有する複数のクラ
スが定義されている複数のクラスファイルを、端末装置
毎にリンクしてそれぞれ軽量クラスファイルを生成する
プログラム生成装置であって、継承関係を有する複数の
クラスがそれぞれ定義されている複数のクラスファイル
を記憶しており、各クラスにおいて、変数名によりそれ
ぞれ識別される依存変数と非依存変数とが定義され、各
クラスファイルは、変数毎に変数名を含む記憶手段と、
端末装置毎にリンクされる際に、複数の端末装置におい
て同じ変数名が付された非依存変数については同じ番号
となるように、前記記憶手段に記憶されている各クラス
ファイルに定義されている変数毎にオフセット番号を生
成する番号生成手段と、前記記憶手段に記憶されている
各クラスファイルについて、変数毎に、当該変数名を前
記番号生成手段により生成されたオフセット番号に置き
換えて軽量クラスファイルを生成する軽量クラスファイ
ル生成手段とを備える。
【0169】この構成によると、端末装置毎にリンクさ
れる際に、異なる端末装置において同じ変数名で識別さ
れる非依存変数については同じ番号となるように、前記
記憶手段に記憶されている各クラスファイルに定義され
ている変数毎に異なるオフセット番号を生成し、生成さ
れたオフセット番号に置き換えられた軽量クラスファイ
ルを生成するので、前記軽量クラスファイルを用いるこ
とにより、共通のプログラムをコンパイルし、リンクす
る際に、各端末装置毎のリンクが不要となる。
【0170】ここで、前記番号生成手段は、依存変数と
非依存変数とに対して、異なる番号体系により変数毎に
オフセット番号を生成するように構成してもよい。この
構成によると、依存変数と非依存変数とに対して、異な
る番号体系によりオフセット番号を生成するので、確実
に、異なる端末装置において同じ変数名で識別される非
依存変数については同じ番号となるようにできる。
【0171】ここで、前記プログラム生成装置におい
て、前記軽量クラスファイル生成手段は、さらに、クラ
ス毎に、当該クラスに含まれる非依存変数の数及び依存
変数の数をそれぞれを示す非依存変数カウント及び依存
変数カウントを計数し、計数した非依存変数カウント及
び依存変数カウントを軽量クラスファイルに追加するよ
うに構成してもよい。
【0172】この構成によると、仮想マシンにおいて、
軽量クラスファイルに含まれ、クラス毎に計数された非
依存変数カウント及び依存変数カウントを用いて、イン
スタンスを生成できる。ここで、前記プログラム生成装
置において、前記複数のクラスは、第1クラスと、前記
第1クラスを継承する第2クラスとを含み、前記番号生
成手段は、前記第2クラスについて、第2クラスのみに
おいて定義されている依存変数と、第1クラスから継承
する依存変数とに対して、異なる番号体系により変数毎
にオフセット番号を生成するように構成してもよい。
【0173】この構成によると、前記第2クラスについ
て、第2クラスのみにおいて定義されている依存変数
と、第1クラスから継承する依存変数とに対して、異な
る番号体系によりオフセット番号を生成するので、第2
クラスのみにおいて定義されている依存変数と、第1ク
ラスから継承する依存変数とを確実に区別することがで
きる。
【0174】ここで、前記プログラム生成装置におい
て、前記軽量クラスファイル生成手段は、さらに、クラ
ス毎に、当該クラスに含まれる非依存変数の数及び依存
変数の数をそれぞれを示す非依存変数カウント及び依存
変数カウントを計数し、計数した非依存変数カウント及
び依存変数カウントを軽量クラスファイルに追加するよ
うに構成してもよい。
【0175】この構成によると、仮想マシンにおいて、
軽量クラスファイルに含まれ、クラス毎に計数された非
依存変数カウント及び依存変数カウントを用いて、イン
スタンスを生成できる。ここで、前記プログラム生成装
置において、前記複数のクラスは、第1クラスと、前記
第1クラスを継承する第2クラスとを含み、前記番号生
成手段は、前記第2クラスについて、第2クラスのみに
おいて定義されている依存変数と、第1クラスから継承
する依存変数とに対して、1個の番号体系により変数毎
にオフセット番号を生成するように構成してもよい。
【0176】前記番号生成手段は、前記第2クラスにつ
いて、第2クラスのみにおいて定義されている依存変数
と、第1クラスから継承する依存変数とに対して、1個
の番号体系によりオフセット番号を生成するので、用い
られる番号体系が少なく、管理が容易である。ここで、
前記プログラム生成装置において、前記軽量クラスファ
イル生成手段は、さらに、クラス毎に、当該クラスに含
まれる非依存変数の数及び依存変数の数をそれぞれを示
す非依存変数カウント及び依存変数カウントを計数し、
計数した非依存変数カウント及び依存変数カウントを軽
量クラスファイルに追加するように構成してもよい。
【0177】この構成によると、仮想マシンにおいて、
軽量クラスファイルに含まれ、クラス毎に計数された非
依存変数カウント及び依存変数カウントを用いて、イン
スタンスを生成できる。ここで、前記プログラム生成装
置において、前記複数のクラスは、第1クラスと、前記
第1クラスを継承する第2クラスとを含み、前記番号生
成手段は、全ての依存変数と非依存変数とに対して、1
個の番号体系によりオフセット番号を生成し、ここで、
前記第2クラスについて、第2クラスのみにおいて定義
されている変数と、第1クラスから継承する変数とに対
して、一定の間隔を空けて変数毎にオフセット番号を生
成するように構成してもよい。
【0178】この構成によると、全ての依存変数と非依
存変数とに対して、1個の番号体系によりオフセット番
号を生成し、ここで、前記第2クラスについて、第2ク
ラスのみにおいて定義されている変数と、第1クラスか
ら継承する変数とに対して、一定の間隔を空けてオフセ
ット番号を生成するので、オフセット番号の管理が容易
である。
【0179】ここで、前記プログラム生成装置におい
て、前記軽量クラスファイル生成手段は、さらに、クラ
ス毎に、当該クラスに含まれる非依存変数の数を示す非
依存変数カウントを計数し、計数した非依存変数カウン
トと固定値としての依存変数カウントとを加算して得ら
れるカウントを軽量クラスファイルに追加するように構
成してもよい。
【0180】この構成によると、仮想マシンにおいて、
軽量クラスファイルに含まれ、クラス毎に計数された非
依存変数カウントを用いて、インスタンスを生成でき
る。また、本発明は、プログラム生成装置により生成さ
れた軽量クラスファイルに従って動作する仮想マシンで
あって、前記プログラム生成装置により生成された軽量
クラスファイルを記憶している記憶手段と、前記軽量ク
ラスファイルを読み出し、読み出した軽量クラスファイ
ル内の変数毎のオフセット番号に基づいて、インスタン
スを生成するインスタンス生成手段と、生成されたイン
スタンスを用いて、軽量クラスファイル内に定義されて
いる命令を実行する実行手段とを備える。
【0181】この構成によると、前記プログラム生成装
置により生成された軽量クラスファイル内の変数毎のオ
フセット番号に基づいて、インスタンスを生成するの
で、共通のプログラムをコンパイルし、リンクする際
に、各端末装置のリンクが不要となり、こうして生成さ
れたプログラムを各端末装置で実行できる。また、本発
明は、プログラム生成装置により生成された軽量クラス
ファイルに従って動作する仮想マシンであって、前記プ
ログラム生成装置により生成された軽量クラスファイル
を記憶している記憶手段と、前記軽量クラスファイルを
読み出し、読み出した前記軽量クラスファイルに含まれ
るクラス毎に計数された非依存変数カウント及び依存変
数カウントに基づいて、メモリ上にそれぞれ第1領域と
第2領域とを確保し、前記第1領域へのポインタを前記
第2領域中に格納することにより、インスタンスを生成
するインスタンス生成手段と、生成されたインスタンス
を用いて、軽量クラスファイル内に定義されている命令
を実行する実行手段とを備える。
【0182】この構成によると、前記軽量クラスファイ
ルに含まれる第1テーブルと第2テーブルとに基づい
て、メモリ上にそれぞれ第1領域と第2領域とを確保
し、前記第1領域へのポインタを前記第2領域中に格納
することにより、インスタンスを生成するので、確実に
インスタンスの生成ができる。
【図面の簡単な説明】
【図1】従来のプログラム実行システムにおける、端末
装置Aにおいて、処理を行わせるための基礎クラスファ
イルを生成する元となり、Javaにより記述されたソ
ースプログラムの一例を示す。
【図2】従来のプログラム実行システムにおける、端末
装置Bにおいて、処理を行わせるための基礎クラスファ
イルを生成する元となり、Javaにより記述されたソ
ースプログラムの一例を示す。
【図3】従来のプログラム実行システムにおける、端末
装置A及びBにおいて、共通に使用されるユーザクラス
ファイルを生成する元となり、Javaにより記述され
たソースプログラムの一例を示す。
【図4】従来のプログラム実行システムにおける、端末
装置Aにおいて、基礎クラスファイルに対するインスタ
ンスフィールドオフセットテーブルを示す。
【図5】従来のプログラム実行システムにおける、端末
装置Bにおいて、基礎クラスファイルに対するインスタ
ンスフィールドオフセットテーブルを示す。
【図6】従来のプログラム実行システムにおける、端末
装置Aにおいて、ユーザクラスファイルに対するインス
タンスフィールドオフセットテーブルを示す。
【図7】従来のプログラム実行システムにおける、端末
装置Bにおいて、ユーザクラスファイルに対するインス
タンスフィールドオフセットテーブルを示す。
【図8】プログラム実行システム1の構成を示すブロッ
ク図である。
【図9】プログラム生成装置10が基礎クラスのソース
プログラム511から軽量基礎クラスファイル541を
生成する動作を示す。
【図10】プログラム生成装置10がユーザクラスのソ
ースプログラム512から軽量ユーザクラスファイル5
42を生成する動作を示す。
【図11】基礎クラスBuilt_in_classX及び基礎クラスB
uilt_in_classYに対応して生成されるクラス設計非依存
フィールドオフセットテーブルを示す。
【図12】(a)端末装置Aについて、基礎クラスBuil
t_in_classX及び基礎クラスBuilt_in_classYに対応して
生成されるクラス設計依存フィールドオフセットテーブ
ルを示す。 (b)端末装置Bについて、基礎クラスBuilt_in_class
X及び基礎クラスBuilt_in_classYに対応して生成される
クラス設計依存フィールドオフセットテーブルを示す。
【図13】ユーザクラスUser_classに対応するクラス設
計非依存フィールドオフセットテーブルを示す。
【図14】端末装置Aにて生成されるユーザクラスUser
_classのインスタンスを示す。
【図15】端末装置Bにて生成されるユーザクラスUser
_classのインスタンスを示す。
【図16】(a)変換前のJavaのユーザクラスのク
ラスファイルの一例を示す。 (b)変換後のJavaのユーザクラスのクラスファイ
ルの一例を示す。
【図17】コンパイルされて基礎クラスファイルが生成
される元となるJavaプログラムの一例を示す。
【図18】変換後のgetfield命令のオペランドの構造を
示す。
【図19】(a)端末装置Aの変換前の基礎クラスBuil
t_in_classYを示す。 (b)端末装置Aの変換後の基礎クラスBuilt_in_class
Yを示す。
【図20】基礎クラスのクラスID対応テーブルの一例
を示す。
【図21】ユーザクラスのクラスID対応テーブルの一
例を示す。
【図22】端末装置A及びBに共通の軽量基礎クラスフ
ァイルに対するクラス設計非依存フィールドカウントテ
ーブルの一例を示す。
【図23】端末装置A及びBに共通の軽量ユーザクラス
ファイルに対するクラス設計非依存フィールドカウント
テーブルの一例を示す。
【図24】(a)端末装置Aの軽量基礎クラスファイル
に対するクラス設計依存フィールドカウントテーブルの
一例を示す。 (b)端末装置Bの軽量基礎クラスファイルに対するク
ラス設計依存フィールドカウントテーブルの一例を示
す。
【図25】基礎クラスファイルに対するリンク処理の手
順を示すフローチャートである。
【図26】オフセットテーブルの生成処理の詳細を示す
フローチャートである。
【図27】命令変換の詳細を示すフローチャートであ
る。
【図28】ユーザクラスファイルに対するリンク処理の
手順を示すフローチャートである。
【図29】オフセットテーブルの生成処理の詳細を示す
フローチャートである。
【図30】命令変換の詳細を示すフローチャートであ
る。
【図31】端末装置20の命令実行処理の手順を示すフ
ローチャートである。図32に続く。
【図32】端末装置20の命令実行処理の手順を示すフ
ローチャートである。図31から続く。
【図33】コンパイルされてクラスファイルを生成する
元となるJavaプログラムの一例を示す。
【図34】(a)プログラム実行システム1において、
図33に示すJavaプログラムに対応して生成される
インスタンスを示す。 (b)別のプログラム実行システムにおいて、図33に
示すJavaプログラムに対応して生成されるインスタ
ンスを示す。
【図35】コンパイルされてクラスファイルを生成する
元となるJavaプログラムの一例を示す。
【図36】(a)図35に示すJavaプログラムに対
応して生成される変換後のgetfield命令のオペランドを
示す。クラスAに対応するものである。 (b)図35に示すJavaプログラムに対応して生成
される変換後のgetfield命令のオペランドを示す。クラ
スBに対応するものである。
【図37】プログラム実行システム2において、基礎ク
ラスに対応して生成されるクラス設計非依存フィールド
オフセットテーブルを示す。
【図38】(a)端末装置Aについて、基礎クラスに対
応して生成されるクラス設計依存フィールドオフセット
テーブルを示す。 (b)端末装置Bについて、基礎クラスに対応して生成
されるクラス設計依存フィールドオフセットテーブルを
示す。
【図39】図3に示すユーザクラスUser_classに対応し
て生成されるクラス設計非依存フィールドオフセットテ
ーブルを示す。
【図40】(a)端末装置Aにて生成されるユーザクラ
スUser_classのインスタンスを示す。 (b)端末装置Bにて生成されるユーザクラスUser_cla
ssのインスタンスを示す。
【図41】端末装置A及び端末装置Bに対する軽量基礎
クラスファイル内のクラス設計非依存フィールドカウン
トテーブルの一例を示す。
【図42】(a)端末装置Aに対する軽量基礎クラスフ
ァイル内のクラス設計依存フィールドカウントテーブル
の一例を示す。 (b)端末装置Bに対する軽量基礎クラスファイル内の
クラス設計依存フィールドカウントテーブルの一例を示
す。
【図43】端末装置A及び端末装置Bに対する軽量ユー
ザクラスファイル内のクラス設計非依存フィールドカウ
ントテーブルの一例を示す。
【図44】(a)変換前の端末装置Aの基礎クラスBuil
t_in_classYのクラスファイルの一例を示す。 (b)変換後の端末装置Aの基礎クラスBuilt_in_class
Yのクラスファイルの一例を示す。
【図45】(a)変換前のユーザクラスのクラスファイ
ルの一例を示す。 (b)変換後のユーザクラスのクラスファイルの一例を
示す。
【図46】基礎クラスファイルに対するリンクの動作に
おいて、プログラム実行システム2のオフセットテーブ
ル生成部13によるオフセットテーブルの生成処理の詳
細を示すフローチャートである。
【図47】基礎クラスファイルに対するリンクの動作に
おいて、プログラム実行システム2の命令変換部14に
よる命令変換の詳細を示すフローチャートである。
【図48】ユーザクラスファイルに対するリンクの動作
において、プログラム実行システム2のオフセットテー
ブル生成部13によるオフセットテーブルの生成処理の
詳細を示すフローチャートである。
【図49】ユーザクラスファイルに対するリンクの動作
において、プログラム実行システム2の命令変換部14
による命令変換の詳細を示すフローチャートである。
【図50】端末装置20の命令実行処理の手順を示すフ
ローチャートである。図51へ続く。
【図51】端末装置20の命令実行処理の手順を示すフ
ローチャートである。図51から続く。
【図52】基礎クラスBuilt_in_classX及び基礎クラスB
uilt_in_classYのクラス設計非依存フィールドオフセッ
トテーブルを示す。
【図53】(a)端末装置Aに対するインスタンスフィ
ールドオフセットテーブルを示す。 (b)端末装置Bに対するインスタンスフィールドオフ
セットテーブルを示す。
【図54】図3に示すユーザクラスUser_classに対応し
て生成されるインスタンスフィールドオフセットテーブ
ルを示す。
【図55】(a)端末装置Aにて生成されるユーザクラ
スUser_classのインスタンスを示す。 (b)端末装置Bにて生成されるユーザクラスUser_cla
ssのインスタンスを示す。
【符号の説明】
1 プログラム実行システム 2 プログラム実行システム 3 プログラム実行システム 10 プログラム生成装置 11 コンパイル部 12 静的リンク部 13 オフセットテーブル生成部 14 命令変換部 15 リンク部 20 端末装置 21 命令実行部 22 インスタンス生成部 131 非依存テーブル生成部 132 依存テーブル生成部

Claims (19)

    【特許請求の範囲】
  1. 【請求項1】 端末装置毎に異なる依存変数と各端末装
    置に共通の非依存変数とが定義され、継承関係を有する
    複数のクラスが定義されている複数のクラスファイル
    を、端末装置毎にリンクしてそれぞれ軽量クラスファイ
    ルを生成するプログラム生成装置であって、 継承関係を有する複数のクラスがそれぞれ定義されてい
    る複数のクラスファイルを記憶しており、各クラスにお
    いて、変数名によりそれぞれ識別される依存変数と非依
    存変数とが定義され、各クラスファイルは、変数毎に変
    数名を含む記憶手段と、 端末装置毎にリンクされる際に、複数の端末装置におい
    て同じ変数名が付された非依存変数については同じ番号
    となるように、前記記憶手段に記憶されている各クラス
    ファイルに定義されている変数毎にオフセット番号を生
    成する番号生成手段と、 前記記憶手段に記憶されている各クラスファイルについ
    て、変数毎に、当該変数名を前記番号生成手段により生
    成されたオフセット番号に置き換えて軽量クラスファイ
    ルを生成する軽量クラスファイル生成手段とを備えるこ
    とを特徴とするプログラム生成装置。
  2. 【請求項2】 前記番号生成手段は、依存変数と非依存
    変数とに対して、異なる番号体系により変数毎にオフセ
    ット番号を生成することを特徴とする請求項1に記載の
    プログラム生成装置。
  3. 【請求項3】 前記プログラム生成装置において、 前記軽量クラスファイル生成手段は、さらに、クラス毎
    に、当該クラスに含まれる非依存変数の数及び依存変数
    の数をそれぞれを示す非依存変数カウント及び依存変数
    カウントを計数し、計数した非依存変数カウント及び依
    存変数カウントを軽量クラスファイルに追加することを
    特徴とする請求項2に記載のプログラム生成装置。
  4. 【請求項4】 前記プログラム生成装置において、 前記複数のクラスは、第1クラスと、前記第1クラスを
    継承する第2クラスとを含み、 前記番号生成手段は、前記第2クラスについて、第2ク
    ラスのみにおいて定義されている依存変数と、第1クラ
    スから継承する依存変数とに対して、異なる番号体系に
    より変数毎にオフセット番号を生成することを特徴とす
    る請求項2に記載のプログラム生成装置。
  5. 【請求項5】 前記プログラム生成装置において、 前記軽量クラスファイル生成手段は、さらに、クラス毎
    に、当該クラスに含まれる非依存変数の数及び依存変数
    の数をそれぞれを示す非依存変数カウント及び依存変数
    カウントを計数し、計数した非依存変数カウント及び依
    存変数カウントを軽量クラスファイルに追加することを
    特徴とする請求項4に記載のプログラム生成装置。
  6. 【請求項6】 前記プログラム生成装置において、 前記複数のクラスは、第1クラスと、前記第1クラスを
    継承する第2クラスとを含み、 前記番号生成手段は、前記第2クラスについて、第2ク
    ラスのみにおいて定義されている依存変数と、第1クラ
    スから継承する依存変数とに対して、1個の番号体系に
    より変数毎にオフセット番号を生成することを特徴とす
    る請求項2に記載のプログラム生成装置。
  7. 【請求項7】 前記プログラム生成装置において、 前記軽量クラスファイル生成手段は、さらに、クラス毎
    に、当該クラスに含まれる非依存変数の数及び依存変数
    の数をそれぞれを示す非依存変数カウント及び依存変数
    カウントを計数し、計数した非依存変数カウント及び依
    存変数カウントを軽量クラスファイルに追加することを
    特徴とする請求項6に記載のプログラム生成装置。
  8. 【請求項8】 前記プログラム生成装置において、 前記複数のクラスは、第1クラスと、前記第1クラスを
    継承する第2クラスとを含み、 前記番号生成手段は、全ての依存変数と非依存変数とに
    対して、1個の番号体系によりオフセット番号を生成
    し、ここで、前記第2クラスについて、第2クラスのみ
    において定義されている変数と、第1クラスから継承す
    る変数とに対して、一定の間隔を空けて変数毎にオフセ
    ット番号を生成することを特徴とする請求項1に記載の
    プログラム生成装置。
  9. 【請求項9】 前記プログラム生成装置において、 前記軽量クラスファイル生成手段は、さらに、クラス毎
    に、当該クラスに含まれる非依存変数の数を示す非依存
    変数カウントを計数し、計数した非依存変数カウントと
    固定値としての依存変数カウントとを加算して得られる
    カウントを軽量クラスファイルに追加することを特徴と
    する請求項8に記載のプログラム生成装置。
  10. 【請求項10】 プログラム生成装置により生成された
    軽量クラスファイルに従って動作する仮想マシンであっ
    て、 請求項1のプログラム生成装置により生成された軽量ク
    ラスファイルを記憶している記憶手段と、 前記軽量クラスファイルを読み出し、読み出した軽量ク
    ラスファイル内の変数毎のオフセット番号に基づいて、
    インスタンスを生成するインスタンス生成手段と、 生成されたインスタンスを用いて、軽量クラスファイル
    内に定義されている命令を実行する実行手段とを備える
    ことを特徴とする仮想マシン。
  11. 【請求項11】 プログラム生成装置により生成された
    軽量クラスファイルに従って動作する仮想マシンであっ
    て、 請求項3のプログラム生成装置により生成された軽量ク
    ラスファイルを記憶している記憶手段と、 前記軽量クラスファイルを読み出し、読み出した前記軽
    量クラスファイルに含まれるクラス毎に計数された非依
    存変数カウント及び依存変数カウントに基づいて、メモ
    リ上にそれぞれ第1領域と第2領域とを確保し、前記第
    1領域へのポインタを前記第2領域中に格納することに
    より、インスタンスを生成するインスタンス生成手段
    と、 生成されたインスタンスを用いて、軽量クラスファイル
    内に定義されている命令を実行する実行手段とを備える
    ことを特徴とする仮想マシン。
  12. 【請求項12】 端末装置毎に異なる依存変数と各端末
    装置に共通の非依存変数とが定義され、継承関係を有す
    る複数のクラスが定義されている複数のクラスファイル
    を、端末装置毎にリンクしてそれぞれ軽量クラスファイ
    ルを生成するプログラム生成装置で用いられるプログラ
    ム生成方法であって、 前記プログラム生成装置は、継承関係を有する複数のク
    ラスがそれぞれ定義されている複数のクラスファイルを
    記憶しており、各クラスにおいて、変数名によりそれぞ
    れ識別される依存変数と非依存変数とが定義され、各ク
    ラスファイルは、変数毎に変数名を含む記憶手段を備
    え、 前記プログラム生成方法は、 端末装置毎にリンクされる際に、複数の端末装置におい
    て同じ変数名が付された非依存変数については同じ番号
    となるように、前記記憶手段に記憶されている各クラス
    ファイルに定義されている変数毎にオフセット番号を生
    成する番号生成ステップと、 前記記憶手段に記憶されている各クラスファイルについ
    て、変数毎に、当該変数名を前記番号生成手段により生
    成されたオフセット番号に置き換えて軽量クラスファイ
    ルを生成する軽量クラスファイル生成ステップとを含む
    ことを特徴とするプログラム生成方法。
  13. 【請求項13】 端末装置毎に異なる依存変数と各端末
    装置に共通の非依存変数とが定義され、継承関係を有す
    る複数のクラスが定義されている複数のクラスファイル
    を、端末装置毎にリンクしてそれぞれ軽量クラスファイ
    ルを生成するコンピュータで用いられるコンピュータプ
    ログラムを記憶しているコンピュータ読み取り可能な記
    録媒体であって、 前記コンピュータは、継承関係を有する複数のクラスが
    それぞれ定義されている複数のクラスファイルを記憶し
    ており、各クラスにおいて、変数名によりそれぞれ識別
    される依存変数と非依存変数とが定義されており、各ク
    ラスファイルは、変数毎に変数名を含む記憶手段を備
    え、 前記コンピュータプログラムは、 端末装置毎にリンクされる際に、複数の端末装置におい
    て同じ変数名が付された非依存変数については同じ番号
    となるように、前記記憶手段に記憶されている各クラス
    ファイルに定義されている変数毎にオフセット番号を生
    成する番号生成ステップと、 前記記憶手段に記憶されている各クラスファイルについ
    て、変数毎に、当該変数名を前記番号生成手段により生
    成されたオフセット番号に置き換えて軽量クラスファイ
    ルを生成する軽量クラスファイル生成ステップとを含む
    ことを特徴とする記録媒体。
  14. 【請求項14】 プログラム生成装置により生成された
    軽量クラスファイルに従って動作する仮想マシンで用い
    られるプログラム実行方法であって、 前記仮想マシンは、請求項1のプログラム生成装置によ
    り生成された軽量クラスファイルを記憶している記憶手
    段を備え、 前記プログラム実行方法は、 前記軽量クラスファイルを読み出し、読み出した軽量ク
    ラスファイル内の変数毎のオフセット番号に基づいて、
    インスタンスを生成するインスタンス生成ステップと、 生成されたインスタンスを用いて、軽量クラスファイル
    内に定義されている命令を実行する実行ステップとを含
    むことを特徴とするプログラム実行方法。
  15. 【請求項15】 プログラム生成装置により生成された
    軽量クラスファイルに従って動作する仮想マシンで用い
    られるコンピュータプログラムを記憶しているコンピュ
    ータ読み取り可能な記録媒体であって、 前記仮想マシンは、請求項1のプログラム生成装置によ
    り生成された軽量クラスファイルを記憶している記憶手
    段を備え、 前記コンピュータプログラムは、 前記軽量クラスファイルを読み出し、読み出した軽量ク
    ラスファイル内の変数毎のオフセット番号に基づいて、
    インスタンスを生成するインスタンス生成ステップと、 生成されたインスタンスを用いて、軽量クラスファイル
    内に定義されている命令を実行する実行ステップとを含
    むことを特徴とする記録媒体。
  16. 【請求項16】 請求項1のプログラム生成装置により
    生成された軽量クラスファイルを記憶しているコンピュ
    ータ読み取り可能な記録媒体。
  17. 【請求項17】 端末装置毎に異なる依存変数と各端末
    装置に共通の非依存変数とが定義され、継承関係を有す
    る複数のクラスが定義されている複数のクラスファイル
    を、端末装置毎にリンクしてそれぞれ軽量クラスファイ
    ルを生成するコンピュータで用いられるコンピュータプ
    ログラムであって、 前記コンピュータは、継承関係を有する複数のクラスが
    それぞれ定義されている複数のクラスファイルを記憶し
    ており、各クラスにおいて、変数名によりそれぞれ識別
    される依存変数と非依存変数とが定義されており、各ク
    ラスファイルは、変数毎に変数名を含む記憶手段を備
    え、 前記コンピュータプログラムは、 端末装置毎にリンクされる際に、複数の端末装置におい
    て同じ変数名が付された非依存変数については同じ番号
    となるように、前記記憶手段に記憶されている各クラス
    ファイルに定義されている変数毎にオフセット番号を生
    成する番号生成ステップと、 前記記憶手段に記憶されている各クラスファイルについ
    て、変数毎に、当該変数名を前記番号生成手段により生
    成されたオフセット番号に置き換えて軽量クラスファイ
    ルを生成する軽量クラスファイル生成ステップとを含む
    ことを特徴とするコンピュータプログラム。
  18. 【請求項18】 プログラム生成装置により生成された
    軽量クラスファイルに従って動作する仮想マシンで用い
    られるコンピュータプログラムであって、 前記仮想マシンは、請求項1のプログラム生成装置によ
    り生成された軽量クラスファイルを記憶している記憶手
    段を備え、 前記コンピュータプログラムは、 前記軽量クラスファイルを読み出し、読み出した軽量ク
    ラスファイル内の変数毎のオフセット番号に基づいて、
    インスタンスを生成するインスタンス生成ステップと、 生成されたインスタンスを用いて、軽量クラスファイル
    内に定義されている命令を実行する実行ステップとを含
    むことを特徴とするコンピュータプログラム。
  19. 【請求項19】 請求項1のプログラム生成装置により
    生成されたコンピュータプログラムとしての軽量クラス
    ファイル。
JP2001044020A 2000-02-21 2001-02-20 プログラム生成装置 Pending JP2001312406A (ja)

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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000029706A (ja) * 1997-10-31 2000-01-28 Sun Microsyst Inc クラスファイルのプリプロセシング及びパッケ―ジングのための方法及び装置

Patent Citations (1)

* Cited by examiner, † Cited by third party
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