JP2000047874A - プレロ―ドクラスのフットプリント低減装置及び方法 - Google Patents
プレロ―ドクラスのフットプリント低減装置及び方法Info
- Publication number
- JP2000047874A JP2000047874A JP11118431A JP11843199A JP2000047874A JP 2000047874 A JP2000047874 A JP 2000047874A JP 11118431 A JP11118431 A JP 11118431A JP 11843199 A JP11843199 A JP 11843199A JP 2000047874 A JP2000047874 A JP 2000047874A
- Authority
- JP
- Japan
- Prior art keywords
- class
- data structure
- preloaded
- members
- value
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44568—Immediately runnable code
- G06F9/44573—Execute-in-place [XIP]
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
(57)【要約】
【課題】 Java仮想マシンのような実行
時エンジンにより内部データ構造に対して割当てられる
ROM空間を低減する方法及び装置を提供する。 【解決手段】 内部データ構造は、実行時エンジ
ンによって実行されるアプリケーションによって使用さ
れるプレロードクラスに対するメンバ情報を記憶する。
装置は、クラスで表わされる異なるタイプの内部データ
構造を決定しかつ各タイプのメンバの可能値を識別す
る。次に、装置は、対応値テーブルの各タイプに対する
値を記憶するために必要な空間の量及びそのテーブルの
各エントリーにインデックスを付けるために必要なビッ
ト数を決定する。装置は、記憶された情報に基づいてメ
ンバのオカレンスが一組の値テーブルインデックス及び
値テーブルとして又は、通常の方法で、各オカレンスに
対するメンバの値を記憶する一般変数として最適に表わ
されるか否かを決定する。この決定は、一般変数の大き
さ、メンバのオカレンスの数、各インデックスに対して
必要なメモリ及び値テーブルの大きさに基づく。
時エンジンにより内部データ構造に対して割当てられる
ROM空間を低減する方法及び装置を提供する。 【解決手段】 内部データ構造は、実行時エンジ
ンによって実行されるアプリケーションによって使用さ
れるプレロードクラスに対するメンバ情報を記憶する。
装置は、クラスで表わされる異なるタイプの内部データ
構造を決定しかつ各タイプのメンバの可能値を識別す
る。次に、装置は、対応値テーブルの各タイプに対する
値を記憶するために必要な空間の量及びそのテーブルの
各エントリーにインデックスを付けるために必要なビッ
ト数を決定する。装置は、記憶された情報に基づいてメ
ンバのオカレンスが一組の値テーブルインデックス及び
値テーブルとして又は、通常の方法で、各オカレンスに
対するメンバの値を記憶する一般変数として最適に表わ
されるか否かを決定する。この決定は、一般変数の大き
さ、メンバのオカレンスの数、各インデックスに対して
必要なメモリ及び値テーブルの大きさに基づく。
Description
【0001】
【発明の属する技術分野】本発明は、一般にクラスプレ
ローダに関し、特に、プレロードJavaクラスの読取
り専用メモリ(ROM)における大きさを低減する装置
及び方法に関する。
ローダに関し、特に、プレロードJavaクラスの読取
り専用メモリ(ROM)における大きさを低減する装置
及び方法に関する。
【0002】
【従来の技術】Javaのプログラムは、多数の、クラ
スと呼ばれる小さなソフトウェアコンポーネントから構
成されている。各クラスは、コード及びデータを含みか
つ各々のクラスファイルの情報によって定義される。各
々のクラスファイルは、同じプラットフォーム独立クラ
スファイルフォーマットに従って編成される。図1を参
照すると、クラスファイルフォーマットのブロック図が
示されており、このフォーマットに従って各クラスファ
イル400は、ヘッダ情報402、定数プール404,
メソッドテーブル406及びフィールドテーブル408
を含む。ヘッダ情報402は、クラスファイルフォーマ
ット、定数プールの大きさ、メソッドテーブル406に
おけるメソッドの数及びフィールドテーブル408にお
けるフィールドの数を識別する。定数プール404は、
多様なストリング定数,クラスネーム、フィールドネー
ム及びクラスファイル構造やそのサブ構造内で参照され
る他の定数を表している構造のテーブルである。メソッ
ドテーブル406は、一つ以上のメソッド構造を含み、
各メソッド構造は、クラスによって明示的に宣言される
メソッドの完全な記述とそれに対するJavaコードを
付与する。フィールドテーブル408は、一つ一以上の
フィールド構造を含み、各フィールド構造は、クラスに
よって宣言されるフィールドの完全な記述を付与する。
ここで、図1Bを参照してフィールドテーブル408の
一例を説明する。
スと呼ばれる小さなソフトウェアコンポーネントから構
成されている。各クラスは、コード及びデータを含みか
つ各々のクラスファイルの情報によって定義される。各
々のクラスファイルは、同じプラットフォーム独立クラ
スファイルフォーマットに従って編成される。図1を参
照すると、クラスファイルフォーマットのブロック図が
示されており、このフォーマットに従って各クラスファ
イル400は、ヘッダ情報402、定数プール404,
メソッドテーブル406及びフィールドテーブル408
を含む。ヘッダ情報402は、クラスファイルフォーマ
ット、定数プールの大きさ、メソッドテーブル406に
おけるメソッドの数及びフィールドテーブル408にお
けるフィールドの数を識別する。定数プール404は、
多様なストリング定数,クラスネーム、フィールドネー
ム及びクラスファイル構造やそのサブ構造内で参照され
る他の定数を表している構造のテーブルである。メソッ
ドテーブル406は、一つ以上のメソッド構造を含み、
各メソッド構造は、クラスによって明示的に宣言される
メソッドの完全な記述とそれに対するJavaコードを
付与する。フィールドテーブル408は、一つ一以上の
フィールド構造を含み、各フィールド構造は、クラスに
よって宣言されるフィールドの完全な記述を付与する。
ここで、図1Bを参照してフィールドテーブル408の
一例を説明する。
【0003】Javaプログラムは、仮想マシン(以
下、VMと略称する)と呼ばれるプログラムを有してい
るコンピュータ上で実行され、仮想マシンは、Java
クラスにおけるコードを実行させる。通常、Javaプ
ログラムのクラスは、プログラムの実行過程において、
可能な限り後の方でロードされる:クラスは、プログラ
ム実行中に最初に参照されるときに、ネットワークサー
バ又はローカルファイルシステムからの命令によりロー
ドされる。VMは、各クラスを位置決めしかつロード
し、クラスファイルフォーマットを構文解析し、様々な
コンポーネントに対して内部データ構造を割り当て、か
つそれを他の既にロードされているクラスとリンクす
る。このプロセスは、クラスにおけるメソッドコードを
VMによって容易に実行可能にさせる。
下、VMと略称する)と呼ばれるプログラムを有してい
るコンピュータ上で実行され、仮想マシンは、Java
クラスにおけるコードを実行させる。通常、Javaプ
ログラムのクラスは、プログラムの実行過程において、
可能な限り後の方でロードされる:クラスは、プログラ
ム実行中に最初に参照されるときに、ネットワークサー
バ又はローカルファイルシステムからの命令によりロー
ドされる。VMは、各クラスを位置決めしかつロード
し、クラスファイルフォーマットを構文解析し、様々な
コンポーネントに対して内部データ構造を割り当て、か
つそれを他の既にロードされているクラスとリンクす
る。このプロセスは、クラスにおけるメソッドコードを
VMによって容易に実行可能にさせる。
【0004】ネットワークコネクション、ローカルファ
イルシステム又は他の永久記憶装置のような、クラス
ローディングに必要なファシリティに対して小さくかつ
埋め込み型のシステムが利用できないならば、クラスを
読取り専用メモリ(ROM)にプレロードすることが望
ましい。一つのプレローディング案は、アメリカ合衆国
特許出願番号08/655,474号(“読取り専用メ
モリ(ROM)にクラスをロードする方法及び装置”)
に記載されており、そのすべてはここにおいて参照文献
として採用される。この方法及び装置では、メモリのク
ラス、フィールド及びメソッドを表わしているVMのデ
ータ構造は、クラスプレローダによりオフラインで生成
される。次いで、プレローダ出力は、VMを含むシステ
ムにおいてリンクされかつ読取り専用メモリ(ROM)
に配置される。これは、クラスファイルを保存すること
及びダイナミックなクラスローディングを行うことの必
要性を取り除く。
イルシステム又は他の永久記憶装置のような、クラス
ローディングに必要なファシリティに対して小さくかつ
埋め込み型のシステムが利用できないならば、クラスを
読取り専用メモリ(ROM)にプレロードすることが望
ましい。一つのプレローディング案は、アメリカ合衆国
特許出願番号08/655,474号(“読取り専用メ
モリ(ROM)にクラスをロードする方法及び装置”)
に記載されており、そのすべてはここにおいて参照文献
として採用される。この方法及び装置では、メモリのク
ラス、フィールド及びメソッドを表わしているVMのデ
ータ構造は、クラスプレローダによりオフラインで生成
される。次いで、プレローダ出力は、VMを含むシステ
ムにおいてリンクされかつ読取り専用メモリ(ROM)
に配置される。これは、クラスファイルを保存すること
及びダイナミックなクラスローディングを行うことの必
要性を取り除く。
【0005】図2Aを参照すると、クラスプレローダに
よって生成されたVMデータ構造1200のより詳細な
ブロック図が示されている。データ構造1200は、ク
ラスブロック1202、複数のメソッドブロック120
4、複数のフィールドブロック1214及び定数プール
1224を含む。クラスブロック1202は、以下の情
報を含むことができる固定サイズのデータ構造である: *クラスネーム1230; *現行クラスに直近のスーパークラスのクラスブロック
へのポインタ12 32; *メソッドブロック1204へのポインタ1234; *フィールドブロック1214へのポインタ1236;
及び *クラスの定数プールへのポインタ1238; クラスブロックのデータ構造の構成要素は、ここではク
ラスブロックメンバと称される。メソッドブロック12
04は、クラスのメソッドの一つを表す固定サイズのデ
ータ構造である。メソッドブロックのデータ構造の構成
要素は、ここではメソッドブロックメンバと称される。
フィールドブロック1214は、クラスのインスタンス
変数の一つを表す固定サイズのデータ構造である。フィ
ールドブロックデータ構造の構成要素は、ここではフィ
ールドブロックメンバと称される。クラスブロック12
02、メソッドブロック1204、フィールドブロック
1214及び定数プール1224を含んでいる、各タイ
プのVMデータ構造は、対応するデータ構造宣言により
定義されたフォーマットを有する。例えば、単一のメソ
ッドブロック宣言は、全てのメソッドブロック1204
のフォーマットを定義する。また、データ構造宣言は、
データ構造メンバをアクセスするためにVMによって使
用されるアクセス関数(又はマクロ)を定義する。これ
らのデータ構造宣言は、VMの内部に対するものであ
り、クラスコンポーネントによって使用されない。ここ
で図2Bを参照して、従来技術のデータ構造宣言を説明
する。
よって生成されたVMデータ構造1200のより詳細な
ブロック図が示されている。データ構造1200は、ク
ラスブロック1202、複数のメソッドブロック120
4、複数のフィールドブロック1214及び定数プール
1224を含む。クラスブロック1202は、以下の情
報を含むことができる固定サイズのデータ構造である: *クラスネーム1230; *現行クラスに直近のスーパークラスのクラスブロック
へのポインタ12 32; *メソッドブロック1204へのポインタ1234; *フィールドブロック1214へのポインタ1236;
及び *クラスの定数プールへのポインタ1238; クラスブロックのデータ構造の構成要素は、ここではク
ラスブロックメンバと称される。メソッドブロック12
04は、クラスのメソッドの一つを表す固定サイズのデ
ータ構造である。メソッドブロックのデータ構造の構成
要素は、ここではメソッドブロックメンバと称される。
フィールドブロック1214は、クラスのインスタンス
変数の一つを表す固定サイズのデータ構造である。フィ
ールドブロックデータ構造の構成要素は、ここではフィ
ールドブロックメンバと称される。クラスブロック12
02、メソッドブロック1204、フィールドブロック
1214及び定数プール1224を含んでいる、各タイ
プのVMデータ構造は、対応するデータ構造宣言により
定義されたフォーマットを有する。例えば、単一のメソ
ッドブロック宣言は、全てのメソッドブロック1204
のフォーマットを定義する。また、データ構造宣言は、
データ構造メンバをアクセスするためにVMによって使
用されるアクセス関数(又はマクロ)を定義する。これ
らのデータ構造宣言は、VMの内部に対するものであ
り、クラスコンポーネントによって使用されない。ここ
で図2Bを参照して、従来技術のデータ構造宣言を説明
する。
【0006】図2Bを参照すると、特定のVMによって
採用される全てのデータ構造タイプのフォーマットを定
義するデータ構造宣言1230の図が示されている。各
宣言1230は、一組のメンバ宣言1232及び各メン
バをアクセスするためのアクセス関数1234を含む。
メンバ宣言1232及びアクセス関数1234は、VM
の実行に使用される言語の構文に従って通常定義され
る。例えば、データ構造宣言1230においてC言語が
使用されると仮定すると、一般的なフィールドデータ構
造1230.N(図2に示す)は、各々のアクセス関数
を有する以下の5つのタイプのメンバを有する構造Tと
して定義することができる: メンバ名 メンバタイプ アクセス関数 メンバ1 mタイプ1 mem1 of (T) T->member1 メンバ2 mタイプ2 mem2 of (T) T->member2 メンバ3 mタイプ3 mem3 of (T) T->member3 メンバ4 mタイプ4 mem4 of (T) T->member4 メンバ5 mタイプ5 mem5 of (T) T->member5
採用される全てのデータ構造タイプのフォーマットを定
義するデータ構造宣言1230の図が示されている。各
宣言1230は、一組のメンバ宣言1232及び各メン
バをアクセスするためのアクセス関数1234を含む。
メンバ宣言1232及びアクセス関数1234は、VM
の実行に使用される言語の構文に従って通常定義され
る。例えば、データ構造宣言1230においてC言語が
使用されると仮定すると、一般的なフィールドデータ構
造1230.N(図2に示す)は、各々のアクセス関数
を有する以下の5つのタイプのメンバを有する構造Tと
して定義することができる: メンバ名 メンバタイプ アクセス関数 メンバ1 mタイプ1 mem1 of (T) T->member1 メンバ2 mタイプ2 mem2 of (T) T->member2 メンバ3 mタイプ3 mem3 of (T) T->member3 メンバ4 mタイプ4 mem4 of (T) T->member4 メンバ5 mタイプ5 mem5 of (T) T->member5
【0007】この例では、メンバタイプは、整数、浮動
小数、文字もしくは倍精度のような、ユーザ定義タイプ
又は言語タイプを含んでいる、適切なコンピュータ言語
によって定義されるいずれかのタイプでありうる。アク
セス関数は、フィールドを含んでいる構造に直接アクセ
スすることを必要としないフィールドにアクセスするた
めにVMによって使用されるマクロである。例えば、構
造タイプTのフィールド1にアクセスするための式“T
−>member1”を採用するかわりに、VMは、式
“mem1 of (T)“を採用するだけでよい。ア
クセス関数は、Cのような、複雑なデータ構造ケーパビ
リティを供給するプログラミング言語において、よく知
られている。
小数、文字もしくは倍精度のような、ユーザ定義タイプ
又は言語タイプを含んでいる、適切なコンピュータ言語
によって定義されるいずれかのタイプでありうる。アク
セス関数は、フィールドを含んでいる構造に直接アクセ
スすることを必要としないフィールドにアクセスするた
めにVMによって使用されるマクロである。例えば、構
造タイプTのフィールド1にアクセスするための式“T
−>member1”を採用するかわりに、VMは、式
“mem1 of (T)“を採用するだけでよい。ア
クセス関数は、Cのような、複雑なデータ構造ケーパビ
リティを供給するプログラミング言語において、よく知
られている。
【0008】
【発明が解決しようとする課題】“クラスメタデータ”
(つまり、クラス、メソッド及びフィールドブロック1
202,1204、1214)を記憶するために使用さ
れる内部データ構造は、読取り専用メモリ(ROM)に
大きな、固定された量のスペースを必要とする。実際
に、測定した結果では、この種のクラスメタデータは、
クラスメソッドそのもののバイトコードよりずっと多く
の容量を使うことがしばしばである。従って、これらの
内部データ構造は、クラスプレロードされることが望ま
しい及び/又は必要である、小型の、リソース抑制型装
置に使用されるのは不向きである。更に、内部データ構
造がメモリスペースを節約するよう個々に変更された場
合には、VMが変更されたデータ構造に正確にアクセス
できるようVMコードを大規模に改訂しなければならな
い。VMに対してそのような変更を行うことは、面倒で
ありかつ効率が悪い。従って、従来技術のデータ構造よ
りもサイズが小さく、VMによって要求される全ての情
報を含み、かつ大規模或いは面倒なVMコードの変更を
必要としない内部データ構造の変更した表現が必要であ
る。
(つまり、クラス、メソッド及びフィールドブロック1
202,1204、1214)を記憶するために使用さ
れる内部データ構造は、読取り専用メモリ(ROM)に
大きな、固定された量のスペースを必要とする。実際
に、測定した結果では、この種のクラスメタデータは、
クラスメソッドそのもののバイトコードよりずっと多く
の容量を使うことがしばしばである。従って、これらの
内部データ構造は、クラスプレロードされることが望ま
しい及び/又は必要である、小型の、リソース抑制型装
置に使用されるのは不向きである。更に、内部データ構
造がメモリスペースを節約するよう個々に変更された場
合には、VMが変更されたデータ構造に正確にアクセス
できるようVMコードを大規模に改訂しなければならな
い。VMに対してそのような変更を行うことは、面倒で
ありかつ効率が悪い。従って、従来技術のデータ構造よ
りもサイズが小さく、VMによって要求される全ての情
報を含み、かつ大規模或いは面倒なVMコードの変更を
必要としない内部データ構造の変更した表現が必要であ
る。
【0009】
【課題を解決するための手段】本発明の上記課題は、実
行時環境に組み込まれるプレロードクラスのメモリフッ
トプリントを低減する方法であって:データ構造タイプ
のそれぞれが一つ以上のメンバ含んでおり、複数のプレ
ロードクラスを定義するために使用される一つ以上のク
ラスファイルで表わされる該データ構造のタイプを決定
し;メンバのそれぞれによって取られ得る個別の値を決
定し;プレロードクラスを構成している対応内部データ
構造のサイズを低減すべく選択されたメンバの少なくと
もサブセットに対して値のそれぞれを記憶し;記憶段階
で記憶された記憶値をアドレス指定するために一組の値
インデックスを生成し;かつ実行時環境が記憶値及び一
組の値インデックスとして表わされる選択メンバを使用
できるようにするアクセス関数及びメンバ宣言を生成す
る段階を具備する方法によって達成される。
行時環境に組み込まれるプレロードクラスのメモリフッ
トプリントを低減する方法であって:データ構造タイプ
のそれぞれが一つ以上のメンバ含んでおり、複数のプレ
ロードクラスを定義するために使用される一つ以上のク
ラスファイルで表わされる該データ構造のタイプを決定
し;メンバのそれぞれによって取られ得る個別の値を決
定し;プレロードクラスを構成している対応内部データ
構造のサイズを低減すべく選択されたメンバの少なくと
もサブセットに対して値のそれぞれを記憶し;記憶段階
で記憶された記憶値をアドレス指定するために一組の値
インデックスを生成し;かつ実行時環境が記憶値及び一
組の値インデックスとして表わされる選択メンバを使用
できるようにするアクセス関数及びメンバ宣言を生成す
る段階を具備する方法によって達成される。
【0010】また、本発明の上記課題は、実行時環境に
組み込まれるプレロードクラスのメモリフットプリント
を低減する装置であって:一組のクラスファイル;及び
クラスファイルから一組のプレロードクラスを生成すべ
く構成されるクラスプレローダ、及びメモリに割当てら
れた場合に該プレロードクラスの大きさを最小化すべく
構成される複数の内部データ構造宣言を備え、クラスプ
レローダは、一組の選択データ構造メンバのそれぞれが
該選択データ構造メンバの個別の値を保持している記憶
構造へのインデックスとして表わされるように内部デー
タ構造宣言を生成すべく構成される装置によって達成さ
れる。
組み込まれるプレロードクラスのメモリフットプリント
を低減する装置であって:一組のクラスファイル;及び
クラスファイルから一組のプレロードクラスを生成すべ
く構成されるクラスプレローダ、及びメモリに割当てら
れた場合に該プレロードクラスの大きさを最小化すべく
構成される複数の内部データ構造宣言を備え、クラスプ
レローダは、一組の選択データ構造メンバのそれぞれが
該選択データ構造メンバの個別の値を保持している記憶
構造へのインデックスとして表わされるように内部デー
タ構造宣言を生成すべく構成される装置によって達成さ
れる。
【0011】更に、本発明の上記課題は、実行エンジン
上で実行する実行時環境に組み込まれるべくプレロード
クラスのメモリフットプリントを低減させるためにコン
ピュータシステムで使用するコンピュータプログラムプ
ロダクトであり、コンピュータプログラムプロダクト
は、コンピュータ読取り可能記憶媒体及びそれに埋め込
まれたコンピュータプログラム機構を含んでおり、コン
ピュータプログラム機構は:一組のクラスファイルから
ププレロードクラスを生成すべく構成されるクラスプレ
ローダ、及び実行エンジンのメモリに割当てられた場合
にプレロードクラスの大きさを最小化すべく構成される
複数の内部データ構造宣言を備え、クラスプレローダ゛
は、一組の選択データ構造メンバのそれぞれが該選択デ
ータ構造メンバの個別の値を保持している記憶構造への
インデックスとして表わされるように内部データ構造宣
言を生成すべく構成されるコンピュータプログラム機構
によって達成される。
上で実行する実行時環境に組み込まれるべくプレロード
クラスのメモリフットプリントを低減させるためにコン
ピュータシステムで使用するコンピュータプログラムプ
ロダクトであり、コンピュータプログラムプロダクト
は、コンピュータ読取り可能記憶媒体及びそれに埋め込
まれたコンピュータプログラム機構を含んでおり、コン
ピュータプログラム機構は:一組のクラスファイルから
ププレロードクラスを生成すべく構成されるクラスプレ
ローダ、及び実行エンジンのメモリに割当てられた場合
にプレロードクラスの大きさを最小化すべく構成される
複数の内部データ構造宣言を備え、クラスプレローダ゛
は、一組の選択データ構造メンバのそれぞれが該選択デ
ータ構造メンバの個別の値を保持している記憶構造への
インデックスとして表わされるように内部データ構造宣
言を生成すべく構成されるコンピュータプログラム機構
によって達成される。
【0012】本発明の上記課題は、それぞれが一つ以上
のメンバを含んでいる、一つ以上の内部データ構造タイ
プによって定義されるプレロードクラスの集合体から構
築される実行時環境であって:メンバの少なくともサブ
セットによって取られ得る個別の値を保持している記憶
構造;及び個別の値を有する対応メンバの各オカレンス
としてサーブするメンバのサブセットの該対応メンバの
該個別の値を保持している記憶構造エントリーへのイン
デックスとを備え、実行時環境は、インデックスによっ
て定義される位置における記憶構造の内容を検索するこ
とによって対応メンバの個別の値を必要なときに決定す
る実行時環境によって達成される。
のメンバを含んでいる、一つ以上の内部データ構造タイ
プによって定義されるプレロードクラスの集合体から構
築される実行時環境であって:メンバの少なくともサブ
セットによって取られ得る個別の値を保持している記憶
構造;及び個別の値を有する対応メンバの各オカレンス
としてサーブするメンバのサブセットの該対応メンバの
該個別の値を保持している記憶構造エントリーへのイン
デックスとを備え、実行時環境は、インデックスによっ
て定義される位置における記憶構造の内容を検索するこ
とによって対応メンバの個別の値を必要なときに決定す
る実行時環境によって達成される。
【0013】本発明の実行時環境では、個別の値の全て
は、知られており、かつ記憶構造エントリーへのインデ
ックスは、対応メンバに関連付けられた個別の値の全て
にインデックスを付けることができる最小限のビットを
用いて実施されるようにしてもよい。
は、知られており、かつ記憶構造エントリーへのインデ
ックスは、対応メンバに関連付けられた個別の値の全て
にインデックスを付けることができる最小限のビットを
用いて実施されるようにしてもよい。
【0014】本発明の上記課題は、実行エンジン上で実
行される実行時環境に組み込まれるプレロードクラスを
実行エンジンにロードする方法であって、一組の選択デ
ータ構造メンバのそれぞれが該選択データ構造メンバの
記憶された個別の値へのインデックスとして表わされる
ように構成されるプレロードクラスを構成している複数
の内部データ構造宣言を含んでいる、該プレロードクラ
スを実行エンジンにダウンロードする段階を具備し、一
組は、実行エンジンのメモリに割当てられる場合にプレ
ロードクラスの大きさを最小化すべく選択される方法に
よって達成される。
行される実行時環境に組み込まれるプレロードクラスを
実行エンジンにロードする方法であって、一組の選択デ
ータ構造メンバのそれぞれが該選択データ構造メンバの
記憶された個別の値へのインデックスとして表わされる
ように構成されるプレロードクラスを構成している複数
の内部データ構造宣言を含んでいる、該プレロードクラ
スを実行エンジンにダウンロードする段階を具備し、一
組は、実行エンジンのメモリに割当てられる場合にプレ
ロードクラスの大きさを最小化すべく選択される方法に
よって達成される。
【0015】本発明の方法では、プレロードクラスは、
インターネット上でダウンロードされるようにしてもよ
い。
インターネット上でダウンロードされるようにしてもよ
い。
【0016】本発明の方法では、プレロードクラスを実
行エンジンのメモリに割当てる段階を更に具備するよう
にしてもよい。
行エンジンのメモリに割当てる段階を更に具備するよう
にしてもよい。
【0017】本発明の上記課題は、クライアント上で実
行される実行時環境に組み込まれるプレロードクラスを
生成しかつ該クライアントにロードする方法であって:
一組の選択データ構造メンバのそれぞれが該選択データ
構造メンバの個別の値を保持している記憶構造へのイン
デックスとして表わされるように構成されるプレロード
クラスを構成している複数の内部データ構造宣言を含ん
でいる、該プレロードクラスをサーバに生成し、該一組
は、ライアントのメモリに割当てられる場合にプレロー
ドクラスの大きさを最小化すべく選択され;かつプレロ
ードクラスをクライアントにダウンロードする段階を具
備する方法によって達成される。
行される実行時環境に組み込まれるプレロードクラスを
生成しかつ該クライアントにロードする方法であって:
一組の選択データ構造メンバのそれぞれが該選択データ
構造メンバの個別の値を保持している記憶構造へのイン
デックスとして表わされるように構成されるプレロード
クラスを構成している複数の内部データ構造宣言を含ん
でいる、該プレロードクラスをサーバに生成し、該一組
は、ライアントのメモリに割当てられる場合にプレロー
ドクラスの大きさを最小化すべく選択され;かつプレロ
ードクラスをクライアントにダウンロードする段階を具
備する方法によって達成される。
【0018】本発明の上記課題は、実行時環境に組み込
まれるプレロードクラスのメモリフットプリントを低減
する方法であって:プレロードクラスを構成している内
部データ構造のメンバによって取られ得る個別の値を決
定し;内部データ構造の大きさを低減すべく選択された
メンバの少なくともサブセットに対して値のそれぞれを
記憶し;かつサブセットメンバの各オカレンスをそのオ
カレンスの該値へのインデックスで置き換え、そのオカ
レンスの該値がインデックスを介して検索できるように
する段階を具備する方法によって達成される。
まれるプレロードクラスのメモリフットプリントを低減
する方法であって:プレロードクラスを構成している内
部データ構造のメンバによって取られ得る個別の値を決
定し;内部データ構造の大きさを低減すべく選択された
メンバの少なくともサブセットに対して値のそれぞれを
記憶し;かつサブセットメンバの各オカレンスをそのオ
カレンスの該値へのインデックスで置き換え、そのオカ
レンスの該値がインデックスを介して検索できるように
する段階を具備する方法によって達成される。
【0019】本発明の上記課題は、実行時環境に組み込
まれるプレロードクラスのメモリフットプリントを低減
する装置であって:メモリに割当てられる場合にプレロ
ードクラスの大きさを最小化すべく構成される一組の内
部データ構造宣言を生成すべく構成されるクラスプレロ
ーダを備え、内部データ構造宣言は、プレロードクラス
を構成している内部データ構造を宣言し;クラスプレロ
ーダは、一組の選択データ構造メンバのそれぞれが選択
データ構造メンバの個別の値を保持している記憶構造へ
のインデックスとして表わされるよう内部データ構造宣
言を生成すべく構成される装置によって達成される。
まれるプレロードクラスのメモリフットプリントを低減
する装置であって:メモリに割当てられる場合にプレロ
ードクラスの大きさを最小化すべく構成される一組の内
部データ構造宣言を生成すべく構成されるクラスプレロ
ーダを備え、内部データ構造宣言は、プレロードクラス
を構成している内部データ構造を宣言し;クラスプレロ
ーダは、一組の選択データ構造メンバのそれぞれが選択
データ構造メンバの個別の値を保持している記憶構造へ
のインデックスとして表わされるよう内部データ構造宣
言を生成すべく構成される装置によって達成される。
【0020】
【発明の実施の形態】纏めると、本発明は、プレロード
Javaクラスに必要なROMスペースを低減する方法
及び装置である。特に、本発明の方法及び装置は、Ja
vaVMクラスがプレロードされるという環境におい
て、VMは、フィールド及びメソッドのような、設定さ
れた数のクラス及びクラスコンポーネントを有するクロ
ーズドシステムである可能性が高い、という認識に基づ
いている。そのようなクローズドVMは、クラスブロッ
ク、メソッドブロック及びフィールドブロックのよう
な、決まった数の内部データ構造を含むであろう。さら
にこれらのデータ構造の各メンバ(例えばメソッドブロ
ック又はフィールドブロックメンバ)は、周知の一組の
個別の値の一つを有する。この仮定及びその含意によ
り、本発明は内部データ構造を表現するために必要なメ
モリスペースを 1) データ構造メンバの各タイプの個別の値を決定
し; 2) 各データ構造メンバタイプのオカレンス(例えば
フィールドブロックメンバタイプのメソッドブロックに
おける各オカレンス)及び各オカレンスの値を決定し; 3) (一般変数に各オカレンスに対する値を)通常に
記憶するのではなく、各オカレンスがデータ構造メンバ
タイプの値のテーブルに対するインデックスとして表示
された場合に保管されるメモリ空間を決定し; 4) もし充分な保管が結果として得られたならば、個
別のデータ構造メンバタイプ値を含む値テーブルを割り
当てかつそのフィールドブロックメンバタイプの各オカ
レンスを適正値テーブルエントリーのインデックスとし
て構成し;かつ 5) 変更された構造へのそのアクセスが自動的に適応
されるようにVMへの新しいソースを生成して、低減す
る。好しい実施例では、以下に示す比較が真であれば、
データ構造メンバタイプを値テーブルインデックス プ
ラス 値テーブルとして表現するために決定がなされ
る: (#タイプのオカレンス)x(インデックスのサイズ)
+(値テーブルのサイズ)<(#タイプのオカレンス)
x(一般変数のサイズ) 本方法が各データ構造メンバタイプに対して、そのタイ
プのオカレンスが値テーブルへのインデックスとして表
現されるべきか或いは値を記憶している一般変数として
表示されるべきかを一度決定したならば、本方法は、ア
クセス関数、言語宣言及び値テーブルを初期化するソー
スコードを含む適切な情報をそのタイプに対して送る。
アクセス関数とはマクロであり、そのマクロを介してデ
ータ構造メンバへの実行時アクセスがVMによって達成
される。好ましくは、前述の情報を送るよりも先に、本
方法は、値テーブルのインデックス、メンバの慣用表現
及び値テーブルのもっともコンパクトな構成を決定しか
つそれに従って値テーブル、値テーブルの索引、アクセ
ス関数及びクラスを生成する。本方法は、データ構造メ
ンバの通常表示を変更するか否かを決定した後、アクセ
ス関数、宣言及び他のデータ構造情報を送る。その結
果、送られた全てのデータ構造情報は、内部クラス表現
の変更に一致する。このような一致したデータ構造情報
の自動生成は、VMに新しいクラスが加えられたり、ク
ラス表現が変わるたびに必要なVMへの変更を最小限に
抑える。これは、従来技術に対して有意な改良を提供す
る。
Javaクラスに必要なROMスペースを低減する方法
及び装置である。特に、本発明の方法及び装置は、Ja
vaVMクラスがプレロードされるという環境におい
て、VMは、フィールド及びメソッドのような、設定さ
れた数のクラス及びクラスコンポーネントを有するクロ
ーズドシステムである可能性が高い、という認識に基づ
いている。そのようなクローズドVMは、クラスブロッ
ク、メソッドブロック及びフィールドブロックのよう
な、決まった数の内部データ構造を含むであろう。さら
にこれらのデータ構造の各メンバ(例えばメソッドブロ
ック又はフィールドブロックメンバ)は、周知の一組の
個別の値の一つを有する。この仮定及びその含意によ
り、本発明は内部データ構造を表現するために必要なメ
モリスペースを 1) データ構造メンバの各タイプの個別の値を決定
し; 2) 各データ構造メンバタイプのオカレンス(例えば
フィールドブロックメンバタイプのメソッドブロックに
おける各オカレンス)及び各オカレンスの値を決定し; 3) (一般変数に各オカレンスに対する値を)通常に
記憶するのではなく、各オカレンスがデータ構造メンバ
タイプの値のテーブルに対するインデックスとして表示
された場合に保管されるメモリ空間を決定し; 4) もし充分な保管が結果として得られたならば、個
別のデータ構造メンバタイプ値を含む値テーブルを割り
当てかつそのフィールドブロックメンバタイプの各オカ
レンスを適正値テーブルエントリーのインデックスとし
て構成し;かつ 5) 変更された構造へのそのアクセスが自動的に適応
されるようにVMへの新しいソースを生成して、低減す
る。好しい実施例では、以下に示す比較が真であれば、
データ構造メンバタイプを値テーブルインデックス プ
ラス 値テーブルとして表現するために決定がなされ
る: (#タイプのオカレンス)x(インデックスのサイズ)
+(値テーブルのサイズ)<(#タイプのオカレンス)
x(一般変数のサイズ) 本方法が各データ構造メンバタイプに対して、そのタイ
プのオカレンスが値テーブルへのインデックスとして表
現されるべきか或いは値を記憶している一般変数として
表示されるべきかを一度決定したならば、本方法は、ア
クセス関数、言語宣言及び値テーブルを初期化するソー
スコードを含む適切な情報をそのタイプに対して送る。
アクセス関数とはマクロであり、そのマクロを介してデ
ータ構造メンバへの実行時アクセスがVMによって達成
される。好ましくは、前述の情報を送るよりも先に、本
方法は、値テーブルのインデックス、メンバの慣用表現
及び値テーブルのもっともコンパクトな構成を決定しか
つそれに従って値テーブル、値テーブルの索引、アクセ
ス関数及びクラスを生成する。本方法は、データ構造メ
ンバの通常表示を変更するか否かを決定した後、アクセ
ス関数、宣言及び他のデータ構造情報を送る。その結
果、送られた全てのデータ構造情報は、内部クラス表現
の変更に一致する。このような一致したデータ構造情報
の自動生成は、VMに新しいクラスが加えられたり、ク
ラス表現が変わるたびに必要なVMへの変更を最小限に
抑える。これは、従来技術に対して有意な改良を提供す
る。
【0021】本発明の装置は、クラスファイル、上記の
方法が実行されるJavaクラスプレローダ、並びにプ
レロードクラス、ヘッダファイル及びソースコードファ
イルを含むプレローダにより生成される出力ファイルの
集合体を含んでいる。クラスファイルは、プレロードさ
れるクラスの完全なセットを定義する。プレローダは、
内部データ構造の異なるタイプのメンバ、メンバの各タ
イプの個別の値、その値を記憶するために必要な空間の
量、値インデックスのサイズ、及び各メンバタイプのオ
カレンスの数を決定すべくクラスファイル上でファース
トパスを実行する。次いで、プレローダは、通常、どの
ように各メンバが表現されるのか、もしくは値テーブル
エントリーへのインデックスとして表現されるのかを決
定すべくクラスファイル及び内部データ構成構造上でセ
カンドパスを実行し、そして適切な出力ファイルを送
る。出力ファイルは、通常のJavaシステムによって
採用される類似のファイルと互換性がある。即ち、プレ
ロードクラスをクラスオブジェクトデータにアセンブル
又はコンパイルすることができかつヘッダファイル及び
ソースファイルをVMオブジェクトデータにVMソース
でコンパイルすることができる。次いで、VM及びクラ
スオブジェクトデータを、特定のJava環境に対して
実行可能なVMに通常の方法でリンクできる。
方法が実行されるJavaクラスプレローダ、並びにプ
レロードクラス、ヘッダファイル及びソースコードファ
イルを含むプレローダにより生成される出力ファイルの
集合体を含んでいる。クラスファイルは、プレロードさ
れるクラスの完全なセットを定義する。プレローダは、
内部データ構造の異なるタイプのメンバ、メンバの各タ
イプの個別の値、その値を記憶するために必要な空間の
量、値インデックスのサイズ、及び各メンバタイプのオ
カレンスの数を決定すべくクラスファイル上でファース
トパスを実行する。次いで、プレローダは、通常、どの
ように各メンバが表現されるのか、もしくは値テーブル
エントリーへのインデックスとして表現されるのかを決
定すべくクラスファイル及び内部データ構成構造上でセ
カンドパスを実行し、そして適切な出力ファイルを送
る。出力ファイルは、通常のJavaシステムによって
採用される類似のファイルと互換性がある。即ち、プレ
ロードクラスをクラスオブジェクトデータにアセンブル
又はコンパイルすることができかつヘッダファイル及び
ソースファイルをVMオブジェクトデータにVMソース
でコンパイルすることができる。次いで、VM及びクラ
スオブジェクトデータを、特定のJava環境に対して
実行可能なVMに通常の方法でリンクできる。
【0022】
【実施例】ここに記述された方法及び装置は、ターゲッ
トコンピュータ(以下、実行エンジンと称す)のROM
における記憶に対して最適化されたプレロードJava
クラスを出力すべく構成されたJavaクラスプレロー
ダに関するものである。実行エンジンが二次記憶装置を
ほとんど或いはまったく持たないコンピュータであるな
らば、Javaクラスプレローダは、以下、サーバと称
される、別のコンピュータで実施されるのことが好まし
い。そのような構成を想定すると、プレロードクラス
を、(例えば、ネットワークコネクション、ダイレクト
コミュニケーションリンク又はフロッピーディスクやC
Dといった読み取り可能なメディアの“スニーカーネッ
ト”転送等の)様々な方法で、サーバから実行エンジン
へ転送することが可能である。したがって、ここに記述
される本発明の好ましい実施例は、プレロードクラスが
サーバによって生成されかつその後VMでの使用のため
に実行エンジンに転送されるようなサーバ及び実行エン
ジンを有するコンピュータシステムに関するものであ
る。図3及び図4を参照して、ここで好ましい実施例を
説明する。
トコンピュータ(以下、実行エンジンと称す)のROM
における記憶に対して最適化されたプレロードJava
クラスを出力すべく構成されたJavaクラスプレロー
ダに関するものである。実行エンジンが二次記憶装置を
ほとんど或いはまったく持たないコンピュータであるな
らば、Javaクラスプレローダは、以下、サーバと称
される、別のコンピュータで実施されるのことが好まし
い。そのような構成を想定すると、プレロードクラス
を、(例えば、ネットワークコネクション、ダイレクト
コミュニケーションリンク又はフロッピーディスクやC
Dといった読み取り可能なメディアの“スニーカーネッ
ト”転送等の)様々な方法で、サーバから実行エンジン
へ転送することが可能である。したがって、ここに記述
される本発明の好ましい実施例は、プレロードクラスが
サーバによって生成されかつその後VMでの使用のため
に実行エンジンに転送されるようなサーバ及び実行エン
ジンを有するコンピュータシステムに関するものであ
る。図3及び図4を参照して、ここで好ましい実施例を
説明する。
【0023】図3を参照すると、本発明が実施される分
散型コンピュータシステム100が示されている。コン
ピュータシステム100は、一つ以上の実行エンジン1
02及び一つ以上のサーバコンピュータ104を有す
る。好ましい実施例においては、各実行エンジン102
は、インターネット106を介してサーバ104に接続
されるが、コンピュータ102、104間の他のタイプ
の通信接続(例えば、ネットワークコネクション、直接
通信リンク、又はフロッピーディスクやCDのような、
読取り可能媒体の“スニーカーネット”転送)を使うこ
ともできる。サーバや実行エンジンは、Sun(サン)
ワークステーション、IBM互換機及び/又はアップル
マッキントッシュコンピュータのような、デスクトップ
コンピュータであってもよい;しかしながら、実際はい
かなる種類のコンピュータでもサーバ又は実行エンジン
となり得る。更に、システムは、分散型コンピュータシ
ステムには限定されない。それは、様々なコンピュータ
システムにおいてかつ様々な構成において、或いは密結
合プロセッサの構成又はモデル又は疎結合マイクロプロ
セッサシステムの様々な構成において、実行される。
散型コンピュータシステム100が示されている。コン
ピュータシステム100は、一つ以上の実行エンジン1
02及び一つ以上のサーバコンピュータ104を有す
る。好ましい実施例においては、各実行エンジン102
は、インターネット106を介してサーバ104に接続
されるが、コンピュータ102、104間の他のタイプ
の通信接続(例えば、ネットワークコネクション、直接
通信リンク、又はフロッピーディスクやCDのような、
読取り可能媒体の“スニーカーネット”転送)を使うこ
ともできる。サーバや実行エンジンは、Sun(サン)
ワークステーション、IBM互換機及び/又はアップル
マッキントッシュコンピュータのような、デスクトップ
コンピュータであってもよい;しかしながら、実際はい
かなる種類のコンピュータでもサーバ又は実行エンジン
となり得る。更に、システムは、分散型コンピュータシ
ステムには限定されない。それは、様々なコンピュータ
システムにおいてかつ様々な構成において、或いは密結
合プロセッサの構成又はモデル又は疎結合マイクロプロ
セッサシステムの様々な構成において、実行される。
【0024】サーバコンピュータ104は、通常、一つ
以上のプロセッサ112、通信インターフェース11
6、ユーザインターフェース114、及びメモリ110
を含む。メモリ110は、以下のものを記憶する: *オペレーティングシステム118; *インターネット通信管理プログラム又は他のタイプの
ネットワークアクセスプロシージャ120; *Javaプログラミング言語で書かれたソースコード
をバイトコードのストリームに翻訳するためのコンパイ
ラ122; *Javaソースコードを含む一つ以上のソースコード
ファイル126を含むソースコードレポジトリ124; *一つ以上のプラットフォーム独立なクラスファイル1
30及びクラスファイルを含んでいる一つ以上のクラス
ライブラリ131を含むクラスファイルレポジトリ12
8。各クラスファイルは、特定のクラスを表わすデータ
が含まれている; *実行エンジンの特定の構成に対して一組のプレロード
クラス148を生成するクラスプレローダ132(この
クラスプレローダは静的クラスローダと称されることも
ある); *リンカが認識することができるフォーマットでクラス
メンバ、クラスデータ構造及びメモリ記憶インジケータ
を表わすオブジェクトファイルを生成するアセンブラ1
34; *一組のプレロードクラスのメモリレイアウトを決定し
かつ全ての記号参照を分解するためのリンカ136;及
び *サーバが使用する一つ以上のデータファイル146
(プレロードクラス148を含む)。 クラスファイルレポジトリ128、クラスプレローダ1
32、アセンブラ134及びリンカ136は、サーバ1
04に存在する必要はなく、その出力(例えばプレロー
ドクラス148を表わすファイルやメッセージ)が実行
エンジン102にコピーできれば、いかなるコンピュー
タ上にも存在しうることに留意されたい。
以上のプロセッサ112、通信インターフェース11
6、ユーザインターフェース114、及びメモリ110
を含む。メモリ110は、以下のものを記憶する: *オペレーティングシステム118; *インターネット通信管理プログラム又は他のタイプの
ネットワークアクセスプロシージャ120; *Javaプログラミング言語で書かれたソースコード
をバイトコードのストリームに翻訳するためのコンパイ
ラ122; *Javaソースコードを含む一つ以上のソースコード
ファイル126を含むソースコードレポジトリ124; *一つ以上のプラットフォーム独立なクラスファイル1
30及びクラスファイルを含んでいる一つ以上のクラス
ライブラリ131を含むクラスファイルレポジトリ12
8。各クラスファイルは、特定のクラスを表わすデータ
が含まれている; *実行エンジンの特定の構成に対して一組のプレロード
クラス148を生成するクラスプレローダ132(この
クラスプレローダは静的クラスローダと称されることも
ある); *リンカが認識することができるフォーマットでクラス
メンバ、クラスデータ構造及びメモリ記憶インジケータ
を表わすオブジェクトファイルを生成するアセンブラ1
34; *一組のプレロードクラスのメモリレイアウトを決定し
かつ全ての記号参照を分解するためのリンカ136;及
び *サーバが使用する一つ以上のデータファイル146
(プレロードクラス148を含む)。 クラスファイルレポジトリ128、クラスプレローダ1
32、アセンブラ134及びリンカ136は、サーバ1
04に存在する必要はなく、その出力(例えばプレロー
ドクラス148を表わすファイルやメッセージ)が実行
エンジン102にコピーできれば、いかなるコンピュー
タ上にも存在しうることに留意されたい。
【0025】図4を参照すると、実行エンジンは、一つ
以上のプロセッサ202、通信インターフェース20
6、ユーザインターフェース204、読取り専用メモリ
(ROM)208及びランダムアクセスメモリ(RA
M)210を含みうる。読取り専用メモリ(ROM)2
08は、プログラムの動作中に定数のまま変わらないプ
ログラムデータや、分解されていない参照を一切持たな
いプログラムメソッドを記憶する。好しい実施例では、
ROM208に記憶されるメソッド及びデータは、Ja
vaアプリケーション212の部分及び実行エンジンの
サポートプロシージャ(支援手順)を含んでいる。これ
らのサポートプロシージャは、オペレーティングシステ
ム213、ネットワークアクセスプロシージャ214、
プレロードクラス232及びプレロードクラス232に
よって使用される内部データ構造1200(図2)を含
んでいる。
以上のプロセッサ202、通信インターフェース20
6、ユーザインターフェース204、読取り専用メモリ
(ROM)208及びランダムアクセスメモリ(RA
M)210を含みうる。読取り専用メモリ(ROM)2
08は、プログラムの動作中に定数のまま変わらないプ
ログラムデータや、分解されていない参照を一切持たな
いプログラムメソッドを記憶する。好しい実施例では、
ROM208に記憶されるメソッド及びデータは、Ja
vaアプリケーション212の部分及び実行エンジンの
サポートプロシージャ(支援手順)を含んでいる。これ
らのサポートプロシージャは、オペレーティングシステ
ム213、ネットワークアクセスプロシージャ214、
プレロードクラス232及びプレロードクラス232に
よって使用される内部データ構造1200(図2)を含
んでいる。
【0026】ランダムアクセスメモリ(RAM)210
は、以下のものを記憶する: *Javaアプリケーション215の第2の部分及び未
分参照及びアプリケーションの実行中に変更されるデー
タを有しているメソッドを含むサポートプロシージャ2
16,217;及び *実行エンジンが処理中に利用しうる一つ以上のデータ
ファイル228。
は、以下のものを記憶する: *Javaアプリケーション215の第2の部分及び未
分参照及びアプリケーションの実行中に変更されるデー
タを有しているメソッドを含むサポートプロシージャ2
16,217;及び *実行エンジンが処理中に利用しうる一つ以上のデータ
ファイル228。
【0027】図5を参照すると、プレロード実行可能モ
ジュールを生成するために使用されるステップの順番を
示すフローチャートが示されている。ここに記述された
方法及び装置は、Javaアプリケーション及び他のサ
ポートプロシージャをプレロードすることに関すること
に注目されたい。いかなるJavaアプリケーション
も、或いは実行時で通常リンクされる他のいかなるメソ
ッドのセットも、ここに記載されている方法及び装置を
用いてプレロードされ得る。
ジュールを生成するために使用されるステップの順番を
示すフローチャートが示されている。ここに記述された
方法及び装置は、Javaアプリケーション及び他のサ
ポートプロシージャをプレロードすることに関すること
に注目されたい。いかなるJavaアプリケーション
も、或いは実行時で通常リンクされる他のいかなるメソ
ッドのセットも、ここに記載されている方法及び装置を
用いてプレロードされ得る。
【0028】Javaアプリケーションを構成する各ク
ラスに対するソースコード126は、コンパイラ122
によって、クラスのプラットフォーム独立な表現であ
る、クラスファイル130にコンパイルされる。図1を
参照して説明したように、クラスファイルは、フィール
ド及びメソッドテーブル、各メソッドのバイトコード、
定数データ及び他の情報を含む。代替的に、アプリケー
ションに対応しているクラスファイルは、一つ以上のク
ラスライブラリ131に既に存在し得る。プレロードさ
れるアプリケーションを構成するクラスファイル128
のセット全体は、クラスプレローダ132に送られる。
ラスに対するソースコード126は、コンパイラ122
によって、クラスのプラットフォーム独立な表現であ
る、クラスファイル130にコンパイルされる。図1を
参照して説明したように、クラスファイルは、フィール
ド及びメソッドテーブル、各メソッドのバイトコード、
定数データ及び他の情報を含む。代替的に、アプリケー
ションに対応しているクラスファイルは、一つ以上のク
ラスライブラリ131に既に存在し得る。プレロードさ
れるアプリケーションを構成するクラスファイル128
のセット全体は、クラスプレローダ132に送られる。
【0029】クラスプレローダの役割は、実行エンジン
102(図4)に対するプレロードクラス148を生成
することである。プレロードクラス148は、図2に記
載されているクラスブロック1202、メソッドブロッ
ク1204、フィールドブロック1214及び定数プー
ル1224を含んでいる。特に、クラスプレローダ13
2は、各クラス130に関連付けられたメソッド及びフ
ィールドのどれを読取り専用メモリ(ROM)208に
記憶することができかつランダムアクセスメモリ(RA
M)デバイス210にどれを記憶させなければならない
かを決定する。例えば、Javaインターフェースを呼
出すか又は非静的インスタンス変数を利用するメソッド
は、ランダムアクセスメモリに存在する必要がある。こ
れは、インターフェースを実施するバイトコードが実行
時で決定されかつ非静的インスタンス変数が関連クラス
の各例示に対して変更されるからである。
102(図4)に対するプレロードクラス148を生成
することである。プレロードクラス148は、図2に記
載されているクラスブロック1202、メソッドブロッ
ク1204、フィールドブロック1214及び定数プー
ル1224を含んでいる。特に、クラスプレローダ13
2は、各クラス130に関連付けられたメソッド及びフ
ィールドのどれを読取り専用メモリ(ROM)208に
記憶することができかつランダムアクセスメモリ(RA
M)デバイス210にどれを記憶させなければならない
かを決定する。例えば、Javaインターフェースを呼
出すか又は非静的インスタンス変数を利用するメソッド
は、ランダムアクセスメモリに存在する必要がある。こ
れは、インターフェースを実施するバイトコードが実行
時で決定されかつ非静的インスタンス変数が関連クラス
の各例示に対して変更されるからである。
【0030】また、クラスプレローダ132は、実行可
能コードが実行エンジンROM208にロードされたと
きに該実行可能コードのよりコンパクトな内部表現を生
成するために多数の最適化を実行する。例えば、クラス
プレローダ132は、クラス定数プール310の内部表
現における冗長性を除去すべく各クラスに関連付けられ
た定数プールを組合せる。本発明によれば、クラスプレ
ローダ132は、また、実行エンジン102のROMに
おいて使うスペースをより少なくするため、内部データ
構造1200(図2A)を変更する。このデータ構造最
適化が、従来技術において使用される非効率的な基準デ
ータ構造フォーマット1200から内部表現を大幅に開
放するということが本発明の長所である。
能コードが実行エンジンROM208にロードされたと
きに該実行可能コードのよりコンパクトな内部表現を生
成するために多数の最適化を実行する。例えば、クラス
プレローダ132は、クラス定数プール310の内部表
現における冗長性を除去すべく各クラスに関連付けられ
た定数プールを組合せる。本発明によれば、クラスプレ
ローダ132は、また、実行エンジン102のROMに
おいて使うスペースをより少なくするため、内部データ
構造1200(図2A)を変更する。このデータ構造最
適化が、従来技術において使用される非効率的な基準デ
ータ構造フォーマット1200から内部表現を大幅に開
放するということが本発明の長所である。
【0031】プレロードクラス148は、リンカ136
がデータを適切なアドレス空間にマップするために必要
なフォーマットを有しているオブジェクトモジュール3
04を生成するアセンブラ又はコンパイラ134に送ら
れる。アドレス空間は2つあり、1つはランダムアクセ
スメモリ(RAM)デバイス用であり第2は読取り専用
メモリ(ROM)デバイス用であるのが好ましい。次い
で、オブジェクトモジュール304は、アプリケーショ
ンにおけるクラスのためのメモリレイアウトを生成する
リンカ136に送られる。メモリレイアウトが一度決定
されると、リンカ136は、全ての記号参照を分解しか
つそれらを直接アドレスで置き換える。メモリレイアウ
トは、2つのアドレス空間に分割される。読取り専用メ
モリ(ROM)用に標識が付けられているメソッド及び
フィールドは、最初のアドレス空間に含まれ、かつラン
ダムアクセスメモリ(RAM)での必要容量として標識
が付けられているメソッド及びデータは、第2のアドレ
ス空間に含まれる。リンカ136からの出力は、これら
2つのアドレス空間に対するメソッド及びデータを含ん
でいるプレロード実行モジュール306である。ここ
で、本発明のプロセスフローを、図6を参照して説明す
る。
がデータを適切なアドレス空間にマップするために必要
なフォーマットを有しているオブジェクトモジュール3
04を生成するアセンブラ又はコンパイラ134に送ら
れる。アドレス空間は2つあり、1つはランダムアクセ
スメモリ(RAM)デバイス用であり第2は読取り専用
メモリ(ROM)デバイス用であるのが好ましい。次い
で、オブジェクトモジュール304は、アプリケーショ
ンにおけるクラスのためのメモリレイアウトを生成する
リンカ136に送られる。メモリレイアウトが一度決定
されると、リンカ136は、全ての記号参照を分解しか
つそれらを直接アドレスで置き換える。メモリレイアウ
トは、2つのアドレス空間に分割される。読取り専用メ
モリ(ROM)用に標識が付けられているメソッド及び
フィールドは、最初のアドレス空間に含まれ、かつラン
ダムアクセスメモリ(RAM)での必要容量として標識
が付けられているメソッド及びデータは、第2のアドレ
ス空間に含まれる。リンカ136からの出力は、これら
2つのアドレス空間に対するメソッド及びデータを含ん
でいるプレロード実行モジュール306である。ここ
で、本発明のプロセスフローを、図6を参照して説明す
る。
【0032】図6を参照すると、VMによって使用され
る内部データ構造のメモリフットプリントを低減するた
めに本発明によって採用されるプロセスのデータフロー
図が示されている。図3を参照して既に説明したよう
に、クラスプレローダ132は、クラスファイル128
から一組のプラットフォーム特定プレロードクラス14
8を生成する。プレロードクラス148は、アセンブラ
ソースにおいて又は高レベル言語によって宣言され得る
データ構造宣言である。次いで、アセンブラ134又は
コンパイラ122は、これらのデータ宣言をオブジェク
トデータ622に変換する。また、クラスプレローダ1
32は、プレロードクラス232を構成している内部デ
ータ構造の最も効果的な表現を決定する。
る内部データ構造のメモリフットプリントを低減するた
めに本発明によって採用されるプロセスのデータフロー
図が示されている。図3を参照して既に説明したよう
に、クラスプレローダ132は、クラスファイル128
から一組のプラットフォーム特定プレロードクラス14
8を生成する。プレロードクラス148は、アセンブラ
ソースにおいて又は高レベル言語によって宣言され得る
データ構造宣言である。次いで、アセンブラ134又は
コンパイラ122は、これらのデータ宣言をオブジェク
トデータ622に変換する。また、クラスプレローダ1
32は、プレロードクラス232を構成している内部デ
ータ構造の最も効果的な表現を決定する。
【0033】好ましい実施例では内部データ構造のメン
バは、次の2つのうちのどちらかの方法で表現される: 1) メンバの値である一般メモリワード(例:32ビ
ット)として;又は 2) メンバの各オカレンスに対するメンバによって取
られうる個別の値のテーブルのインデックスとして。 第1の表現は、従来技術のクラスプレローダにより送ら
れたデータ構造において使用される唯一の表現である。
この表現は、無数のオカレンスが存在する特定のメンバ
が少数の個別の値を有しているにすぎない場合には大変
に非効率的である。そのような状況では、たとえほんの
少しの異なる値が記憶されても、ROM208における
不十分な記憶の何千ものワードを使って、全幅メモリワ
ード(例えば32ビット幅)がオカレンスのそれぞれに
割り当てられる。第2の表現は、本発明によって採用さ
れるものであり、そのようなメンバの確定値を保持すべ
く値テーブル616を生成しかつ値テーブルエントリー
の全てをアドレス指定するために必要なのと同じ数のビ
ットだけのインデックスをメンバの各オカレンスに対し
て生成することによってこの問題を解決する。第2の表
現は、特定のメンバタイプに対するインデックス及び値
テーブルに対して割り当てられるメモリが、一般表現に
必要な割り当てられたメモリよりも小さい場合に有利で
ある。本発明がどのようにメンバデータ構造を符号化す
るかを決定する方法は、図10を参照して、以下に説明
する。
バは、次の2つのうちのどちらかの方法で表現される: 1) メンバの値である一般メモリワード(例:32ビ
ット)として;又は 2) メンバの各オカレンスに対するメンバによって取
られうる個別の値のテーブルのインデックスとして。 第1の表現は、従来技術のクラスプレローダにより送ら
れたデータ構造において使用される唯一の表現である。
この表現は、無数のオカレンスが存在する特定のメンバ
が少数の個別の値を有しているにすぎない場合には大変
に非効率的である。そのような状況では、たとえほんの
少しの異なる値が記憶されても、ROM208における
不十分な記憶の何千ものワードを使って、全幅メモリワ
ード(例えば32ビット幅)がオカレンスのそれぞれに
割り当てられる。第2の表現は、本発明によって採用さ
れるものであり、そのようなメンバの確定値を保持すべ
く値テーブル616を生成しかつ値テーブルエントリー
の全てをアドレス指定するために必要なのと同じ数のビ
ットだけのインデックスをメンバの各オカレンスに対し
て生成することによってこの問題を解決する。第2の表
現は、特定のメンバタイプに対するインデックス及び値
テーブルに対して割り当てられるメモリが、一般表現に
必要な割り当てられたメモリよりも小さい場合に有利で
ある。本発明がどのようにメンバデータ構造を符号化す
るかを決定する方法は、図10を参照して、以下に説明
する。
【0034】一度メンバを表現する方法の決定がなされ
たならば、クラスプレローダ132は、(VM246に
変更メンバ情報をアクセスさせる変更メンバ宣言及びア
クセス関数を含んでいる)インデックス+テーブルフォ
ーマット更新ヘッダ情報614で表現されるべき各メン
バ及び各値テーブル616に対して出力する。ソースコ
ードとして生成される、ヘッダ情報614及び値テーブ
ル616は、実行エンジン102において実行される仮
想マシンを定義する仮想マシンソース618と一緒にコ
ンパイラ122によってコンパイルされる。リンカ13
6は、実行エンジン102にロードすることができるプ
レロード実行モジュール306を生成すべく、結果とし
て得られたオブジェクトデータ620及びオブジェクト
データ622をリンクする。。本発明の副作用の一つ
は、新しいクラスやメンバがプレロードクラス148に
組み込まれるときにはいつでも、新しいVM246が生
成されなければならないことである。これは、対応して
いるヘッダ情報614及び値テーブル616がVMソー
ス618でコンパイルされなければならないからであ
る。しかしながら、本発明は、クラスのあらゆるセット
に対してヘッダ情報614及びメンバ値616を自動的
に生成するので、新しいVMを生成することは、VMコ
ードに対する変更を一切必要としないか又はほとんど必
要としない。これは、VM246が、常にヘッダ情報6
14の一部であるアクセス関数を利用するからである。
それゆえに、本発明は、VMの生成を容易にする一方
で、データ構造メンバの効果的な表現を生成することが
できる。
たならば、クラスプレローダ132は、(VM246に
変更メンバ情報をアクセスさせる変更メンバ宣言及びア
クセス関数を含んでいる)インデックス+テーブルフォ
ーマット更新ヘッダ情報614で表現されるべき各メン
バ及び各値テーブル616に対して出力する。ソースコ
ードとして生成される、ヘッダ情報614及び値テーブ
ル616は、実行エンジン102において実行される仮
想マシンを定義する仮想マシンソース618と一緒にコ
ンパイラ122によってコンパイルされる。リンカ13
6は、実行エンジン102にロードすることができるプ
レロード実行モジュール306を生成すべく、結果とし
て得られたオブジェクトデータ620及びオブジェクト
データ622をリンクする。。本発明の副作用の一つ
は、新しいクラスやメンバがプレロードクラス148に
組み込まれるときにはいつでも、新しいVM246が生
成されなければならないことである。これは、対応して
いるヘッダ情報614及び値テーブル616がVMソー
ス618でコンパイルされなければならないからであ
る。しかしながら、本発明は、クラスのあらゆるセット
に対してヘッダ情報614及びメンバ値616を自動的
に生成するので、新しいVMを生成することは、VMコ
ードに対する変更を一切必要としないか又はほとんど必
要としない。これは、VM246が、常にヘッダ情報6
14の一部であるアクセス関数を利用するからである。
それゆえに、本発明は、VMの生成を容易にする一方
で、データ構造メンバの効果的な表現を生成することが
できる。
【0035】クラスプレローダ132は、メンバの全て
の可能な値がわかるので、効果的なインデックス/テー
ブルメンバ表現を生成することができる。その結果、各
インデックスに必要なビット数もわかる。各メンバのオ
カレンス数もわかる。さらに、好しい実施例は、クラス
ファイル128がターゲット実行エンジン102にプレ
ロードされるべきクラスの完全なセットを表現すること
を前提にしている。この前提は、通常の方法では実行中
にクラスをダウンロードするための演算力及び/又は通
信帯域幅を有することがあまりない、小さいハンドヘル
ドコンピュータである実行エンジン102に特に適用可
能である。インデックス及び値の数がわかっておりかつ
追加メンバやクラスを追加する可能性がまったくないと
すれば、クラスプレローダ132は、実行エンジン10
2によって割り当てられたときに、インデックスが最適
な圧縮又はほぼ最適な配列を有すべく構成することがで
きる。クラスプレローダ132は、更新ヘッダ情報61
4におけるインデックスの順序を選択することによりこ
のレベルの圧縮化を達成する。
の可能な値がわかるので、効果的なインデックス/テー
ブルメンバ表現を生成することができる。その結果、各
インデックスに必要なビット数もわかる。各メンバのオ
カレンス数もわかる。さらに、好しい実施例は、クラス
ファイル128がターゲット実行エンジン102にプレ
ロードされるべきクラスの完全なセットを表現すること
を前提にしている。この前提は、通常の方法では実行中
にクラスをダウンロードするための演算力及び/又は通
信帯域幅を有することがあまりない、小さいハンドヘル
ドコンピュータである実行エンジン102に特に適用可
能である。インデックス及び値の数がわかっておりかつ
追加メンバやクラスを追加する可能性がまったくないと
すれば、クラスプレローダ132は、実行エンジン10
2によって割り当てられたときに、インデックスが最適
な圧縮又はほぼ最適な配列を有すべく構成することがで
きる。クラスプレローダ132は、更新ヘッダ情報61
4におけるインデックスの順序を選択することによりこ
のレベルの圧縮化を達成する。
【0036】図7A及び図7Bを参照すると、各データ
構造の特定の例と共に更新ヘッダ情報614及び値テー
ブル616の構成が図示されている。これらの例は、図
2Bからのデータ構造宣言1230.Nに対応している
クラスプレローダ132によって生成された出力を表し
ている。図7Aに示されている更新ヘッダファイル61
4は、それぞれが、いかなる組み合わせにおいても、更
新メンバ宣言704及び未更新メンバ宣言706を含む
ことができる、一組のデータ構造宣言702を含む。各
データ構造宣言702は、VM246によって使用され
るデータ構造の一つに対応する。更新メンバ宣言704
は、インデックス/テーブルメンバとしてクラスプレロ
ーダ132により変更されたデータ構造メンバに対する
ものであり、かつ未更新メンバ706は、クラスプレロ
ーダ132が通常に表現されるのが最適であると決定し
たデータ構造メンバに対するものである。各データ構造
宣言702は、更新メンバテーブル宣言708、更新メ
ンバアクセス関数710及び未更新メンバアクセス関数
712に関連付けられる。各更新メンバテーブル宣言7
08は、対応している値テーブル616に関連付けられ
かつ適切なプログラミング言語でそのテーブルを宣言す
る。更新メンバアクセス関数710は、各々の更新メン
バテーブル宣言708で定義されたテーブルネームを使
って更新(即ち、インデックス/テーブル)メンバに対
するアクセス関数を定義する。未更新メンバアクセス関
数712は、通常のクラスプレローダ132によって生
成されるものから変更されない。例えば、図7Aは、図
2Bからのデータ構造1230.N(StructT)に対す
る更新ヘッダファイル情報614を示す。この例は、ク
ラスプレローダ132が以下のことを決定したと想定す
る: 1)member1は400の値を有し、インデックス
/テーブルメンバとして最適に表現される、 2) member2は通常最もよく表現される、 3)member3は200の値を有し、インデックス
/テーブルメンバとして最もよく表現される、 4)member4は1500の値を有し、インデック
ス/テーブルメンバとして最もよく表現される、そして 5)member5は通常最もよく表現される。 その結果、クラスプレローダ132は、変更“struct
T”宣言704を生成し、この宣言においてmembe
r1は9ビット整数インデックスであるm1_idx
(9ビットは200の値にアクセスするのに十分であ
る)として表現され、member3は8ビット整数イ
ンデックスであるm3_idx(400の値をアクセス
するのに充分)として表現され、またmember4は
11ビット整数インデックスであるm4_idx(15
00の値をアクセスするのに充分)として表現される。
他のメンバであるmember2及びmember5は
それぞれ、mtype2及びmtype5の一般メンバ
タイプとして未変更のまま残される。また、クラスプレ
ローダ132は、member1値がタイプmembe
r1の値テーブル(member1_value[])
に記憶されることを示しているmember1に対する
更新メンバテーブル宣言708を生成した。membe
r1_valueテーブルは、外部変数(extern)とし
て宣言され、その外部変数は,テーブルの実効値が他の
ファイル、この場合には、値テーブルファイル166に
おいて定義されることを、コンパイラ122に伝える。
類似の更新メンバテーブル宣言708は、member
3及びmember4に対して生成される。更新mem
ber1に対するアクセス関数は、それに対応して変更
されて対応しているアクセス関数、member1 o
f (T)が呼び出されるたびに、プレロードメソッド
をアクセスするVM246は、member1の値(即
ち、9ビットm1_idx)をmember1_val
ueテーブルへのインデックスとして使う。更新mem
ber3及びmember4に対するアクセス関数71
0は、同様な方法で変更される。
構造の特定の例と共に更新ヘッダ情報614及び値テー
ブル616の構成が図示されている。これらの例は、図
2Bからのデータ構造宣言1230.Nに対応している
クラスプレローダ132によって生成された出力を表し
ている。図7Aに示されている更新ヘッダファイル61
4は、それぞれが、いかなる組み合わせにおいても、更
新メンバ宣言704及び未更新メンバ宣言706を含む
ことができる、一組のデータ構造宣言702を含む。各
データ構造宣言702は、VM246によって使用され
るデータ構造の一つに対応する。更新メンバ宣言704
は、インデックス/テーブルメンバとしてクラスプレロ
ーダ132により変更されたデータ構造メンバに対する
ものであり、かつ未更新メンバ706は、クラスプレロ
ーダ132が通常に表現されるのが最適であると決定し
たデータ構造メンバに対するものである。各データ構造
宣言702は、更新メンバテーブル宣言708、更新メ
ンバアクセス関数710及び未更新メンバアクセス関数
712に関連付けられる。各更新メンバテーブル宣言7
08は、対応している値テーブル616に関連付けられ
かつ適切なプログラミング言語でそのテーブルを宣言す
る。更新メンバアクセス関数710は、各々の更新メン
バテーブル宣言708で定義されたテーブルネームを使
って更新(即ち、インデックス/テーブル)メンバに対
するアクセス関数を定義する。未更新メンバアクセス関
数712は、通常のクラスプレローダ132によって生
成されるものから変更されない。例えば、図7Aは、図
2Bからのデータ構造1230.N(StructT)に対す
る更新ヘッダファイル情報614を示す。この例は、ク
ラスプレローダ132が以下のことを決定したと想定す
る: 1)member1は400の値を有し、インデックス
/テーブルメンバとして最適に表現される、 2) member2は通常最もよく表現される、 3)member3は200の値を有し、インデックス
/テーブルメンバとして最もよく表現される、 4)member4は1500の値を有し、インデック
ス/テーブルメンバとして最もよく表現される、そして 5)member5は通常最もよく表現される。 その結果、クラスプレローダ132は、変更“struct
T”宣言704を生成し、この宣言においてmembe
r1は9ビット整数インデックスであるm1_idx
(9ビットは200の値にアクセスするのに十分であ
る)として表現され、member3は8ビット整数イ
ンデックスであるm3_idx(400の値をアクセス
するのに充分)として表現され、またmember4は
11ビット整数インデックスであるm4_idx(15
00の値をアクセスするのに充分)として表現される。
他のメンバであるmember2及びmember5は
それぞれ、mtype2及びmtype5の一般メンバ
タイプとして未変更のまま残される。また、クラスプレ
ローダ132は、member1値がタイプmembe
r1の値テーブル(member1_value[])
に記憶されることを示しているmember1に対する
更新メンバテーブル宣言708を生成した。membe
r1_valueテーブルは、外部変数(extern)とし
て宣言され、その外部変数は,テーブルの実効値が他の
ファイル、この場合には、値テーブルファイル166に
おいて定義されることを、コンパイラ122に伝える。
類似の更新メンバテーブル宣言708は、member
3及びmember4に対して生成される。更新mem
ber1に対するアクセス関数は、それに対応して変更
されて対応しているアクセス関数、member1 o
f (T)が呼び出されるたびに、プレロードメソッド
をアクセスするVM246は、member1の値(即
ち、9ビットm1_idx)をmember1_val
ueテーブルへのインデックスとして使う。更新mem
ber3及びmember4に対するアクセス関数71
0は、同様な方法で変更される。
【0037】図7Bを参照すると、ヘッダファイル61
4で宣言されるmember1_valueテーブルに
よって使用され得る確定値を定義するテーブル722.
1を含んでいる、値テーブル616の表現が示されてい
る。この場合、member1_valueテーブル
は、400の値、val1,..,val400から構成
されている定数配列(array)(“const mtyp
e1 member1_value[])として定義さ
れる。member3及びmember4に対する値テ
ーブルのための類似した表現も(例えば、member
3及び4テーブル722.3,722.4で)供給され
る。
4で宣言されるmember1_valueテーブルに
よって使用され得る確定値を定義するテーブル722.
1を含んでいる、値テーブル616の表現が示されてい
る。この場合、member1_valueテーブル
は、400の値、val1,..,val400から構成
されている定数配列(array)(“const mtyp
e1 member1_value[])として定義さ
れる。member3及びmember4に対する値テ
ーブルのための類似した表現も(例えば、member
3及び4テーブル722.3,722.4で)供給され
る。
【0038】図8Aを参照すると、本発明の内部データ
構造(特に単一メンバタイプに対するメンバオカレンス
802及び値テーブル806)が実行エンジンROM2
08で構成される方法が図示されている。オカレンスの
それぞれは、同じメンバ802のプレロードクラスにお
ける一つのオカレンス及びそれを含有するデータ構造タ
イプ805を表わす(データ構造805は、複数のメン
バを含むことが多い−例えば図2B参照)。特定メンバ
が値テーブル806に記憶されているNという個別の値
808を有しているとすると、そのメンバのMオカレン
ス802のそれぞれは、メンバの値を保持する値テーブ
ル806のエントリーへの幅(|log2(N)|+1)ビットの
インデックス804として割り当てられる。例えば、オ
カレンス802.1及び802.6の各々はテーブルエ
ントリー806.N.へのインデックスである。このエ
ントリー806.Nは、これらのメンバオカレンスに関
連付けられた確定値808.Nを記憶する。それゆえ
に、このモデルの総メモリ使用は各メンバにつきM*(|
log2(N)|+1)+ value_table_sizeビットである。
構造(特に単一メンバタイプに対するメンバオカレンス
802及び値テーブル806)が実行エンジンROM2
08で構成される方法が図示されている。オカレンスの
それぞれは、同じメンバ802のプレロードクラスにお
ける一つのオカレンス及びそれを含有するデータ構造タ
イプ805を表わす(データ構造805は、複数のメン
バを含むことが多い−例えば図2B参照)。特定メンバ
が値テーブル806に記憶されているNという個別の値
808を有しているとすると、そのメンバのMオカレン
ス802のそれぞれは、メンバの値を保持する値テーブ
ル806のエントリーへの幅(|log2(N)|+1)ビットの
インデックス804として割り当てられる。例えば、オ
カレンス802.1及び802.6の各々はテーブルエ
ントリー806.N.へのインデックスである。このエ
ントリー806.Nは、これらのメンバオカレンスに関
連付けられた確定値808.Nを記憶する。それゆえ
に、このモデルの総メモリ使用は各メンバにつきM*(|
log2(N)|+1)+ value_table_sizeビットである。
【0039】図8Bを参照すると、特定のメンバの実行
エンジンROM208において従来技術がオカレンス8
52を構成する方法を図示する。オカレンス852のそ
れぞれは、特定のメンバのプレロードクラスにおいて一
つのオカレンスを表わす。そのメンバのMオカレンス8
52のそれぞれは、そのオカレンスに対するメンバの値
854を記憶する全幅メモリワードとして割り当てられ
る(即ち、これらのオカレンスのそれぞれは、上述の第
1のフォーマットで表わされる)。そこで、このモデル
の総メモリ使用は、M*32ビットである(32ビット
メモリワードと想定する)。この結果、本発明は、M*
(|log2(N)+1)+ value_table_sizeがM*memory_
word_size (例えば、M* 32)より小さいときデータ
構造における特定のメンバに対して割り当てられるメモ
リを節約するのである。図8Aの例のように、フィール
ド802は、データ構造宣言の一つの構成要素となるこ
とが多い。
エンジンROM208において従来技術がオカレンス8
52を構成する方法を図示する。オカレンス852のそ
れぞれは、特定のメンバのプレロードクラスにおいて一
つのオカレンスを表わす。そのメンバのMオカレンス8
52のそれぞれは、そのオカレンスに対するメンバの値
854を記憶する全幅メモリワードとして割り当てられ
る(即ち、これらのオカレンスのそれぞれは、上述の第
1のフォーマットで表わされる)。そこで、このモデル
の総メモリ使用は、M*32ビットである(32ビット
メモリワードと想定する)。この結果、本発明は、M*
(|log2(N)+1)+ value_table_sizeがM*memory_
word_size (例えば、M* 32)より小さいときデータ
構造における特定のメンバに対して割り当てられるメモ
リを節約するのである。図8Aの例のように、フィール
ド802は、データ構造宣言の一つの構成要素となるこ
とが多い。
【0040】図9Aを参照すると、本発明のクラスプレ
ローダ132がどのように特定のデータ構造902(例
えば、図2Bにおける構造のメンバ、Struct T
1230.N)のメンバ802の全てを実行エンジンR
OM208に効率的に記憶するかの例を示す。一般に、
本発明は、記憶された値(即ち、インデックス804)
をパックし、固定長メモリワードをできるかぎり多く占
有する。例示されている状況において、メモリワードは
32ビット幅であるが、本発明は、いかなる長さのメモ
リワードにも適用できる。図9Aの例では、Struc
t Tからの9ビット、8ビット及び11ビットメンバ
m1,m3及びm4は、単一の32ビットメモリワード
にパックされる。通常表わされるメンバm2,m5(例
えば、32-ビット値)の値は、最初のワードに続いて
各32ビット一般変数に記憶される。好ましい実施例で
は、これらの通常表わされるメンバは、語境界(例え
ば、32ビットごとに)上に整列されなければならな
い。変更メンバに対してそのような要求はない。従っ
て、各データ構造インスタンスに対して、第4のメンバ
m4と最初の一般変数m2との間に未使用のスペース9
04の4ビットだけが存在する。クラスプレローダ13
2は、メンバ表現及びメンバサイズの与えられたいかな
る組合わせであってもできるかぎり効率的にメモリワー
ドに内部データ構造のメンバをパックすることを目的と
する。
ローダ132がどのように特定のデータ構造902(例
えば、図2Bにおける構造のメンバ、Struct T
1230.N)のメンバ802の全てを実行エンジンR
OM208に効率的に記憶するかの例を示す。一般に、
本発明は、記憶された値(即ち、インデックス804)
をパックし、固定長メモリワードをできるかぎり多く占
有する。例示されている状況において、メモリワードは
32ビット幅であるが、本発明は、いかなる長さのメモ
リワードにも適用できる。図9Aの例では、Struc
t Tからの9ビット、8ビット及び11ビットメンバ
m1,m3及びm4は、単一の32ビットメモリワード
にパックされる。通常表わされるメンバm2,m5(例
えば、32-ビット値)の値は、最初のワードに続いて
各32ビット一般変数に記憶される。好ましい実施例で
は、これらの通常表わされるメンバは、語境界(例え
ば、32ビットごとに)上に整列されなければならな
い。変更メンバに対してそのような要求はない。従っ
て、各データ構造インスタンスに対して、第4のメンバ
m4と最初の一般変数m2との間に未使用のスペース9
04の4ビットだけが存在する。クラスプレローダ13
2は、メンバ表現及びメンバサイズの与えられたいかな
る組合わせであってもできるかぎり効率的にメモリワー
ドに内部データ構造のメンバをパックすることを目的と
する。
【0041】図9Bを参照すると、従来技術のクラスプ
レローダによって記憶されたのと同じデータ構造である
Struct Tのフォーマットを図示している図が示
される。このシステムでは、データ構造は、5つのメン
バを記憶するために5つのワードを必要とすることに留
意されたい。そこで、従来技術は本発明よりはるかに非
効率的である(本発明は、同じデータ構造情報を記憶す
るために3語のみを必要とする)。ここで図10を参照
して、本発明の方法を説明する。この構成は、インデッ
クス804の異なる記憶場所がコンパイラ122によっ
て分解されかつインデックスそのものがそれらの関連値
808のインデックスを記憶するので、アクセス関数の
プレロードクラスの使用に対してまったく問題がない。
レローダによって記憶されたのと同じデータ構造である
Struct Tのフォーマットを図示している図が示
される。このシステムでは、データ構造は、5つのメン
バを記憶するために5つのワードを必要とすることに留
意されたい。そこで、従来技術は本発明よりはるかに非
効率的である(本発明は、同じデータ構造情報を記憶す
るために3語のみを必要とする)。ここで図10を参照
して、本発明の方法を説明する。この構成は、インデッ
クス804の異なる記憶場所がコンパイラ122によっ
て分解されかつインデックスそのものがそれらの関連値
808のインデックスを記憶するので、アクセス関数の
プレロードクラスの使用に対してまったく問題がない。
【0042】図10を参照すると、クラスプレローダ1
32で実行される本発明の方法の流れ図が示してある。
本方法は、課金パス(1104が付されたボックスによ
って表現される)及びデータ構造宣言生成パス(残りの
ステップで表現される)を含む2つのパスにおいて実行
される。(全ての内部データ構造に対して実行される)
最初の課金手続きのように、プレローダ132は、内部
データ構造の全てのメンバタイプを識別する(110
6)。例えば、図2Bを参照すると、Struct T
の5つのメンバは、そのデータ構造メンバタイプであ
る。各メンバタイプに対して、クラスプレローダ132
は、次いで以下の処理を実行する:メンバタイプのMオ
カレンスを識別する(1108)。
32で実行される本発明の方法の流れ図が示してある。
本方法は、課金パス(1104が付されたボックスによ
って表現される)及びデータ構造宣言生成パス(残りの
ステップで表現される)を含む2つのパスにおいて実行
される。(全ての内部データ構造に対して実行される)
最初の課金手続きのように、プレローダ132は、内部
データ構造の全てのメンバタイプを識別する(110
6)。例えば、図2Bを参照すると、Struct T
の5つのメンバは、そのデータ構造メンバタイプであ
る。各メンバタイプに対して、クラスプレローダ132
は、次いで以下の処理を実行する:メンバタイプのMオ
カレンスを識別する(1108)。
【0043】MオカレンスのN値を識別する(111
0)。
0)。
【0044】各値を記憶するのに必要なメモリ空間を決
定する(1112)。
定する(1112)。
【0045】N値をアドレス指定できるインデックスを
記憶するために必要なメモリ空間を決定する(インデッ
クスは少なくとも|log2(N)|+1ビットでなければ
ならない)(1114)。
記憶するために必要なメモリ空間を決定する(インデッ
クスは少なくとも|log2(N)|+1ビットでなければ
ならない)(1114)。
【0046】メンバオカレンスの慣用表現のサイズを決
定する(1116)。この処理は、ボックス1118で
始まるステップで処理をする前に全ての内部データ構造
の全てのメンバ上で実行される。この処理の順序は、ボ
ックス1104における手順によって生成される課金統
計が後続の第2のパス段階によって使用されるのが好ま
しい。特に、課金統計は、第2パスにおいて使用される
ために一時的に記憶される。一度全ての統計が生成され
ると、クラスプレローダ132は、各メンバタイプに対
して以下の計算を行う:メンバオカレンスの慣用表現に
よって要求されるメモリ空間(LHS)(1120);
及び値テーブルへのインデックスとして各メンバオカレ
ンスの新しい表現によって要求されるメモリ空間(RH
S)(1122)。クラスプレローダ132は、LHS
の値をステップ1120で以下のように計算する: LHS= (慣用表現のサイズ)X オカレンスの数 = (慣用表現のサイズ)X Mビット。 クラスプレローダ132は、RHSの値をステップ11
22で以下のように計算する: RHS= (メンバ値のサイズ)X オカレンスの数+
値テーブルのサイズ = (メンバのサイズ)X M+ M X(|log2(N)|+
1)ビット。 もしRHSがLHSよりも小さければ(1124−
Y)、クラスプレローダ132は、そのメンバタイプを
値テーブル及びインデックスとして表わす(112
6)。もしRHSがLHSよりも小さくなければ(11
24−N)、クラスプレローダは、そのメンバタイプを
通常の方法で表わす(1128)。クラスプレローダ1
32は、他のメンバが処理待ちの状態にある間にステッ
プ1120、1122,1124,1126,1128
を繰り返す。一度各メンバタイプが処理されると(11
24−Y),クラスプレローダ132は、データ構造宣
言生成手順1130を実行する。この手順では、各デー
タ構造に対してクラスプレローダ132は、データ構造
メンバの最適な順序を決定する(1132)。順序付け
処理及びその考察は、既に図9Aを参照して説明してい
る。次いで、クラスプレローダ132は、前述の最適な
順序に従ってメンバヘッダ情報614及び値テーブル6
16を生成する(1134)。ヘッダ情報614及びメ
ンバ値616の生成は、図7A及び図7Bを参照して、
既に説明されている。
定する(1116)。この処理は、ボックス1118で
始まるステップで処理をする前に全ての内部データ構造
の全てのメンバ上で実行される。この処理の順序は、ボ
ックス1104における手順によって生成される課金統
計が後続の第2のパス段階によって使用されるのが好ま
しい。特に、課金統計は、第2パスにおいて使用される
ために一時的に記憶される。一度全ての統計が生成され
ると、クラスプレローダ132は、各メンバタイプに対
して以下の計算を行う:メンバオカレンスの慣用表現に
よって要求されるメモリ空間(LHS)(1120);
及び値テーブルへのインデックスとして各メンバオカレ
ンスの新しい表現によって要求されるメモリ空間(RH
S)(1122)。クラスプレローダ132は、LHS
の値をステップ1120で以下のように計算する: LHS= (慣用表現のサイズ)X オカレンスの数 = (慣用表現のサイズ)X Mビット。 クラスプレローダ132は、RHSの値をステップ11
22で以下のように計算する: RHS= (メンバ値のサイズ)X オカレンスの数+
値テーブルのサイズ = (メンバのサイズ)X M+ M X(|log2(N)|+
1)ビット。 もしRHSがLHSよりも小さければ(1124−
Y)、クラスプレローダ132は、そのメンバタイプを
値テーブル及びインデックスとして表わす(112
6)。もしRHSがLHSよりも小さくなければ(11
24−N)、クラスプレローダは、そのメンバタイプを
通常の方法で表わす(1128)。クラスプレローダ1
32は、他のメンバが処理待ちの状態にある間にステッ
プ1120、1122,1124,1126,1128
を繰り返す。一度各メンバタイプが処理されると(11
24−Y),クラスプレローダ132は、データ構造宣
言生成手順1130を実行する。この手順では、各デー
タ構造に対してクラスプレローダ132は、データ構造
メンバの最適な順序を決定する(1132)。順序付け
処理及びその考察は、既に図9Aを参照して説明してい
る。次いで、クラスプレローダ132は、前述の最適な
順序に従ってメンバヘッダ情報614及び値テーブル6
16を生成する(1134)。ヘッダ情報614及びメ
ンバ値616の生成は、図7A及び図7Bを参照して、
既に説明されている。
【0047】図11を参照すると、プレロード実行可能
モジュール及びブートタイムイニシエータ1320は、
実行エンジンコンピュータの読取り専用メモリ(RO
M)に永久に保存される。実行エンジンコンピュータの
電源が投入されるか又はリブートされるたびに、ブート
タイムイニシエータ1320は、自動的に実行される。
他のタスクの中で、ブートタイムイニシエータは、実行
中ランダムアクセスメモリ(RAM)に存在しなければ
ならない全てのメソッド及びデータをリンカによってそ
れらに割り当てられるランダムアクセスメモリ位置にコ
ピーをする。
モジュール及びブートタイムイニシエータ1320は、
実行エンジンコンピュータの読取り専用メモリ(RO
M)に永久に保存される。実行エンジンコンピュータの
電源が投入されるか又はリブートされるたびに、ブート
タイムイニシエータ1320は、自動的に実行される。
他のタスクの中で、ブートタイムイニシエータは、実行
中ランダムアクセスメモリ(RAM)に存在しなければ
ならない全てのメソッド及びデータをリンカによってそ
れらに割り当てられるランダムアクセスメモリ位置にコ
ピーをする。
【0048】
【発明の効果】ここに示されている方法及び装置は、J
avaプログラミング言語を参照して記述されている
が、本発明は、クラスのダイナミック実行時ローディン
グを利用する他のオブジェクト指向型クラスを使用する
コンピュータシステムにも適用できる。更に、本発明
は、ランダムアクセスメモリ(RAM)のようなメモリ
デバイス以外の様々なタイプの実行可能なメディアでの
実行に対応できる。それらに限定されないが、あらゆる
メモリデバイス、コンパクトディスク又はフロッピーデ
ィスクでありうる、コンピュータ読取り可能記憶メディ
アのような、他のタイプの実行可能なメディアを用いる
ことができる。上述の装置及び方法は、汎用のJava
アプリケーションを実行することを考慮して記述されて
おりかつあらゆるJavaアプリケーションに適用でき
る。例えば、本発明は、ハンドヘルドコンピュータ上で
実行することを意図するJavaでコード化された個人
情報管理プログラムによって使用されるクラスをプレロ
ードするために採用することができる。更に、Java
アプリケーションは、分散型の環境で実行される必要は
なく、外部システムから新しいクラスを導入することな
く実行エンジン又はサーバコンピュータで実行するスタ
ンドアロンモードにおいて実行することができる。本発
明は、いくつかの特定の実施例を参照して説明されてい
るが、その記述は、発明を説明するためのものであり、
発明を限定することを企図していない。同一性という完
全なる範疇において、請求の範囲によって定義されてい
る発明の本来の精神と範疇から逸脱することなく、様々
な変更が当業者においてなされ得るであろう。
avaプログラミング言語を参照して記述されている
が、本発明は、クラスのダイナミック実行時ローディン
グを利用する他のオブジェクト指向型クラスを使用する
コンピュータシステムにも適用できる。更に、本発明
は、ランダムアクセスメモリ(RAM)のようなメモリ
デバイス以外の様々なタイプの実行可能なメディアでの
実行に対応できる。それらに限定されないが、あらゆる
メモリデバイス、コンパクトディスク又はフロッピーデ
ィスクでありうる、コンピュータ読取り可能記憶メディ
アのような、他のタイプの実行可能なメディアを用いる
ことができる。上述の装置及び方法は、汎用のJava
アプリケーションを実行することを考慮して記述されて
おりかつあらゆるJavaアプリケーションに適用でき
る。例えば、本発明は、ハンドヘルドコンピュータ上で
実行することを意図するJavaでコード化された個人
情報管理プログラムによって使用されるクラスをプレロ
ードするために採用することができる。更に、Java
アプリケーションは、分散型の環境で実行される必要は
なく、外部システムから新しいクラスを導入することな
く実行エンジン又はサーバコンピュータで実行するスタ
ンドアロンモードにおいて実行することができる。本発
明は、いくつかの特定の実施例を参照して説明されてい
るが、その記述は、発明を説明するためのものであり、
発明を限定することを企図していない。同一性という完
全なる範疇において、請求の範囲によって定義されてい
る発明の本来の精神と範疇から逸脱することなく、様々
な変更が当業者においてなされ得るであろう。
本発明の他の目的及び特徴は、図面に関連して以下の詳
細な説明及び請求の範囲から容易に明らかになるであろ
う。
細な説明及び請求の範囲から容易に明らかになるであろ
う。
【図1】図1は、従来技術及び本発明に共通なクラスフ
ァイルフォーマットを示す。
ァイルフォーマットを示す。
【図2A】図2Aは、クラス、メソッド及びフィールド
情報を符号化すべく従来技術で使用されるVM内部デー
タ構造のブロック図である。
情報を符号化すべく従来技術で使用されるVM内部デー
タ構造のブロック図である。
【図2B】図2Bは、図2Aで示されたVM内部データ
構造のフォーマットを定義するデータ構造宣言を示す。
構造のフォーマットを定義するデータ構造宣言を示す。
【図3】図3は、本発明のクラスプレローダ装置及び方
法が実施される分散型コンピュータ装置のブロック図で
ある。
法が実施される分散型コンピュータ装置のブロック図で
ある。
【図4】図4は、図3のクラスプレローダによって生成
されたプレロードクラスがROMにロードされる図1の
分散型コンピュータ装置における実行エンジンのブロッ
ク図である。
されたプレロードクラスがROMにロードされる図1の
分散型コンピュータ装置における実行エンジンのブロッ
ク図である。
【図5】図5は、プレロード実行可能モジュールを生成
するために使用される処理コンポーネントを示す流れ図
である。
するために使用される処理コンポーネントを示す流れ図
である。
【図6】図6は、プレロード実行可能モジュールのメモ
リフットプリントを低減させるために使用される処理コ
ンポーネントを示す流れ図である。
リフットプリントを低減させるために使用される処理コ
ンポーネントを示す流れ図である。
【図7A】図7Aは、図6の更新ヘッダファイル614
の構成を示す。
の構成を示す。
【図7B】図7Bは、図6の値テーブル616の構成を
示す。
示す。
【図8A】図8Aは、本発明に従った実行エンジンRO
M208における割り当て後の同じメンバオカレンス及
び値の構成を示す。
M208における割り当て後の同じメンバオカレンス及
び値の構成を示す。
【図8B】図8Bは、従来技術に従った実行エンジンR
OM208における割り当て後の同じメンバオカレンス
の構成を示す。
OM208における割り当て後の同じメンバオカレンス
の構成を示す。
【図9A】図9Aは、本発明によって生成される5つの
メンバを有するデータ構造インスタンスのコンパクトな
構成を示す。
メンバを有するデータ構造インスタンスのコンパクトな
構成を示す。
【図9B】図9Bは、従来技術によって生成される図9
Aからのデータ構造インスタンスの構成を示す。
Aからのデータ構造インスタンスの構成を示す。
【図10】図10は、プレロードクラスにおいて使用さ
れる内部データ構造を構築すrべくクラスプレローダに
よって使用される方法のフローチャートである。
れる内部データ構造を構築すrべくクラスプレローダに
よって使用される方法のフローチャートである。
【図11】図11は、読取り専用メモリ(ROM)及び
ランダムアクセスメモリ(RAM)へのプレロードアプ
リケーションのマッピングを示しかつ静的クラスイニシ
ャライザによってランダムアクセスメモリ(RAM)に
マップされたメソッド及びデータの部分のローディング
を示しているブロック図である。
ランダムアクセスメモリ(RAM)へのプレロードアプ
リケーションのマッピングを示しかつ静的クラスイニシ
ャライザによってランダムアクセスメモリ(RAM)に
マップされたメソッド及びデータの部分のローディング
を示しているブロック図である。
───────────────────────────────────────────────────── フロントページの続き (71)出願人 591064003 901 SAN ANTONIO ROAD PALO ALTO,CA 94303,U. S.A. (72)発明者 ヒデヤ カワハラ アメリカ合衆国 カリフォルニア州 94043 マウンテン ヴィュー ウォーカ ー ドライヴ 520 (72)発明者 ネディム フレスコ アメリカ合衆国 カリフォルニア州 94122 サン フランシスコ フイフス アベニュー 1366
Claims (11)
- 【請求項1】 実行時環境に組み込まれるプレロードク
ラスのメモリフットプリントを低減する方法であって:
データ構造タイプのそれぞれが一つ以上のメンバ含んで
おり、複数のプレロードクラスを定義するために使用さ
れる一つ以上のクラスファイルで表わされる該データ構
造のタイプを決定し;前記メンバのそれぞれによって取
られ得る個別の値を決定し;前記プレロードクラスを構
成している対応内部データ構造のサイズを低減すべく選
択された前記メンバの少なくともサブセットに対して前
記値のそれぞれを記憶し;前記記憶段階で記憶された記
憶値をアドレス指定するために一組の値インデックスを
生成し;かつ実行時環境が前記記憶値及び前記一組の値
インデックスとして表わされる前記選択メンバを使用で
きるようにするアクセス関数及びメンバ宣言を生成する
段階を具備することを特徴とする方法。 - 【請求項2】 実行時環境に組み込まれるプレロードク
ラスのメモリフットプリントを低減する装置であって:
一組のクラスファイル;及び前記クラスファイルから一
組のプレロードクラスを生成すべく構成されるクラスプ
レローダ、及びメモリに割当てられた場合に該プレロー
ドクラスの大きさを最小化すべく構成される複数の内部
データ構造宣言を備え、 前記クラスプレローダは、一組の選択データ構造メンバ
のそれぞれが該選択データ構造メンバの個別の値を保持
している記憶構造へのインデックスとして表わされるよ
うに内部データ構造宣言を生成すべく構成されることを
特徴とする装置。 - 【請求項3】 実行エンジン上で実行する実行時環境に
組み込まれるべくプレロードクラスのメモリフットプリ
ントを低減させるためにコンピュータシステムで使用す
るコンピュータプログラムプロダクトであり、前記コン
ピュータプログラムプロダクトは、コンピュータ読取り
可能記憶媒体及びそれに埋め込まれたコンピュータプロ
グラム機構を含んでおり、前記コンピュータプログラム
機構は:一組のクラスファイルからプ前記プレロードク
ラスを生成すべく構成されるクラスプレローダ、及び前
記実行エンジンのメモリに割当てられた場合に前記プレ
ロードクラスの大きさを最小化すべく構成される複数の
内部データ構造宣言を備え、 前記クラスプレローダ゛は、一組の選択データ構造メン
バのそれぞれが該選択データ構造メンバの個別の値を保
持している記憶構造へのインデックスとして表わされる
ように内部データ構造宣言を生成すべく構成されること
を特徴とするコンピュータプログラム機構。 - 【請求項4】 それぞれが一つ以上のメンバを含んでい
る、一つ以上の内部データ構造タイプによって定義され
るプレロードクラスの集合体から構築される実行時環境
であって:前記メンバの少なくともサブセットによって
取られ得る個別の値を保持している記憶構造;及び前記
個別の値を有する対応メンバの各オカレンスとしてサー
ブする前記メンバのサブセットの該対応メンバの該個別
の値を保持している記憶構造エントリーへのインデック
スとを備え、 前記実行時環境は、前記インデックスによって定義され
る位置における前記記憶構造の内容を検索することによ
って前記対応メンバの前記個別の値を必要なときに決定
することを特徴とする実行時環境。 - 【請求項5】 前記個別の値の全ては、知られており、
かつ前記記憶構造エントリーへの前記インデックスは、
前記対応メンバに関連付けられた前記個別の値の全てに
インデックスを付けることができる最小限のビットを用
いて実施されることを特徴とする請求項4に記載の実行
時環境。 - 【請求項6】 実行エンジン上で実行される実行時環境
に組み込まれるプレロードクラスを実行エンジンにロー
ドする方法であって、一組の選択データ構造メンバのそ
れぞれが該選択データ構造メンバの記憶された個別の値
へのインデックスとして表わされるように構成される前
記プレロードクラスを構成している複数の内部データ構
造宣言を含んでいる、該プレロードクラスを実行エンジ
ンにダウンロードする段階を具備し、前記一組は、前記
実行エンジンのメモリに割当てられる場合に前記プレロ
ードクラスの大きさを最小化すべく選択されることを特
徴とする方法。 - 【請求項7】 前記プレロードクラスは、インターネッ
ト上でダウンロードされることを特徴とする請求項6に
記載の方法。 - 【請求項8】 前記プレロードクラスを前記実行エンジ
ンの前記メモリに割当てる段階を更に具備することを特
徴とする請求項6に記載の方法。 - 【請求項9】 クライアント上で実行される実行時環境
に組み込まれるプレロードクラスを生成しかつ該クライ
アントにロードする方法であって:一組の選択データ構
造メンバのそれぞれが該選択データ構造メンバの個別の
値を保持している記憶構造へのインデックスとして表わ
されるように構成される前記プレロードクラスを構成し
ている複数の内部データ構造宣言を含んでいる、該プレ
ロードクラスをサーバに生成し、該一組は、前記ライア
ントのメモリに割当てられる場合に前記プレロードクラ
スの大きさを最小化すべく選択され;かつ前記プレロー
ドクラスを前記クライアントにダウンロードする段階を
具備することを特徴とする方法。 - 【請求項10】 実行時環境に組み込まれるプレロード
クラスのメモリフットプリントを低減する方法であっ
て:前記プレロードクラスを構成している内部データ構
造のメンバによって取られ得る個別の値を決定し;前記
内部データ構造の大きさを低減すべく選択された前記メ
ンバの少なくともサブセットに対して前記値のそれぞれ
を記憶し;かつサブセットメンバの各オカレンスをその
オカレンスの該値へのインデックスで置き換え、そのオ
カレンスの該値が前記インデックスを介して検索できる
ようにする段階を具備することを特徴とする方法。 - 【請求項11】 実行時環境に組み込まれるプレロード
クラスのメモリフットプリントを低減する装置であっ
て:メモリに割当てられる場合に前記プレロードクラス
の大きさを最小化すべく構成される一組の内部データ構
造宣言を生成すべく構成されるクラスプレローダを備
え、前記内部データ構造宣言は、前記プレロードクラス
を構成している内部データ構造を宣言し;前記クラスプ
レローダは、一組の選択データ構造メンバのそれぞれが
前記選択データ構造メンバの個別の値を保持している記
憶構造へのインデックスとして表わされるよう前記内部
データ構造宣言を生成すべく構成されることを特徴とす
る装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/045508 | 1998-03-20 | ||
US09/045,508 US6658492B1 (en) | 1998-03-20 | 1998-03-20 | System and method for reducing the footprint of preloaded classes |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2000047874A true JP2000047874A (ja) | 2000-02-18 |
Family
ID=21938294
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP11118431A Pending JP2000047874A (ja) | 1998-03-20 | 1999-03-23 | プレロ―ドクラスのフットプリント低減装置及び方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US6658492B1 (ja) |
EP (1) | EP0943989A3 (ja) |
JP (1) | JP2000047874A (ja) |
CN (1) | CN1134730C (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2015537298A (ja) * | 2012-11-07 | 2015-12-24 | コーニンクレッカ フィリップス エヌ ヴェKoninklijke Philips N.V. | 演算子のないコンパイラ |
Families Citing this family (40)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6658492B1 (en) * | 1998-03-20 | 2003-12-02 | Sun Microsystems, Inc. | System and method for reducing the footprint of preloaded classes |
GB9825102D0 (en) | 1998-11-16 | 1999-01-13 | Insignia Solutions Plc | Computer system |
US6624761B2 (en) | 1998-12-11 | 2003-09-23 | Realtime Data, Llc | Content independent data compression method and system |
US6601104B1 (en) | 1999-03-11 | 2003-07-29 | Realtime Data Llc | System and methods for accelerated data storage and retrieval |
WO2001057649A2 (en) * | 2000-02-07 | 2001-08-09 | Insignia Solutions Plc | Global constant pool to allow deletion of constant pool entries |
JP2001256058A (ja) * | 2000-03-13 | 2001-09-21 | Omron Corp | インタプリタ型言語によるプログラムの実行方法およびその方法を用いた情報処理装置 |
FR2810755B1 (fr) * | 2000-06-27 | 2003-01-17 | Cit Alcatel | Procede de gestion d'informations en java |
US9143546B2 (en) | 2000-10-03 | 2015-09-22 | Realtime Data Llc | System and method for data feed acceleration and encryption |
US8692695B2 (en) | 2000-10-03 | 2014-04-08 | Realtime Data, Llc | Methods for encoding and decoding data |
US6996813B1 (en) | 2000-10-31 | 2006-02-07 | Sun Microsystems, Inc. | Frameworks for loading and execution of object-based programs |
US6901591B1 (en) * | 2000-10-31 | 2005-05-31 | Sun Microsystems, Inc. | Frameworks for invoking methods in virtual machines |
US7386046B2 (en) | 2001-02-13 | 2008-06-10 | Realtime Data Llc | Bandwidth sensitive data compression and decompression |
US7080373B2 (en) * | 2001-03-07 | 2006-07-18 | Freescale Semiconductor, Inc. | Method and device for creating and using pre-internalized program files |
US7096466B2 (en) | 2001-03-26 | 2006-08-22 | Sun Microsystems, Inc. | Loading attribute for partial loading of class files into virtual machines |
US7020874B2 (en) | 2001-03-26 | 2006-03-28 | Sun Microsystems, Inc. | Techniques for loading class files into virtual machines |
US7543288B2 (en) | 2001-03-27 | 2009-06-02 | Sun Microsystems, Inc. | Reduced instruction set for Java virtual machines |
MXPA03010975A (es) * | 2001-05-30 | 2004-03-26 | Research In Motion Ltd | Sistema de procesamiento de aplicaciones para un dispositivo movil de comunicaciones. |
US7228533B2 (en) | 2001-08-24 | 2007-06-05 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions for performing programming loops |
US7039904B2 (en) | 2001-08-24 | 2006-05-02 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions for storing values into local variables |
US7058934B2 (en) | 2001-08-24 | 2006-06-06 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions for instantiating Java objects |
US6988261B2 (en) | 2001-08-24 | 2006-01-17 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions in Java computing environments |
US6976254B2 (en) | 2001-11-28 | 2005-12-13 | Esmertec Ag | Inter-method control transfer for execution engines with memory constraints |
US7114152B2 (en) * | 2002-01-08 | 2006-09-26 | International Business Machines Corporation | Method, apparatus, and program to determine the mutability of an object at loading time |
US7082523B2 (en) * | 2002-12-16 | 2006-07-25 | Intel Corporation | Bridging memory access across pre-boot and runtime phases |
US7073171B2 (en) * | 2003-02-28 | 2006-07-04 | Bea Systems, Inc. | EJB implementation class loading with removed dependencies with ability to replace EJB implementation class without full redeployment |
US7248895B2 (en) * | 2003-06-12 | 2007-07-24 | Nokia Corporation | Controlling settings for mobile telecommunications apparatus |
US9378002B2 (en) * | 2006-12-22 | 2016-06-28 | Core Wireless Licensing S.A.R.L. | System, method, apparatus and computer program product for providing memory footprint reduction |
US8813041B2 (en) * | 2008-02-14 | 2014-08-19 | Yahoo! Inc. | Efficient compression of applications |
US8407681B2 (en) * | 2008-05-23 | 2013-03-26 | International Business Machines Corporation | System and method for changing variables at runtime |
DE102009059939A1 (de) * | 2009-12-22 | 2011-06-30 | Giesecke & Devrient GmbH, 81677 | Verfahren zum Komprimieren von Bezeichnern |
CA2753626C (en) | 2011-09-30 | 2019-05-07 | Ibm Canada Limited - Ibm Canada Limitee | Packed data objects |
US9507613B2 (en) * | 2012-03-30 | 2016-11-29 | Oracle International Corporation | Methods and apparatus for dynamically preloading classes |
US9383448B2 (en) | 2012-07-05 | 2016-07-05 | Deca System Co., Ltd. | Golf GPS device with automatic hole recognition and playing hole selection |
US9672020B2 (en) * | 2014-09-19 | 2017-06-06 | Microsoft Technology Licensing, Llc | Selectively loading precompiled header(s) and/or portion(s) thereof |
US10489130B2 (en) * | 2015-09-24 | 2019-11-26 | Oracle International Corporation | Configurable memory layouts for software programs |
US20170139681A1 (en) | 2015-11-13 | 2017-05-18 | International Business Machines Corporation | Class splitting in object-oriented environments |
US10191753B2 (en) | 2016-03-30 | 2019-01-29 | Oracle International Corporation | Generating verification metadata and verifying a runtime type based on verification metadata |
US10394528B2 (en) | 2016-03-30 | 2019-08-27 | Oracle International Corporation | Returning a runtime type loaded from an archive in a module system |
US10678524B2 (en) * | 2018-03-15 | 2020-06-09 | Intel Corporation | Runtime struct fields size reduction |
CN112241473A (zh) * | 2020-09-07 | 2021-01-19 | 上海连尚网络科技有限公司 | 一种用于为应用配置数据的方法与设备 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6526565B1 (en) * | 1995-12-21 | 2003-02-25 | International Business Machines Corporation | Packaging algorithm for providing object oriented applications having reduced footprints |
US5734822A (en) * | 1995-12-29 | 1998-03-31 | Powertv, Inc. | Apparatus and method for preprocessing computer programs prior to transmission across a network |
US5815718A (en) * | 1996-05-30 | 1998-09-29 | Sun Microsystems, Inc. | Method and system for loading classes in read-only memory |
US6052778A (en) * | 1997-01-13 | 2000-04-18 | International Business Machines Corporation | Embedded system having dynamically linked dynamic loader and method for linking dynamic loader shared libraries and application programs |
US6363436B1 (en) * | 1997-01-27 | 2002-03-26 | International Business Machines Corporation | Method and system for loading libraries into embedded systems |
US5966702A (en) * | 1997-10-31 | 1999-10-12 | Sun Microsystems, Inc. | Method and apparatus for pre-processing and packaging class files |
US6349344B1 (en) * | 1997-12-16 | 2002-02-19 | Microsoft Corporation | Combining multiple java class files into a run-time image |
US6658492B1 (en) * | 1998-03-20 | 2003-12-02 | Sun Microsystems, Inc. | System and method for reducing the footprint of preloaded classes |
US6061520A (en) * | 1998-04-07 | 2000-05-09 | Sun Microsystems, Inc. | Method and system for performing static initialization |
US6366898B2 (en) * | 1998-09-21 | 2002-04-02 | Sun, Microsystems, Inc. | Method and apparatus for managing classfiles on devices without a file system |
GB2343021A (en) * | 1998-10-19 | 2000-04-26 | Ibm | Class loading model for object oriented programming |
US6324637B1 (en) * | 1999-08-13 | 2001-11-27 | Sun Microsystems, Inc. | Apparatus and method for loading objects from a primary memory hash index |
-
1998
- 1998-03-20 US US09/045,508 patent/US6658492B1/en not_active Expired - Lifetime
-
1999
- 1999-03-22 CN CNB991041690A patent/CN1134730C/zh not_active Expired - Fee Related
- 1999-03-22 EP EP99302198A patent/EP0943989A3/en not_active Withdrawn
- 1999-03-23 JP JP11118431A patent/JP2000047874A/ja active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2015537298A (ja) * | 2012-11-07 | 2015-12-24 | コーニンクレッカ フィリップス エヌ ヴェKoninklijke Philips N.V. | 演算子のないコンパイラ |
Also Published As
Publication number | Publication date |
---|---|
CN1229944A (zh) | 1999-09-29 |
CN1134730C (zh) | 2004-01-14 |
EP0943989A3 (en) | 2005-09-28 |
EP0943989A2 (en) | 1999-09-22 |
US6658492B1 (en) | 2003-12-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2000047874A (ja) | プレロ―ドクラスのフットプリント低減装置及び方法 | |
US6609248B1 (en) | Cross module representation of heterogeneous programs | |
US7159213B2 (en) | Computer program product having preloaded software module | |
CN1134731C (zh) | 在计算机系统中编译指令的方法 | |
KR100384905B1 (ko) | 컴퓨터 메모리에서 데이터 관리 방법, 장치 및 기록매체 | |
CN111966424B (zh) | 使用复常量的方法和系统 | |
JP5518085B2 (ja) | ランタイムにおいて生成したコードのキャッシュへの格納 | |
KR101143027B1 (ko) | 자기 기술적 소프트웨어 이미지 업데이트 컴포넌트 | |
JP4699580B2 (ja) | データ処理システムの配列の静的初期化方法、データ処理方法、並びにデータ処理システム及びその制御手順をコンピュータに実行させるプログラムを記憶したコンピュータ読み取り可能な記憶媒体 | |
US20080005719A1 (en) | Methods, systems, and computer program products for providing a program execution environment | |
US20080022265A1 (en) | Methods, systems, and computer program products for generating and using object modules | |
US20040003377A1 (en) | Converting byte code instructions to a new instruction set | |
KR19980080502A (ko) | 템플릿 오브젝트 파일들을 최적화하기 위한 시스템과 방법 | |
Hicks et al. | Safe and flexible dynamic linking of native code | |
CA2245133A1 (en) | Language manager interface | |
CN1287280C (zh) | 用于在运行时提高函数的执行性能的方法和计算系统 | |
US7194736B2 (en) | Dynamic division optimization for a just-in-time compiler | |
US10733095B2 (en) | Performing garbage collection on an object array using array chunk references | |
US7181724B2 (en) | Representation of Java® data types in virtual machines | |
US11256480B1 (en) | Deserialization of stream objects using constant-foldable method handles | |
Cockshott | Glasgow Pascal Compiler with vector extensions | |
Sitton et al. | The PL/EXUS language and virtual machine | |
Philippsen et al. | Complex numbers for Java | |
Townsend et al. | Configuring the Source Code for Version 9 of Icon | |
Aistleitner | A generic implementation of differential characteristic set algorithms in Aldor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20060227 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20090202 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20090629 |