(57)【特許請求の範囲】
【請求項１】
クラスで構成されるプログラムをコンパイルすることでそのプログラムのオブジェクトコードを生成するコンパイル装置において、
コンパイル対象のクラスに記述される他のクラスを呼び出す命令文に基づいて、コンパイル対象のクラスが参照する１つ又は複数の他クラスを特定する特定手段と、
上記特定手段の特定したクラスのロード命令を生成して、コンパイル対象のクラスの初期化処理を実行するためにメモリ上に生成されて、オブジェクトコードがクラスとしてメモリにロードされた時点で呼び出されることになる初期化メソッドに、その生成したロード命令を書き込む展開手段とを備えることを、
特徴とするコンパイル装置。
【請求項２】
請求項１記載のコンパイル装置において、
上記特定手段は、標準ライブラリとして用意されるクラスについては、特定対象から除外することを、
特徴とするコンパイル装置。
【請求項３】
クラスで構成されて、初期化メソッドにそのクラスが参照する他クラスのロード命令が書き込まれたプログラムのオブジェクトコードをメモリにローディングするローディング装置であって、
ローディング対象のクラスが通知されるときに、そのクラスを処理対象の開始として、処理対象クラスのオブジェクトコードを読み込んでメモリにローディングし、これにより処理対象クラスの初期化メソッドに書き込まれたロード命令が実行されるように制御することで、そのロード命令の指定するクラスを取得して、その取得したクラスを新たな処理対象として、処理対象クラスのオブジェクトコードを読み込んでメモリにローディングしていくことを繰り返すローディング手段を備えることを、
特徴とするローディング装置。
【請求項４】
クラスで構成されて、初期化メソッドにそのクラスが参照する他クラスのロード命令が書き込まれたプログラムのオブジェクトコードを他計算機に送信するプログラム送信装置であって、
送信対象のクラスが通知されるときに、そのクラスを処理対象の開始として、処理対象クラスのオブジェクトコードを読み込んでメモリにローディングし、これにより処理対象クラスの初期化メソッドに書き込まれたロード命令が実行されるように制御することで、そのロード命令の指定するクラスを取得して、その取得したクラスを新たな処理対象として、処理対象クラスのオブジェクトコードを読み込んでメモリにローディングしていくことを繰り返すローディング手段と、
上記ローディング手段の読み込んだオブジェクトコードを一括して他計算機に送信する送信手段とを備えることを、
特徴とするプログラム送信装置。
【請求項５】
クラスで構成されるプログラムをコンパイルすることでそのプログラムのオブジェクトコードを生成するコンパイル装置の実現に用いられるプログラムが記録されるプログラム記録媒体であって、
上記プログラムとして、コンピュータに、
コンパイル対象のクラスに記述される他のクラスを呼び出す命令文に基づいて、コンパイル対象のクラスが参照する１つ又は複数の他クラスを特定する特定処理と、
上記特定処理の特定したクラスのロード命令を生成して、コンパイル対象のクラスの初期化処理を実行するためにメモリ上に生成されて、オブジェクトコードがクラスとしてメモリにロードされた時点で呼び出されることになる初期化メソッドに、その生成したロード命令を書き込む展開処理とを実行させるものが記録されることを、
特徴とするプログラム記録媒体。
【請求項６】
クラスで構成されて、初期化メソッドにそのクラスが参照する他クラスのロード命令が書き込まれたプログラムのオブジェクトコードをメモリにローディングするローディング装置の実現に用いられるプログラムが記録されるプログラム記録媒体であって、
上記プログラムとして、コンピュータに、
ローディング対象のクラスが通知されるときに、そのクラスを処理対象の開始として、処理対象クラスのオブジェクトコードを読み込んでメモリにローディングし、これにより処理対象クラスの初期化メソッドに書き込まれたロード命令が実行されるように制御することで、そのロード命令の指定するクラスを取得して、その取得したクラスを新たな処理対象として、処理対象クラスのオブジェクトコードを読み込んでメモリにローディングしていくことを繰り返すローディング処理を実行させるものが記録されることを、
特徴とするプログラム記録媒体。
【請求項７】
クラスで構成されて、初期化メソッドにそのクラスが参照する他クラスのロード命令が書き込まれたプログラムのオブジェクトコードを他計算機に送信するプログラム送信装置の実現に用いられるプログラムが記録されるプログラム記録媒体であって、
上記プログラムとして、コンピュータに、
送信対象のクラスが通知されるときに、そのクラスを処理対象の開始として、処理対象クラスのオブジェクトコードを読み込んでメモリにローディングし、これにより処理対象クラスの初期化メソッドに書き込まれたロード命令が実行されるように制御することで、そのロード命令の指定するクラスを取得して、その取得したクラスを新たな処理対象として、処理対象クラスのオブジェクトコードを読み込んでメモリにローディングしていくことを繰り返すローディング処理と、
上記ローディング処理の読み込んだオブジェクトコードを一括して他計算機に送信する送信処理とを実行させるものが記録されることを、
特徴とするプログラム記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、クラスで構成されるプログラムをコンパイルすることでそのプログラムのオブジェクトコードを生成するコンパイル装置と、そのコンパイル装置でコンパイルされたオブジェクトコードをメモリにローディングするローディング装置と、そのコンパイル装置でコンパイルされたオブジェクトコードを他計算機に送信するプログラム送信装置と、それらの装置の実現に用いられるプログラムが記録されるプログラム記録媒体とに関する。
【０００２】
【従来の技術】
オブジェクト指向言語などでは、カプセル化されたクラスでプログラムが構成されている。
【０００３】
このような構成を採るプログラムでは、各クラスが規定のデータ処理機能を有しており、メインプログラムを実行するクラスは、他クラスのデータ処理機能を利用する場合には、そのクラスにメッセージを送信することでデータ処理機能の実行を依頼し、その実行結果を受け取ることでデータ処理を実行していくことになる。
【０００４】
従来では、このようなクラスで構成されるプログラムを実行する場合、メモリを節約するために、他のクラスが必要となった場合、その時点で、そのクラスのオブジェクトコードを動的にローディングするという構成を採っていた。
【０００５】
【発明が解決しようとする課題】
確かに、この従来技術では、最少のメモリ消費でプログラムを実行できる。しかしながら、この従来技術に従っていると、あるクラスを実行するときに必要となる他のクラスを、そのクラスの実行前に知ることができない。
【０００６】
これから、他のクラスが必要となるときに、その時点で、そのクラスのオブジェクトコードをローディングすることから、データ処理の効率が落ちるという問題点があった。
【０００７】
また、あるクラスのオブジェクトコードを他の計算機に飛ばして、その計算機でそのクラスを実行するという移動コードの構成を採る場合に、その実行中に他クラスのオブジェクトコードが必要となると、その都度、必要となるクラスのオブジェクトコードを計算機間で飛ばしていかなければならず、非常に効率が悪くなるという問題点があった。
【０００８】
本発明はかかる事情に鑑みてされたものであって、データ処理効率の向上と移動コードの実現に好適な新たなコンパイル装置の提供と、そのコンパイル装置でコンパイルされたオブジェクトコードをメモリにローディングする新たなローディング装置の提供と、そのコンパイル装置でコンパイルされたオブジェクトコードを他計算機に送信する新たなプログラム送信装置の提供と、それらの装置の実現に用いられるプログラムが記録される新たなプログラム記録媒体の提供とを目的とする。
【０００９】
【課題を解決するための手段】
この目的を達成するために、本発明のコンパイル装置は、クラスで構成されるプログラムをコンパイルすることでそのプログラムのオブジェクトコードを生成するという処理を行うときにあって、（１）コンパイル対象のクラスに記述される他のクラスを呼び出す命令文に基づいて、コンパイル対象のクラスが参照する１つ又は複数の他クラスを特定する特定手段と、（２）特定手段の特定したクラスのロード命令を生成して、コンパイル対象のクラスの初期化処理を実行するためにメモリ上に生成されて、オブジェクトコードがクラスとしてメモリにロードされた時点で呼び出されることになる初期化メソッドに、その生成したロード命令を書き込む展開手段とを備えるように構成する。
また、この目的を達成するために、本発明のローディング装置は、クラスで構成されて、初期化メソッドにそのクラスが参照する他クラスのロード命令が書き込まれたプログラムのオブジェクトコードをメモリにローディングするという処理を行うときにあって、（１）ローディング対象のクラスが通知されるときに、そのクラスを処理対象の開始として、処理対象クラスのオブジェクトコードを読み込んでメモリにローディングし、これにより処理対象クラスの初期化メソッドに書き込まれたロード命令が実行されるように制御することで、そのロード命令の指定するクラスを取得して、その取得したクラスを新たな処理対象として、処理対象クラスのオブジェクトコードを読み込んでメモリにローディングしていくことを繰り返すローディング手段を備えるように構成する。
また、この目的を達成するために、本発明のプログラム送信装置は、クラスで構成されて、初期化メソッドにそのクラスが参照する他クラスのロード命令が書き込まれたプログラムのオブジェクトコードを他計算機に送信するという処理を行うときにあって、（１）送信対象のクラスが通知されるときに、そのクラスを処理対象の開始として、処理対象クラスのオブジェクトコードを読み込んでメモリにローディングし、これにより処理対象クラスの初期化メソッドに書き込まれたロード命令が実行されるように制御することで、そのロード命令の指定するクラスを取得して、その取得したクラスを新たな処理対象として、処理対象クラスのオブジェクトコードを読み込んでメモリにローディングしていくことを繰り返すローディング手段と、（２）ローディング手段の読み込んだオブジェクトコードを一括して他計算機に送信する送信手段とを備えるように構成する。
次に、図１及び図２に示す本発明の原理構成に従って、本発明の原理構成について説明する。
図１（ａ）は本発明のコンパイル装置１の原理構成図、図１（ｂ）は本発明のローディング装置２の原理構成図、図２は本発明のプログラム送信装置３の原理構成図である。
【００１０】
本発明のコンパイル装置１は、図１（ａ）に示すように、コンパイラ１００を展開して、ソースファイル２０からソースプログラムを読み出しコンパイルすることでオブジェクトコードを生成してオブジェクトファイル３０に格納する。
【００１１】
本発明のコンパイル装置１のコンパイル対象となるプログラムは、クラスで構成されるものであり、この構成のソースプログラムのコンパイル処理を実行するために、本発明のコンパイル装置１は、コンパイル対象のクラスを順番に選択する選択手段１０と、選択手段１０の選択するクラスが参照する１つ又は複数の他クラスを特定する特定手段１１と、特定手段１１の特定するクラスのロード命令を生成して、それを選択手段１０の選択するクラスの持つ初期化領域に展開する展開手段１２とを備える。
【００１２】
ここで、本発明のコンパイル装置１の持つ機能は具体的にはプログラムで実現されるものであり、このプログラムは、フロッピィディスクなどに記憶されたり、サーバなどのディスクなどに記憶され、それらからコンパイル装置１にインストールされてメモリ上で動作することで、本発明を実現することになる。
【００１３】
一方、本発明のローディング装置２は、図１（ｂ）に示すように、メモリ４０を持つ計算機５０に展開され、クラスローダ２００を展開して、オブジェクトファイル３０に格納される本発明のコンパイル装置１のコンパイルしたオブジェクトコードをメモリ４０にローディングするものであって、オブジェクトコードのローディング処理を実行するローディング手段１３を備える。
【００１４】
ここで、本発明のローディング装置２の持つ機能は具体的にはプログラムで実現されるものであり、このプログラムは、フロッピィディスクなどに記憶されたり、サーバなどのディスクなどに記憶され、それらからローディング装置２にインストールされてメモリ上で動作することで、本発明を実現することになる。
【００１５】
一方、本発明のプログラム送信装置３は、図２に示すように、メモリ４０を持つ計算機５０に展開され、クラスローダ２００を展開して、オブジェクトファイル３０に格納される本発明のコンパイル装置１のコンパイルしたオブジェクトコードを他計算機６０に送信するものであって、他計算機６０に送信するオブジェクトコードをオブジェクトファイル３０（キャッシュが備えられるときには、キャッシュの場合もある）から読み込むローディング手段１３と、ローディング手段１３の読み込むオブジェクトコードを一時的に保存する保存手段１４と、保存手段１４の保存するオブジェクトコードを一括して他計算機６０に送信する送信手段１５とを備える。
【００１６】
ここで、本発明のプログラム送信装置３の持つ機能は具体的にはプログラムで実現されるものであり、このプログラムは、フロッピィディスクなどに記憶されたり、サーバなどのディスクなどに記憶され、それらからプログラム送信装置２にインストールされてメモリ上で動作することで、本発明を実現することになる。
【００１７】
このように構成される本発明のコンパイル装置１では、選択手段１０がコンパイル対象のクラスを選択すると、特定手段１１は、そのコンパイル対象のクラスが参照する１つ又は複数の他クラスを特定し、この特定結果を受けて、展開手段１２は、特定されたクラスのロード命令を生成して、それをコンパイル対象のクラスの持つ初期化領域に展開する。
【００１８】
このとき、特定手段１１は、標準ライブラリとして用意されるクラスについては、特定対象から除外することがある。
このようにして、本発明のコンパイル装置１によりコンパイルされるクラスは、初期化領域に、それが参照する１つ又は複数の他クラスのロード命令を展開することになる。
【００１９】
一方、本発明のローディング装置２では、ローディング手段１３は、ローディング対象のクラスが通知されるときに、そのクラスを処理対象の開始として、処理対象クラスのオブジェクトコードをオブジェクトファイル３０（キャッシュが備えられるときには、キャッシュの場合もある）から読み込んでメモリ４０にローディングする。
【００２０】
このローディングされるオブジェクトコードはプログラム実行機能によりクラス定義され、初期化領域が実行されることで、初期化領域に展開されるロード命令の指定するクラスがローディング手段１３に通知されるので、ローディング手段１３は、その通知されるクラスを新たな処理対象として設定して、処理対象クラスのオブジェクトコードをオブジェクトファイル３０などから読み込んでメモリ４０にローディングすることを繰り返していくことで、ローディング対象のクラスの実行前に、そのクラスのオブジェクトコードと、そのクラスが参照する他クラスのオブジェクトコードとをローディングする。
【００２１】
このようにして、本発明のローディング装置２によれば、あるクラスの実行前に、そのクラスが参照する他クラスのオブジェクトコードについてもローディングできるようになるので、データ処理の効率を向上できるようになる。
【００２２】
一方、本発明のプログラム送信装置３では、ローディング手段１３は、送信対象のクラスが通知されるときに、そのクラスを処理対象の開始として、処理対象クラスのオブジェクトコードをオブジェクトファイル３０（キャッシュが備えられるときには、キャッシュの場合もある）から読み込み、それを保存手段１４に保存しつつメモリ４０にローディングする。
【００２３】
このローディングされるオブジェクトコードはプログラム実行機能によりクラス定義され、初期化領域が実行されることで、初期化領域に展開されるロード命令の指定するクラスがローディング手段１３に通知されるので、ローディング手段１３は、その通知されるクラスを新たな処理対象として設定して、処理対象クラスのオブジェクトコードをオブジェクトファイル３０などから読み込み、それを保存手段１４に保存しつつメモリ４０にローディングすることを繰り返していくことで、送信対象のクラスのオブジェクトコードと、そのクラスが参照する他クラスのオブジェクトコードとを保存手段１４に保存する。
【００２４】
ローディング手段１３による保存手段１４への保存が終了すると、送信手段１５は、保存手段１４に保存されるローディング手段１３の読み込んだオブジェクトコードを一括して他計算機６０に送信する。
【００２５】
このようにして、本発明のプログラム送信装置３によれば、他計算機６０にあるクラスのオブジェクトコードを送信するときに、そのクラスが参照する他クラスのオブジェクトコードについても送信できるようになるので、移動コードの構成を実現するときに、効率的なデータ処理を実行できるようになる。
【００２６】
このように、本発明によれば、あるクラスの実行前に、そのクラスが参照するクラスのオブジェクトコードについてもローディングできるようになるので、データ処理の効率を向上できるようになる。
【００２７】
そして、本発明によれば、あるクラスのオブジェクトコードを他の計算機に飛ばして、その計算機でそのクラスを実行するという移動コードの構成を採る場合に、そのクラスのオブジェクトコードを他の計算機に飛ばすときに、そのクラスから繋がる全てのクラスのオブジェクトコードも同時に飛ばすことができるようになるので、移動コードを受け取る計算機は、データ処理の実行に必要となる全てのオブジェクトコードをその実行前に入手できるようになるので、効率的なデータ処理を実行できるようになる。
【００２８】
【発明の実施の形態】
以下、実施の形態に従って本発明を詳細に説明する。
最初に、本発明のコンパイル装置１の一実施例について説明する。
【００２９】
図１（ａ）に示した本発明のコンパイル装置１に展開されるコンパイラ１００の処理対象となるプログラムとして、各機能単位を手続きとして記述する手続き型言語を想定すると、コンパイラ１００は、図３に示すように、１手続きをコンパイルして１オブジェクトコードとして出力するよう処理する。これから、結果的には、ソースプログラムに書かれている手続きと同じ数のオブジェクトコードを出力することになる。
【００３０】
コンパイラ１００の出力する１オブジェクトコードは、オブジェクト指向言語でいうところのクラスに相当し、コンパイラ１００は、図４に示すように、クラスを識別するための名前として、ソースプログラムに書かれた手続きと同じ名前を付けるとともに、ユーザ定義のプログラムから出力されたクラスであることを示すタグを付加する。
【００３１】
そして、コンパイラ１００は、図４に示すように、ソースプログラムに書かれた手続きのコンパイル結果である「手続き本体メソッド」の他に、初期化処理を実行するための「初期化メソッド」を生成する。
【００３２】
この「手続き本体メソッド」は、プログラムの実行中に手続き呼び出しが起きたときに呼び出されるのに対して、「初期化メソッド」は、オブジェクトコードがクラスとしてメモリにロードされた時点で呼び出されることになる。
【００３３】
本発明のコンパイラ１００は、プログラム実行の前に、必要とされるクラスのローディングを済ませることを実現するために、図５に示すように、ユーザ定義クラス（ユーザプログラムから出力されたクラス）が他のユーザ定義クラスを参照しているときには、その参照元のユーザ定義クラスの持つ初期化メソッドに、その参照先のユーザ定義クラスのロードを指示する命令を書き込むように処理する。
【００３４】
次に、図６の処理フローに従って、本発明のコンパイラ１００が実行するこのコンパイル処理について詳細に説明する。
本発明のコンパイラ１００は、コンパイル要求があると、図６の処理フローに示すように、先ず最初に、ステップ１で、ソースファイル２０からソースプログラムを読み込む。
【００３５】
続いて、ステップ２で、読み込んだソースプログラムの中に、未処理の手続きが残されているのか否かを判断して、残されていないことを判断するときには、処理を終了し、残されていることを判断するときには、ステップ３に進んで、未処理の手続きを１つ選択する。
【００３６】
続いて、ステップ４で、ステップ３で選択した手続きの持つ命令文に未処理のものが残されているのか否かを判断して、残されていないことを判断するときには、ステップ５に進んで、ステップ３で選択した手続きのオブジェクトコードをオブジェクトファイル３０に出力する。
【００３７】
一方、ステップ４で、ステップ３で選択した手続きの持つ命令文に未処理のものが残されていることを判断するときには、ステップ６に進んで、未処理の命令文を１つ選択し、続くステップ７で、その選択した命令文が他のユーザ手続きを呼び出す文であるのか否かを判断する。
【００３８】
このステップ７で、他のユーザ手続きを呼び出す命令文であることを判断するときには、ステップ８に進んで、呼び出される手続きのロード命令を初期化メソッドに書き込んでから、続くステップ９で、命令文をコンパイルし、手続き本体メソッドに書き込んでからステップ４に戻る。
【００３９】
一方、ステップ７で、他のユーザ手続きを呼び出す命令文でないことを判断するときには、ステップ８の処理を実行することなく、ステップ９に進んで、命令文をコンパイルし、手続き本体メソッドに書き込んでからステップ４に戻る。
【００４０】
このようにして、本発明のコンパイラ１００は、図５に示すように、ユーザ定義クラスが他のユーザ定義クラスを参照しているときには、その参照元のユーザ定義クラスの持つ初期化メソッドに、その参照先のユーザ定義クラスのロードを指示する命令を書き込むように処理するのである。
【００４１】
この処理から分かるように、本発明のコンパイラ１００は、ユーザ定義クラスが標準ライブラリのクラスを参照していても、初期化メソッドには、その標準ライブラリクラスのロードを指示する命令については書き込まないよう処理することになる。
【００４２】
次に、本発明のローディング装置２及びプログラム送信装置３の一実施例について説明する。
図１（ｂ）に示した本発明のローディング装置２に展開されるクラスローダ２００と、図２に示した本発明のプログラム送信装置３に展開されるクラスローダ２００は、図７に示すように、仮想計算機からクラスの要求があると、オブジェクトファイル３０から、そのクラスのオブジェクトコードを読み込み、それをキャッシュ２０１に保存しつつ仮想計算機にローディングする。
【００４３】
このようにしてオブジェクトコードを受け取ると、仮想計算機は、初期化メソッドを実行することでクラスを定義する。このとき、本発明のコンパイラ１００により、初期化メソッドにクラスのロード命令が書き込まれているときには、仮想計算機は、本発明のクラスローダ２００に対して、そのクラスの要求を発行するので、本発明のクラスローダ２００は、このクラス要求を受け取ると、オブジェクトファイル３０から、そのクラスのオブジェクトコードを読み込み、それをキャッシュ２０１に保存しつつ仮想計算機にローディングしていくことを繰り返していく。
【００４４】
図８及び図９に、本発明のクラスローダ２００の詳細な構成を図示する。
本発明のクラスローダ２００は、図８に示すように、デフォルトクラスローダ２０２と専用クラスローダ２０３とを備え、更に、図９に示すように、テンポラリクラスローダ２０４を備える。
【００４５】
ここで、図８中、２０１ａは専用クラスローダ２０３の備えるユーザコードキャッシュであって、ユーザ定義クラスのオブジェクトコードを格納するもの、２０１ｂは専用クラスローダ２０３の備える標準ライブラリクラスキャッシュであって、標準ライブラリクラスを格納するものである。また、図９中、２０１ｃはテンポラリクラスローダ２０４の備える移動コードキャッシュであって、他仮想計算機に送信するオブジェクトコードを格納するものである。
【００４６】
このデフォルトクラスローダ２０２は、プログラムを実行するときに、システムによって必ず実行されるクラスローダであり、標準ライブラリのオブジェクトコードをローディングすることでクラス定義する。
【００４７】
専用クラスローダ２０３は、デフォルトクラスローダ２０２の上位クラスローダとして機能して、クラス名が通知されると、そのクラスがユーザ定義のクラスであるのか、標準ライブラリのクラスであるのかを判断して、ユーザ定義のクラスであることを判断するときには、オブジェクトファイル３０からオブジェクトコードを取り出し、標準ライブラリのクラスであることを判断するときには、デフォルトクラスローダ２０２から定義済みのクラスを取り出す。このようにして取り出したオブジェクトコード／クラスは、それぞれユーザコードキャッシュ２０１ａ／標準ライブラリクラスキャッシュ２０１ｂに保存されることになる。
【００４８】
テンポラリクラスローダ２０４は、専用クラスローダ２０３の上位クラスローダとして機能して、プログラムの実行中に、プログラムの一部を移動コードとして取り出すときに動作するクラスローダあり、専用クラスローダ２０３に要求を出すことで、移動コードとして送信したいオブジェクトコードを取り出す。このようにして取り出したオブジェクトコードは、移動コードキャッシュ２０１ｃに保存されることになる。
【００４９】
図１０に、本発明のローディング装置２を実現するために本発明のクラスローダ２００が実行する処理フローの一実施例を図示する。
次に、この処理フローに従って、本発明のローディング処理について詳細に説明する。
【００５０】
本発明のクラスローダ２００は、仮想計算機からローディング処理の要求が発行されると、図１０の処理フローに示すように、先ず最初に、ステップ１で、専用クラスローダ２０３を生成する。
【００５１】
続いて、ステップ２で、仮想計算機からローディング対象となるクラス名を受け取り、続くステップ３で、その受け取ったクラス名のクラスがユーザ定義のクラスであるのか、標準ライブラリのクラスであるのかを判断する。
【００５２】
このステップ３で、ローディング対象となるクラスがユーザ定義クラスであることを判断するときには、ステップ４に進んで、オブジェクトファイル３０（ユーザコードキャッシュ２０１ａに格納されている場合には、ユーザコードキャッシュ２０１ａ）からそのクラスのオブジェクトコードを読み込み、メモリにローディングすることでクラスを定義し、続くステップ５で、そのオブジェクトコードをユーザコードキャッシュ２０１ａに保存する。
【００５３】
一方、ステップ３で、ローディング対象となるクラスが標準ライブラリクラスであることを判断するときには、ステップ６に進んで、デフォルトクラスローダ２０２から定義済みのクラスを取り込む。
【００５４】
ステップ５／ステップ６の処理を終了すると、ステップ７に進んで、仮想計算機から参照クラスの要求があるのか否かを判断して、要求があることを判断するときには、ステップ３に戻り、要求がないことを判断するときには、ステップ８に進んで、クラスロードを終了する。
【００５５】
この本発明のクラスローダ２００の処理に従って、例えば、クラスＡがクラスＢ，Ｃを参照し、クラスＢがクラスＤ，Ｅを参照し、クラスＣがクラスＦを参照するときに、クラスＡのローディング要求があると、図１１に示すように、先ず最初に、クラスＡがローディングされ、それによりクラスＡの初期化メソッドに書き込まれるクラスＢ，Ｃのロード命令が実行されることで、続いて、クラスＢ，Ｃがローディングされ、それによりクラスＢの初期化メソッドに書き込まれるクラスＤ，Ｅのロード命令と、クラスＣの初期化メソッドに書き込まれるクラスＦのロード命令とが実行されることで、クラスＤ，Ｅ，Ｆがローディングされることになる。なお、図中に示す「Ｓｙｓ」は標準ライブラリクラスである。
【００５６】
このようにして、本発明のクラスローダ２００の処理に従って、あるクラスの実行前に、そのクラスが参照するクラスのオブジェクトコードについてもローディングできるようになる。
【００５７】
ここで、上述したように、本発明のコンパイラ１００は、標準ライブラリクラスのロード命令については初期化メソッドに書き込まないように処理するので、標準ライブラリクラスについては、プログラムの実行中に、必要に応じてローディングされることになる。
【００５８】
図１２に、本発明のプログラム送信装置３を実現するために本発明のクラスローダ２００が実行する処理フローの一実施例を図示する。
次に、この処理フローに従って、本発明のプログラム送信処理について詳細に説明する。
【００５９】
本発明のクラスローダ２００は、仮想計算機からプログラムの送信処理の要求が発行されると、図１２の処理フローに示すように、先ず最初に、ステップ１で、テンポラリクラスローダ２０４を生成する。
【００６０】
続いて、ステップ２で、仮想計算機から送信対象となるクラス名を受け取り、続くステップ３で、その受け取ったクラス名のクラスがユーザ定義のクラスであるのか、標準ライブラリのクラスであるのかを判断する。
【００６１】
このステップ３で、送信対象となるクラスがユーザ定義クラスであることを判断するときには、ステップ４に進んで、専用クラスローダ２０３にクラス名を通知することで、専用クラスローダ２０３から、そのユーザ定義クラスのオブジェクトコードのコピーを受け取り、メモリにローディングすることでクラスを定義し、続くステップ５で、そのオブジェクトコードを移動コードキャッシュ２０１ｃに保存する。
【００６２】
続いて、ステップ６で、仮想計算機から参照クラスの要求があるのか否かを判断して、要求があることを判断するときには、ステップ３に戻り、要求がないことを判断するときには、ステップ７に進んで、クラスロードを終了する。
【００６３】
一方、ステップ３で、送信対象となるクラスが標準ライブラリクラスであることを判断するときには、標準ライブラリクラスについては送信先に展開されているので、ステップ４及びステップ５の処理を行わずに、直ちにステップ６に進んで、仮想計算機から参照クラスの要求があるのか否かを判断して、要求があることを判断するときには、ステップ３に戻り、要求がないことを判断するときには、ステップ７に進んで、クラスロードを終了する。
【００６４】
この本発明のクラスローダ２００の処理に従って、例えば、クラスＡがクラスＢ，Ｃを参照し、クラスＢがクラスＤ，Ｅを参照し、クラスＣがクラスＦを参照するときにあって、クラスＢの送信要求があると、図１３に示すように、先ず最初に、クラスＢがローディングされ、それによりクラスＢの初期化メソッドに書き込まれるクラスＤ，Ｅのロード命令が実行されることで、続いて、クラスＤ，Ｅがローディングされることになるとともに、このローディングに合わせて、先ず最初に、クラスＢが移動コードキャッシュ２０１ｃに保存され、続いて、クラスＤ，Ｅが移動コードキャッシュ２０１ｃに保存されることになる。
【００６５】
このようにして、本発明のクラスローダ２００の処理に従って、プログラムの実行中に、あるクラスの送信要求があると、そのクラスのオブジェクトコードと、そのクラスが参照するクラスのオブジェクトコードとが移動コードキャッシュ２０１ｃに保存されることになる。
【００６６】
これを受けて、図示しない送信機構は、移動コードキャッシュ２０１ｃに保存されるオブジェクトコードを送信先の仮想計算機に送信することで、送信要求のあるクラスのオブジェクトコードと、そのクラスが参照するクラスのオブジェクトコードとを送信要求発行元の仮想計算機に送信できるようになる。
【００６７】
この送信処理にあたって、送信先の仮想計算機に展開されている標準ライブラリクラスについては、送信しないようにすることで、送信時間の短縮が図られることになる。
【００６８】
図示実施例に従って本発明を説明したが、本発明はこれに限定されるものではない。例えば、実施例に言うクラスとは、オブジェクト指向言語に言うクラスに限られるものではなくて、広い意味でのカプセル化されたものを言うものである。
【００６９】
【発明の効果】
以上説明したように、本発明によれば、あるクラスの実行前に、そのクラスが参照するクラスのオブジェクトコードについてもローディングできるようになるので、データ処理の効率を向上できるようになる。
【００７０】
そして、本発明によれば、あるクラスのオブジェクトコードを他の計算機に飛ばして、その計算機でそのクラスを実行するという移動コードの構成を採る場合に、そのクラスのオブジェクトコードを他の計算機に飛ばすときに、そのクラスから繋がる全てのクラスのオブジェクトコードも同時に飛ばすことができるようになるので、移動コードを受け取る計算機は、データ処理の実行に必要となる全てのオブジェクトコードをその実行前に入手できるようになるので、効率的なデータ処理を実行できるようになる。
【図面の簡単な説明】
【図１】本発明の原理構成図である。
【図２】本発明の原理構成図である。
【図３】コンパイラの処理説明図である。
【図４】コンパイラの出力するクラスの構造図である。
【図５】本発明のコンパイラの処理説明図である。
【図６】本発明のコンパイラの実行する処理フローの一実施例である。
【図７】クラスローダの処理説明図である。
【図８】本発明のクラスローダの構成図である。
【図９】本発明のクラスローダの構成図である。
【図１０】本発明のクラスローダの実行する処理フローの一実施例である。
【図１１】本発明のローディング処理の説明図である。
【図１２】本発明のクラスローダの実行する処理フローの一実施例である。
【図１３】本発明のプログラム送信処理の説明図である。
【符号の説明】
１      コンパイル装置
２      ローディング装置
３      プログラム送信装置
１０    選択手段
１１    特定手段
１２    展開手段
１３    ローディング手段
１４    保存手段
１５    送信手段
２０    ソースファイル
３０    オブジェクトファイル
４０    メモリ
５０    計算機
６０    他計算機
１００  コンパイラ
２００  クラスローダ
【図１】
0003774051.tif 000002
【図２】
0003774051.tif 000003
【図３】
0003774051.tif 000004
【図４】
0003774051.tif 000005
【図５】
0003774051.tif 000006
【図６】
0003774051.tif 000007
【図７】
0003774051.tif 000008
【図８】
0003774051.tif 000009
【図９】
0003774051.tif 000010
【図１０】
0003774051.tif 000011
【図１１】
0003774051.tif 000012
【図１２】
0003774051.tif 000013
【図１３】
0003774051.tif 000014