(57)【要約】【課題】Javaプログラムの処理速度を向上させるシステム及びその方法を提供する。【解決手段】クラスローダが所定の保存領域に保存されたクラスファイルを所定サイズの物理的な単位で割ってメモリに伝送（またはローディング）する段階と、前記クラスローダがローディングした物理的な単位のクラスファイルをロードタイムコンパイラがリンキング及びコンパイルする段階と、前記ロードタイムコンパイラがリンキング及びコンパイルする段階で前記受信された物理的な単位のクラスファイルに論理的な単位の情報が含まれているか否かを判断する段階及び前記含まれた論理的な単位の情報をリンキングし、前記情報がJavaメソードである場合、前記メソードをコンパイルする段階を含むJavaプログラムの処理速度を向上させる方法。【選択図】図５
2005202963.tif 000002
【特許請求の範囲】
【請求項１】
Javaプログラムのクラスファイルをローディングするクラスローダと、
前記クラスローダがローディング中のクラスファイルをコンパイルするロードタイムコンパイラと、を含むことを特徴とするJavaプログラムの処理速度を向上させるシステム。
【請求項２】
前記クラスファイルは所定サイズの物理的な単位で伝送されることを特徴とする請求項１に記載のJavaプログラムの処理速度を向上させるシステム。
【請求項３】
前記ロードタイムコンパイラは、前記クラスファイルに次に処理する論理的な単位の情報が含まれているか否かを判断し、前記論理的な単位の情報の存在時にコンパイルを行うことを特徴とする請求項１に記載のJavaプログラムの処理速度を向上させるシステム。
【請求項４】
前記論理的な単位の情報はクラスヘッダ、コンスタントプール、インターフェース、フィールド及びメソードのうち何れか１つであることを特徴とする請求項３に記載のJavaプログラムの処理速度を向上させるシステム。
【請求項５】
前記ロードタイムコンパイラは、前記論理的な単位の情報をコンパイルする過程でクラスファイルが正しく構成されたか否かを検証する過程を行うことを特徴とする請求項１に記載のJavaプログラムの処理速度を向上させるシステム。
【請求項６】
前記ロードタイムコンパイラは、前記論理的な単位の情報をコンパイルする過程でクラス変数の初期値を設定する準備過程を行うことを特徴とする請求項１に記載のJavaプログラムの処理速度を向上させるシステム。
【請求項７】
前記ロードタイムコンパイラは、前記論理的な単位の情報をコンパイルする過程で他のクラスのメソードやフィールドに対する参照値がある場合、これらを分解する過程を行うことを特徴とする請求項１に記載のJavaプログラムの処理速度を向上させるシステム。
【請求項８】
前記クラスローダ及びロードタイムコンパイラは、各々別途のスレッドを用いて同時に動作を行うことを特徴とする請求項１に記載のJavaプログラムの処理速度を向上させるシステム。
【請求項９】
所定の保存領域に保存されたクラスファイルをクラスローダが所定サイズの物理的な単位でメモリに伝送する段階と、
前記受信された物理的な単位のクラスファイルに論理的な単位の情報が含まれているか否かを判断する段階と、
前記ロードタイムコンパイラが前記クラスファイルに含まれた論理的な単位の情報をコンパイルする段階と、を含むことを特徴とするJavaプログラムの処理速度を向上させる方法。
【請求項１０】
前記所定の保存領域はネットワークで連結された遠隔システム、ディスク、外部連結端子に連結された外部保存装置または情報機器のうち何れか１つであることを特徴とする請求項９に記載のJavaプログラムの処理速度を向上させる方法。
【請求項１１】
前記論理的な単位の情報はクラスヘッダ、コンスタントプール、インターフェース、フィールド及びメソードのうち何れか１つであることを特徴とする請求項９に記載のJavaプログラムの処理速度を向上させる方法。
【請求項１２】
前記クラスローダ及びロードタイムコンパイラは、各々別途のスレッドを用いて同時に動作を行うことを特徴とする請求項９に記載のJavaプログラムの処理速度を向上させる方法。
【請求項１３】
前記受信されたクラスファイルに論理的な単位の情報が含まれているかを判断する段階は、前記受信されたクラスファイルに論理的な単位の情報を含んでいない場合、次の物理的な単位が伝送されることを待機する段階を含むことを特徴とする請求項９に記載のJavaプログラムの処理速度を向上させる方法。
【請求項１４】
前記論理的な単位の情報をコンパイルする過程でクラスファイルが正しく構成されたか否かを検証する段階を含むことを特徴とする請求項９に記載のJavaプログラムの処理速度を向上させるシステム。
【請求項１５】
前記論理的な単位の情報をコンパイルする過程でクラス変数の初期値を設定する準備段階を含むことを特徴とする請求項９に記載のJavaプログラムの処理速度を向上させるシステム。
【請求項１６】
前記論理的な単位の情報をコンパイルする過程で他のクラスのメソードやフィールドに対する参照値がある場合にこれらを分解する段階を含むことを特徴とする請求項９に記載のJavaプログラムの処理速度を向上させるシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はJava（登録商標）プログラムの処理速度を向上させるシステム及びその方法に係り、さらに詳細にはJava仮想マシンでクラスファイルのローディング過程及びクラスファイルのコンパイル過程を同時に行えるJavaプログラムの処理速度を向上させるシステム及びその方法に関する。
【背景技術】
【０００２】
図１は、従来のJava仮想マシンが搭載された情報機器の代表的な構成例を示す図面であって、ここで情報機器は携帯用電話機器、ＰＤＡ、デジタルＴＶ、セットトップボックス、ＰＣ等と理解されうる。
【０００３】
前記情報機器はＣＰＵ、ネットワークインターフェース、ハードディスクやフラッシュメモリなどの永久保存装置、主メモリ、入出力装置、ディスプレー装置、及びその他の装置のための外部装置コネクタを含む。
【０００４】
Java仮想マシンはこのような機器の主メモリに常駐することになり、Javaアプリケーションを構成するJavaクラスをメモリにローディングして行う。ここで、永久保存装置はハードディスクやフラッシュメモリと理解され、入力装置はＰＣの場合にキーボードやマウスなどの入力装置、及びデジタルＴＶやセットトップボックスの場合にリモコンレシーバーと理解されうる。出力／ディスプレー装置はＰＣの場合にグラフィックアダプタになり、デジタルＴＶの場合にはディスプレー装置が内蔵された形になり、外装形態にも連結されうる。外部装置コネクタは通用されているＵＳＢ、ＩＥＥＥ  １３９４、ＲＦ、Ｉｎｆｒａｒｅｄ、Ｂｌｕｅｔｏｏｔｈなどの連結装置と理解されうる。このように仮想マシンが駆動されうる環境は全ての情報機器を包括しており、特定の装置に限定されるものではない。
【０００５】
また、Javaクラスはネットワークインターフェースを介して外部から伝送されても良く、永久保存装置から伝送されるか、あるいは外部装置コネクタで連結された外部装置から伝送されても良い。ネットワークインターフェースは特定のネットワーク連結を通じて外部に存在するサーバーに接続及びJavaクラスの伝送を担当する。ここで、ネットワーク連結の形態はＬＡＮ、Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ（ＷＡＮ）などの有線パケット通信網や、無線ＬＡＮ、ＣＤＭＡ／ＧＳＭ／ＧＰＲＳ等の無線／移動通信網、デジタルＴＶ空中波／Ｃａｂｌｅ／Ｓａｔｅｌｌｉｔｅなどの有／無線放送網など特定形態に限定されず、多様な形になりうる。
【０００６】
図２は、従来のJava仮想マシンの構成を示す図面であって、Java仮想マシンはクラスローダ１０、インタプリタ２０、コンパイラ３０及びランタイムシステム４０を基本的に含む。
【０００７】
クラスローダ１０はネットワークまたはファイルシステムからJavaクラスファイルを読込んでクラスファイルに含まれた内部情報によって適切にメモリ上に配置して内部状態を初期化する。
【０００８】
インタプリタ２０はJavaクラスファイルの実行コードを実行するための構成要素であって、Javaバイトコード形態の命令語を認識して命令を行う役割をする。すなわち、クラスローダ１０が読込んだJavaクラスファイルに含まれたメソードのバイトコードを認識して行うものである。
【０００９】
コンパイラ３０はJavaクラスファイルの実行中にJavaバイトコードを情報機器に搭載されたＣＰＵの機械語に変換するものであって、一般にＪＩＴコンパイラ（Ｊｕｓｔ−Ｉｎ−Ｔｉｍｅ  ｃｏｍｐｉｌｅｒ）が広く使われる。すなわち、クラスローダ１０が読込んだJavaクラスファイルに含まれたメソードのバイトコードをＣＰＵの機械語に変換するものである。
【００１０】
ランタイムシステム４０は前記Java仮想マシンを構成する要素（クラスローダ、インタプリタ、コンパイラ）を結合及び運用するものである。
【００１１】
図３は、従来のJavaクラスファイルの構成を示す図面である。
【００１２】
Javaクラスは一般的にクラスファイルという特定ファイルフォーマットで伝送／保存され、前記クラスファイルフォーマットにはクラスに関連された多様な属性を含む。ここで、クラスファイルフォーマットは基本属性を表示するクラスヘッダ、全ての定数を管理するコンスタントプール、クラスファイルのインターフェースに対する情報を含むインターフェース部分とフィールドに対する情報を含むフィールド部分及びクラスファイルに定義された各メソード別に実行コードがバイトコードの形に保存されたメソード部分で構成される。
【００１３】
図４は、従来のJava仮想マシンでJavaクラスファイルを伝送して行う過程を示すフローチャートであって、Javaクラスファイルの伝送過程は大きくクラスローディング段階、初期化段階及び実行段階に区分されうる。
【００１４】
まず、クラスローディング段階ではクラスファイルをネットワークやディスクからメモリに伝送する段階とリンキング段階よりなり、前記リンキング段階は再びクラスに対する検証段階、クラス準備段階、そして分解段階よりなる。
【００１５】
検証段階はクラスファイルの構造と内容とが正しく作成されたか否かを判別する段階であって、クラスメソードに含まれたバイトコードが何れも有効であるか否かを検査する。準備段階はクラスに定義された定数や変数のデフォルト値を指定する段階であり、最後に分解段階はコンスタントプールに明示されたシンボルを実行中に必要なリソースの物理的な位置情報に置換する段階である。
【００１６】
次いで、クラスローディング段階が終われば、メモリにロードされたクラスファイルを初期化してから実行段階を実行するが、実行段階ではクラスに含まれた実行コードの形態によって実行モードが決定される。
【００１７】
ここで、メソードがバイトコード形式よりなっていれば、バイトコードをＣＰＵの機械語に変換するか否かを判別し、もし機械語に変換しない場合にインタプリタが直接バイトコードを１つずつ読込みつつ行う。バイトコードを機械語に変換する場合にはコンパイラがバイトコードを読込んでＣＰＵの機械語に変換した後で直接変換された機械語が実行される。
【００１８】
しかし、従来の技術ではクラスファイルの伝送とリンキングとが順次に行われ、クラスファイルが完全に伝送されるまでにリンキング段階を行わない。このような特徴によって、クラスファイルを伝送した後でリンキングし、初期化して行うまでに長時間の遅延が生じる。すなわち、クラスファイルの伝送がネットワークを介した伝送である場合にはネットワークの帯域幅やクラスファイルのサイズによって時間遅延が生じ、リンキング段階でもクラスファイルを検証する段階でＣＰＵを多く消耗することになる。
【００１９】
また、実行時間にメソードをコンパイルする過程で時間がさらにかかるが、特に高度のコンパイル技術を使用すればするほどさらに長時間がかかる。結果的にアプリケーションの実行時間はこのような一連の過程によって全体的な性能が低下する問題点がある。
【００２０】
特許文献１（バイトコード実行プロセス、方法及びデータ処理システムとそれを具現したコンピュータプログラム製品）は、クラスローダを通じて実行のためのバイトコードをローディングし、バイトコードのコンパイル如何を判定してからＪＩＴコンパイラに伝送し、バイトコードがＪＩＴコンパイルされねばならないという判定でない場合、インタプリタに伝送するバイトコード実行プロセスを開示しているが、バイトコードをロードする過程である伝送段階とリンキング段階、そしてコンパイル段階を同時に併行する方法については全く言及していない。
【特許文献１】韓国公開特許２０００−００５７０１０号公報
【発明の開示】
【発明が解決しようとする課題】
【００２１】
本発明は前記問題点を解決するために案出されたものであって、本発明の目的は、Java仮想マシンでクラスファイルのローディング過程及びクラスファイルのコンパイル過程を同時に行うことによって、アプリケーションの全体実行性能を向上させうるJavaプログラムの処理速度を向上させるシステム及び方法を提供することである。
【課題を解決するための手段】
【００２２】
前記目的を達成するために本発明のJavaプログラムの処理速度を向上させるシステムは、Javaプログラムのクラスファイルをローディングするクラスローダと、前記クラスローダがローディング中のクラスファイルをコンパイルするロードタイムコンパイラと、を含むことを特徴とする。
【００２３】
また、本発明のJavaプログラムの処理速度を向上させる方法は、クラスローダが所定の保存領域に保存されたクラスファイルを所定サイズの物理的な単位で割ってメモリに伝送（またはローディング）する段階と、前記クラスローダがローディングした物理的な単位のクラスファイルをロードタイムコンパイラがリンキング及びコンパイルする段階と、前記ロードタイムコンパイラがリンキング及びコンパイルする段階で前記受信された物理的な単位のクラスファイルに論理的な単位の情報が含まれているか否かを判断する段階及び前記含まれた論理的な単位の情報をリンキングし、前記情報がJavaメソードである場合に前記メソードをコンパイルする段階を含むことを特徴とする。
【発明の効果】
【００２４】
本発明によれば、Java仮想マシンでクラスファイルのローディング過程及びクラスファイルのコンパイル過程を同時に行い、クラスファイルローディング時間内にコンパイル過程を実行させることによって、アプリケーションの全体実行性能を向上させうる効果がある。
【００２５】
また、クラスファイルがローディングされた以後にコンパイル段階による時間遅延を最小化すると同時に、クラスファイルのメソード実行を直接ＣＰＵの機械語に変換された形に実行させることによって、クラスファイルの伝送及びローディング後のコンパイル時間とクラスの実行時間とを共に短縮でき、これは従来のコンパイルを行う方式よりクラスファイルの大きさを最小化できてクラスファイルの伝送時間も減らせる効果がある。
【００２６】
また、本発明はクラスファイルの標準フォーマットをそのまま活用できて仮想マシンの長所である移植性を最大限活用できる。
【発明を実施するための最良の形態】
【００２７】
以下、本発明の望ましい実施例を添付した図面を参照して詳細に説明する。
【００２８】
図５は、本発明のJavaプログラムの処理速度を向上させるシステムを概略的に示す図面であって、クラスローダ１１０、ロードタイムコンパイラ１２０及びランタイムシステム１３０を含んで構成される。
【００２９】
クラスローダ１１０はJavaプログラムのクラスファイルをメモリにローディングするものであって、すなわち所定の保存領域から伝送される所定サイズの物理的な単位でクラスファイルをローディングする。また、クラスローダ１１０は物理的な単位のクラスファイルが現在まで伝送された伝送量を表示しておくことによって、前記ロードタイムコンパイラ１２０がクラスファイルのリンキング及びコンパイルを行うに当たって参照可能にする。ここで、所定の保存領域はネットワークで連結された遠隔システムまたはディスクとして理解でき、前記クラスファイルは所定サイズの単位（例えば、ネットワークである場合にパケット、ディスクである場合にはブロックなど）で分割されて伝送される。
【００３０】
ロードタイムコンパイラ１２０はクラスローダ１１０がローディングしたクラスファイルをリンキング及びコンパイルするものであって、すなわち、前記クラスローダ１１０にローディングしている物理的な単位のクラスファイルに論理的な単位の情報が含まれているか否かを判断し、前記論理的な単位の情報をリンキングし、前記情報がメソードである場合に前記メソードに保存されたバイトコードに対するコンパイルを行う。ここで、ロードタイムコンパイラ１２０は前記判断を前記クラスローダ１１０が表示した現在まで伝送されたクラスファイルの伝送量を参照してクラスファイルのリンキング及びコンパイルを行う。すなわち、ロードタイムコンパイラ１２０はクラスローダ１１０がネットワークやディスクなどの保存領域から伝送されたクラスファイルをメモリにロードした後、現在まで伝送されたクラスファイルの伝送量を表示すれば、前記表示されたクラスファイルの伝送量を確認した後、伝送された分量だけに含まれた論理的な単位の情報をリンキング及びコンパイルすることによって、クラスファイルの伝送完了前にあらかじめクラスファイルのコンパイルを行う。一方、前記論理的な単位の情報は、クラスファイルを構成するクラスヘッダ、コンスタントプール、インターフェース、フィールド及びメソード領域として理解されうる。
【００３１】
また、ロードタイムコンパイラ１２０はリンキング及びコンパイル実行段階でリンキング過程で必要な検証、準備及び分解過程を共に行う。
【００３２】
ランタイムシステム１３０はクラスファイルを行うために必要な資源を管理する。
【００３３】
一方、クラスローダ１１０及びロードタイムコンパイラ１２０は各々別途のスレッドで同時に動作を行う。
【００３４】
一方、従来の仮想マシンにあったインタプリタ２０とコンパイラ３０は本発明での具現方法によってオプション事項として含めても、あるいは除いても良い。すなわち、基本的に全てのクラスファイルをロード時間にコンパイルを行う方式によるとすれば、インタプリタ２０及びコンパイラ３０は不要であるが、具現方法によって特定のクラスファイルや前記クラスファイルの特定メソードはコンパイルを行わない方法を使用する場合には、インタプリタ２０及びコンパイラ３０が実行時間にバイトコードを直接行うか、あるいは再びコンパイルを行うべきである。
【００３５】
また、本発明の実施例はJava仮想マシン１００を例として説明しているが、本発明はＭｉｃｒｏｓｏｆｔのＣｏｍｍｏｎ  Ｌａｎｇｕａｇｅ  Ｒｕｎｔｉｍｅ（ＣＬＲ）やＳｍａｌｌｔａｌｋの仮想マシンのように同等な機能を提供する他の仮想マシンにも適用しうる。
【００３６】
図６は、本発明のJavaプログラムの処理速度を向上させる方法を概略的に示すフローチャートであって、まずクラスローダ１１０が所定の保存領域で所定サイズの物理的な単位でクラスファイルをメモリに伝送（またはローディング）し始める（Ｓ１００）。ここで、クラスローダ１１０はクラスファイルの現在まで伝送された物理的な単位の伝送量を表示しておくことによって、前記ロードタイムコンパイラ１２０がクラスファイルのコンパイルを行うのに参照できるようにする。
【００３７】
次いで、ロードタイムコンパイラ１２０はクラスローダ１１０が表示した現在まで伝送されたクラスファイルの伝送量を確認した後、メモリにローディングされた物理的な単位のクラスファイルに論理的な単位の情報が含まれているか否かを判断する（Ｓ１１０）。ここで、論理的な単位の情報はクラスファイルを構成するクラスヘッダ、コンスタントプール、インターフェース、フィールド及びメソード領域として理解されうる。
【００３８】
次いで、前記判断の結果、現在まで伝送されたクラスファイルに次に処理しなければならない論理的な単位の情報が全て含まれた場合に該当論理的な単位の情報をリンキング及びコンパイルし（Ｓ１２０）、判断の結果、クラスファイルに次に処理しなければならない論理的な単位の情報が含まれていない場合、ロードタイムコンパイラ１２０はクラスローダ１１０が次の物理的な単位をメモリにローディングするまでスレッドを中止させることによって待機する（Ｓ１３０）。
【００３９】
次いで、クラスローダ１１０は次の物理的な単位がメモリにローディングされれば、クラスファイルの伝送量の増加如何を表示し、中止されたロードタイムコンパイラ１２０スレッドを再開させる（Ｓ１４０）。ここで、前記段階Ｓ１１０、段階Ｓ１２０、段階Ｓ１３０及び段階Ｓ１４０過程はロードタイムコンパイラ１２０がクラスファイルに含まれた論理的な単位の情報を全て処理するまで実行し続ける（Ｓ１５０）。
【００４０】
一方、クラスローダ１１０及びロードタイムコンパイラ１２０は各々別途のスレッドで同時に動作を行う。
【００４１】
以下、図７でクラスファイルに論理的な単位の情報が含まれているか否かを判断する過程及びクラスファイルをリンキング及びコンパイルする過程を詳細に説明する。
【００４２】
図７は、本発明に係るロードタイムコンパイラのリンキング及びコンパイル動作過程を示すフローチャートであって、前記図６でクラスファイルに論理的な単位の情報が含まれているか否かを判断する過程及びクラスファイルをリンキング及びコンパイルする過程を詳細に説明する。
【００４３】
まず、ロードタイムコンパイラ１２０はクラスローダ１１０がメモリにロード中のクラスファイルに次に処理せねばならない論理的な単位であるクラスヘッダ情報が含まれているか否かを判断する（Ｓ２００）。
【００４４】
判断の結果、クラスファイルにクラスヘッダ領域の情報が全て含まれていれば、該当クラスヘッダのリンキング（すなわち、検証）過程を行い（Ｓ２１０）、判断の結果、クラスファイルにクラスヘッダ領域の情報が全て含まれていないと、クラスローダ１１０が次の物理的な単位をローディングするまで待機する（Ｓ２１１）。
【００４５】
次いで、クラスローダ１１０がローディングしたクラスファイルに次に処理しなければならないコンスタントプール領域の情報、インターフェース領域の情報、フィールド領域の情報及びメソード領域の情報が全て含まれているか否かを判断する過程と、それによるリンキング過程及び次のクラスファイルがローディングされる過程（Ｓ２２０ないしＳ２９１）は前記段階Ｓ２００ないし段階Ｓ２１１過程と同一に実行される。但し、メソード領域情報を処理する過程ではメソードに保存されたバイトコードをコンパイルする過程をさらに行う。
【００４６】
以上、本発明について詳細に記述したが、本発明が属する技術分野で当業者ならば、特許請求の範囲に定義された本発明の精神及び範囲を外れずに本発明を多様に変形または変更して実施可能なのは自明であり、従って本発明の実施例に係る単純な変更は本発明の技術を外れられない。
【産業上の利用可能性】
【００４７】
本発明によるJavaプログラムの処理速度を向上させるシステム及びその方法は、Java仮想マシンが搭載された情報機器、例えば携帯用電話機器、ＰＤＡ、デジタルＴＶ、セットトップボックス、ＰＣ等に適用されうる。
【図面の簡単な説明】
【００４８】
【図１】従来のJava仮想マシンが搭載された情報機器の代表的な構成例を示す図面である。
【図２】従来のJava仮想マシンの構成を示す図面である。
【図３】従来のJavaクラスファイルの構成を示す図面である。
【図４】従来のJava仮想マシンでJavaクラスファイルを伝送して行う過程を示すフローチャートである。
【図５】本発明のJavaプログラムの処理速度を向上させるシステムを概略的に示す図面である。
【図６】本発明のJavaプログラムの処理速度を向上させる方法を概略的に示すフローチャートである。
【図７】本発明に係るロードタイムコンパイラのコンパイル動作過程を示すフローチャートである。
【符号の説明】
【００４９】
１００        Java仮想マシン
１１０        クラスローダ
１２０        ロードタイムコンパイラ
１３０        ランタイムシステム
【図１】
2005202963.tif 000003
【図２】
2005202963.tif 000004
【図３】
2005202963.tif 000005
【図４】
2005202963.tif 000006
【図５】
2005202963.tif 000007
【図６】
2005202963.tif 000008
【図７】
2005202963.tif 000009