(57)【要約】【課題】ネイティブコードのコンパイル時間を短縮できるＪａｖａ（登録商標）プログラムでのバイトコードのコンパイル時間短縮システム及び方法を提供すること。【解決手段】Ｊａｖａ（登録商標）プログラムのバイトコードをローディングするクラスローダー部１００と、前記ローディングされたバイトコード及びバイトコードをコンパイルして生成されたネイティブコードをアクセス可能な状態に保つ第１のメモリ部２００と、前記ネイティブコードを格納する第２のメモリ部４００と、第２のメモリ部４００に格納されているネイティブコードを検索して第１のメモリ部２００にローディングするネイティブコード管理部３００と、前記ネイティブコードを実行させる実行部５００とを備える。【選択図】  図１
2004259252.tif 000002
【特許請求の範囲】
【請求項１】
Ｊａｖａ（登録商標）プログラムのソースコードをコンパイルして生成されたバイトコードをローディングするクラスローダー部と、
前記クラスローダー部でローディングされたバイトコード及びバイトコードをコンパイルして生成されたネイティブコードをアクセス可能な状態に保つ第１のメモリ部と、
前記第１のメモリ部にアクセス可能な状態にローディングされたネイティブコードを格納する第２のメモリ部と、
前記クラスローダー部の要請により、第２のメモリ部に格納されているネイティブコードを検索して第１のメモリ部にローディングするネイティブコード管理部と、
前記第１のメモリ部にアクセス可能な状態にローディングされたネイティブコードを実行する実行部とを備えることを特徴とするＪａｖａ（登録商標）プログラムでのバイトコードのコンパイル時間短縮システム。
【請求項２】
前記第１のメモリ部でそれ以上実行されないコードが占める空間を自動に回収するガベージコレクター部をさらに備えることを特徴とする請求項１に記載のＪａｖａ（登録商標）プログラムでのバイトコードのコンパイル時間短縮システム。
【請求項３】
前記ガベージコレクター部は、第１のメモリ部の空間が不足する場合、ネイティブコード管理部に、第１のメモリ部にローディングされたネイティブコードを第２のメモリ部に格納するように要請することを特徴とする請求項２に記載のＪａｖａ（登録商標）プログラムでのバイトコードのコンパイル時間短縮システム。
【請求項４】
前記ネイティブコード管理部は、前記第１のメモリ部にローディングされたネイティブコードを第２のメモリ部に格納することを特徴とする請求項１に記載のＪａｖａ（登録商標）プログラムでのバイトコードのコンパイル時間短縮システム。
【請求項５】
前記ネイティブコード管理部は、ＬＲＵ方式を用いて前記第２のメモリ部に格納されているネイティブコードを管理することを特徴とする請求項１または４に記載のＪａｖａ（登録商標）プログラムでのバイトコードのコンパイル時間短縮システム。
【請求項６】
前記実行部は、前記第1のメモリ部にアクセス可能な状態にローディングされたバイトコードを解析して実行させるバイトコードインタープリーターと、
前記バイトコードインタープリーターで解析されるバイトコードが頻繁に使用されるバイトコードであるかをチェックするランタイムプロファイラと、
前記ランタイムプロファイラでチェックした結果、頻繁に使用されるバイトコードである場合、ネイティブコードに変更するネイティブコードコンパイラとをさらに備えることを特徴とする請求項１に記載のＪａｖａ（登録商標）プログラムでのバイトコードのコンパイル時間短縮システム。
【請求項７】
クラスローダー部がコンパイルされたバイトコードをローディングするステップと、
前記ローディングされたバイトコードに該当するネイティブコードの検索をネイティブコード管理部に要請するステップと、
前記要請されたネイティブコードを第２のメモリ部から検索するステップと、
前記検索された該当ネイティブコードを第１のメモリ部に伝送するステップと、
前記伝送されたネイティブコードをネイティブコード実行部で実行するステップとを含むことを特徴とするＪａｖａ（登録商標）プログラムでのバイトコードのコンパイル時間短縮方法。
【請求項８】
前記第２のメモリ部に格納されているネイティブコードは、ネイティブコード管理部によりＬＲＵ方式で管理されることを特徴とする請求項７に記載のＪａｖａ（登録商標）プログラムでのバイトコードのコンパイル時間短縮方法。
【請求項９】
前記第２のメモリ部からのネイティブコードの検索結果、該当のネイティブコードが存在しない場合には、
クラスローダー部がローディングしたバイトコードを第１のメモリ部に伝送するステップと、
前記第１のメモリ部に伝送されたバイトコードをバイトコードインタープリーターで解析して実行するステップとをさらに含むことを特徴とする請求項７に記載のＪａｖａ（登録商標）プログラムでのバイトコードのコンパイル時間短縮方法。
【請求項１０】
第１のメモリ部に伝送されたバイトコードをバイトコードインタープリーターで解析して実行するステップは、ランタイムプロファイラが前記バイトコードインタープリーターで解析されているバイトコードが頻繁に使用されるバイトコードであるかをチェックするステップをさらに含むことを特徴とする請求項９に記載のＪａｖａ（登録商標）プログラムでのバイトコードのコンパイル時間短縮方法。
【請求項１１】
前記チェックの結果、頻繁に使用されるバイトコードである場合、
ネイティブコードコンパイラがバイトコードインタープリーターで解析されたバイトコードをコンパイルしてネイティブコードを生成するステップと、
前記生成されたネイティブコードを第１のメモリ部にローディングするステップと、
前記ローディングされたネイティブコードをネイティブコード管理部により第２のメモリ部に格納するステップとをさらに含むことを特徴とする請求項１０に記載のＪａｖａ（登録商標）プログラムでのバイトコードのコンパイル時間短縮方法。
【請求項１２】
前記第１のメモリ部にローディングされるネイティブコードは、Ｊａｖａ（登録商標）プログラムの実行終了時または第１のメモリ部の空間不足時に、第２のメモリ部に格納されることを特徴とする請求項９に記載のＪａｖａ（登録商標）プログラムでのバイトコードのコンパイル時間短縮方法。
【請求項１３】
前記第２のメモリ部に格納されているネイティブコードは、ネイティブコード管理部によりＬＲＵ方式で管理されることを特徴とする請求項９または１２に記載のＪａｖａ（登録商標）プログラムでのバイトコードのコンパイル時間短縮方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｊａｖａ（登録商標）プログラムでのバイトコードのコンパイル時間短縮システム及び方法に関し、より詳しくは、Ｊａｖａ（登録商標）プログラムの実行時に頻繁に使用されるバイトコードをコンパイルして生成されたネイティブコードを格納しておき、 後でＪａｖａ（登録商標）プログラムを実行するときに、該当のバイトコードに対するネイティブコードを読み込んで実行することにより、ネイティブコードのコンパイル時間を短縮できるＪａｖａ （登録商標）プログラムでのバイトコードのコンパイル時間短縮システム及び方法に関する。
【背景技術】
【０００２】
一般に、Ｊａｖａ（登録商標）プログラムのソースコードをコンパイルして生成されたバイトコード(ｂｙｔｅ ｃｏｄｅ)は、Ｊａｖａ（登録商標）仮想マシン(Ｊａｖａ（登録商標） Ｖｉｒｔｕａｌ Ｍａｃｈｉｎｅ : ＪＶＭ)によって実行され、前記Ｊａｖａ（登録商標）仮想マシンの 実行速度の向上のために、この頃、バイトコードをＣＰＵで直接実行可能な形式のネイティブコード(ｎａｔｉｖｅ  ｃｏｄｅ)に変換して実行する方法が広く使用されている。
【０００３】
この方法のうち、Ｄｙｎａｍｉｃ  Ａｄａｐｔｉｖｅ  Ｃｏｍｐｉlａｔｉｏｎ(以下、ＤＡＣと称する)は、バイトコードの解析(ｉｎｔｅｒｐｒｅｔａｔｉｏｎ)時に、前記バイトコードが頻繁に使用されるバイトコードである場合、それをネイティブコードにコンパイルして実行する。つまり、前記ＤＡＣ方法は、全体のプログラムをネイティブコードにコンパイルせず、 頻繁に使用されるバイトコードのみをネイティブコードにコンパイルすることである。
【０００４】
しかし、バイトコードの実行時に生成されるネイティブコードは、メモリ不足の際に、ガベージコレクター(ｇａｒｂａｇｅ  ｃｏｌｌｅｃｔｏｒ)により回収され、かつ、Ｊａｖａ（登録商標）プログラムの実行が終了すると、全て無くなり、次回の実行で再び使用することができないという問題点があった。
【０００５】
ところで、一度ネイティブコードに生成されたバイトコードのほとんどは、次回にも再びネイティブコードに生成される特性があることから、生成されたネイティブコードを無くしてしまうと、次回の実行でさらに同様なネイティブコードを生成しなければならないという問題がある。
【０００６】
従って、従来の方法によると、無線端末機のような低性能のＣＰＵや小容量のバッテリーを有するシステムでは、応答時間(Ｒｅｓｐｏｎｓｅ  ｔｉｍｅ)が増加し、バッテリーの消耗が大きくなるという問題点があった。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
本発明は、上記問題点に鑑みなされたものであり、Ｊａｖａ（登録商標）プログラムの実行時に頻繁に使用されるバイトコードをコンパイルして生成されたネイティブコードを格納しておき、後でＪａｖａ（登録商標）プログラムを実行するときに、該当のバイトコードに対するネイティブコードを読み込んで実行することにより、Ｊａｖａ（登録商標）プログラムでのバイトコードのコンパイル時間を短縮できるシステム及び方法を提供することを目的とする。
【０００８】
なお、本発明は、低性能のＣＰＵや小容量のメモリを有する機器におけるコンパイル時間を短縮して、Ｊａｖａ（登録商標）プログラムの実行時間を短縮させ、使用者に対する応答時間を減少し、バッテリーの消耗量を減らすことのできるＪａｖａ（登録商標）プログラムでのバイトコードのコンパイル時間短縮システム及び方法を提供することを他の目的とする。
【課題を解決するための手段】
【０００９】
上記の目的を達成するため、本発明に係るＪａｖａ（登録商標）プログラムでのバイトコードのコンパイル時間短縮システムにおいては、Ｊａｖａ （登録商標）プログラムソースコードをコンパイルして生成されたバイトコードをローディングするクラスローダー部と、前記クラスローダー部でローディングされたバイトコード及びバイトコードをコンパイルして生成されたネイティブコードをアクセス可能な状態に保つ第１のメモリ部と、前記第１のメモリ部にアクセス可能な状態にローディングされたネイティブコードを格納する第２のメモリ部と、前記クラスローダー部の要請により、第２のメモリ部に格納されているネイティブコードを検索して第１のメモリ部にローディングするネイティブコード管理部と、前記第１のメモリ部にアクセス可能な状態にローディングされたネイティブコードを実行する実行部とを備えていることを特徴とする。
【００１０】
なお、本発明に係るＪａｖａ（登録商標）プログラムでのバイトコードのコンパイル時間短縮システム方法においては、クラスローダー部がコンパイルされたバイトコードをローディングするステップと、前記ローディングされたバイトコードに該当するネイティブコードの検索をネイティブコード管理部に要請するステップと、前記要請されたネイティブコードを第２のメモリ部から検索するステップと、前記検索された該当ネイティブコードを第１のメモリ部に伝送するステップと、前記伝送されたネイティブコードをネイティブコード実行部で実行するステップとを含むことを特徴とする。
【発明の効果】
【００１１】
本発明によると、Ｊａｖａ（登録商標）プログラムの実行時に頻繁に使用されるバイトコードをコンパイルして生成されたネイティブコードを格納しておき、後でＪａｖａ（登録商標）プログラムを実行するときに、該当のバイトコードに対するネイティブコードを読み込んで実行することにより、バイトコードをコンパイルしてネイティブコードを生成する時間を省くことができる効果がある。
【００１２】
また、携帯電話のような低性能のＣＰＵや小容量のメモリを有する機器におけるコンパイル時間を減らすことにより、Ｊａｖａ（登録商標）プログラムの実行時間を短縮して、使用者に対する応答時間を減少させ、バッテリーの消耗量を減らすことができるという効果がある。
【発明を実施するための最良の形態】
【００１３】
以下、本発明の好ましい実施の形態を、添付図面に基づいて詳しく説明する。
図１は、本発明に係るＪａｖａ （登録商標）プログラムでのバイトコードのコンパイル時間短縮システムを示す概略ブロック図であり、図１を参照して、クラスローダー部(ｃｌａｓｓ  ｌｏａｄｅｒ)１００と、第１のメモリ部２００と、ネイティブコード管理部３００と、第２のメモリ部４００と、実行部５００と、ガベージコレクター部６００とから構成されている。
【００１４】
クラスローダー部１００は、Ｊａｖａ（登録商標）プログラムのソースコードをコンパイルして生成されたバイトコードをローディングする。ここで、前記ローディング過程とは、補助記憶装置に格納されているバイトコードをＪａｖａ（登録商標）仮想マシンに読み込むことをいう。
【００１５】
第１のメモリ部２００は、前記クラスローダー部１００でローディングされたバイトコード及びバイトコードをコンパイルして生成されたネイティブコードをアクセス可能な状態に保つ。即ち、前記クラスローダー部１００でローディングされたバイトコード及びバイトコードをコンパイルして生成されたネイティブコードを所定のメモリ領域に格納し、後述する実行部５００により前記格納されているネイティブコードをアクセスできるようになっている。
【００１６】
第２のメモリ部４００は、前記第１のメモリ部２００にアクセス可能な状態にローディングされたネイティブコードを格納する。
【００１７】
ネイティブコード管理部３００は、前記クラスローダー部１００の要請により第２のメモリ部４００に格納されているネイティブコードを検索して第１のメモリ部２００にローディングし、さらに、第１のメモリ部２００にローディングされたネイティブコードを第２のメモリ部４００に格納する。ここで、前記ネイティブコード管理部３００は、ＬＲＵ(Ｌｅａｓｔ Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ)方式を用いて第２のメモリ部４００に格納されているネイティブコードを管理する。前記ＬＲＵ方式とは、格納されているネイティブコードのうち、頻繁に使用されないネイティブコードをチェックして使用頻度の低い順に該当データを捨てることで、ここで、前記使用頻度の低いネイティブコードを捨てる基準は、例えば、メモリ容量または格納された時間によって決定することができる。
【００１８】
実行部５００は、前記第１のメモリ部２００にアクセス可能な状態にローディングされたネイティブコード及びバイトコードを実行しており、バイトコードインタープリーター(ｂｙｔｅ  ｃｏｄｅ  ｉｎｔｅｒｐｒｅｔｅｒ)５１０と、ランタイムプロファイラ(Ｒｕｎｔｉｍｅ  ｐｒｏｆｉｌｅｒ)５２０と、ネイティブコードコンパイラ(ｎａｔｉｖｅ  ｃｏｄｅ  ｃｏｍｐｉｌｅｒ)５３０と、ネイティブコード実行部(ｎａｔｉｖｅ  ｃｏｄｅ  ｅｘｅｃｕｔｉｏｎ)５４０とを備えている。
【００１９】
バイトコードインタープリーター５１０は、前記第１のメモリ部２００にアクセス可能な状態にローディングされたバイトコードを解析して実行させる。
【００２０】
ランタイムプロファイラ５２０は、前記バイトコードインタープリーター５１０で解析されるバイトコードが頻繁に使用されるバイトコードであるかをチェックし、前記チェックの結果をネイティブコードコンパイラ５３０に知らせる。
【００２１】
前記ネイティブコードコンパイラ５３０は、前記ランタイムプロファイラ５２０でのチェックの結果、前記バイトコードインタープリーター５１０で解析中のバイトコードが頻繁に使用されるバイトコードである場合、前記解析中のバイトコードをコンパイルしてネイティブコードを生成する。さらに、前記ネイティブコードコンパイラ５３０は、前記コンパイルされたネイティブコードを第１のメモリ部２００にローディングする。
【００２２】
ネイティブコード実行部５４０は、前記ネイティブコード管理部３００により第１のメモリ部２００にローディングされたネイティブコードを実行する。
【００２３】
ガベージコレクター部６００は、前記第１のメモリ部２００でそれ以上実行されないコードが占める空間を自動に回収しており、これにより、前記第１のメモリ部２００の空間を確保する。また、それ以上実行されないコードによる占有空間を回収した後にも、第１のメモリ部２００の空間が不足する場合には、ネイティブコード管理部３００にネイティブコードを第２のメモリ部４００に格納するように要請する。
【００２４】
図２は、本発明に係るＪａｖａ（登録商標）プログラムでのバイトコードのコンパイル時間短縮方法を概略的に示すフローチャートである。
先ず、クラスローダー部１００でＪａｖａ（登録商標）プログラムのソースコードをコンパイルして生成されたバイトコードをローディングし（Ｓ１００）、その後、ネイティブコード管理部３００に前記ローディングされたバイトコードに該当するネイティブコードの検索を要請すると（Ｓ１１０）、前記ネイティブコード管理部３００は、要請されたネイティブコードを第２のメモリ部４００から検索する（Ｓ１２０）。
【００２５】
前記第２のメモリ部４００から該当のネイティブコードが検索されると（Ｓ１３０で「はい」）、前記検索されたネイティブコードを第１のメモリ部２００に伝送し(Ｓ１３２)、ネイティブコード実行部５４０は、前記第１のメモリ部２００に伝送されたネイティブコードを実行させる(Ｓ１３４)。ここで、前記第２のメモリ部４００に格納されているネイティブコードは、Ｊａｖａ（登録商標）プログラムの実行時に頻繁に使用されるバイトコードをコンパイルして生成されたネイティブコードである。
【００２６】
本発明では、第２のメモリ部４００に格納されているネイティブコードを第１のメモリ部２００にローディングして実行すればいいことから、頻繁に使用されるバイトコードを毎回解析して実行することなく、バイトコードの解析過程を省くことができる。
【００２７】
一方、前記ネイティブコード管理部３００で第２のメモリ部４００を検索した結果、該当のバイトコードに対するネイティブコードが存在しない場合（Ｓ１３０で「いいえ」）、 前記クラスローダー部１００は、ローディングされたバイトコードを第１のメモリ部２００に伝送する(Ｓ１４０)。
【００２８】
前記第１のメモリ部２００にバイトコードがローディングされると、バイトコードインタープリーター５１０は、前記ローディングされたバイトコードが実行できるように解析する（Ｓ１５０）。
【００２９】
前記バイトコードインタープリーター５１０でのバイトコードの解析時に、 ランタイムプロファイラ５２０は、前記バイトコードインタープリーター５１０で解析されるバイトコードが頻繁に使用されるバイトコードであるかをチェックし（Ｓ１６０）、その結果をネイティブコードコンパイラ５３０に伝送する。
【００３０】
前記チェックの結果、頻繁に使用されるバイトコードである場合（Ｓ１７０で「はい」）、前記解析されたバイトコードは、ネイティブコードコンパイラ５３０に伝送されてコンパイルされることにより、ネイティブコードを生成する(Ｓ１７２)。ここで、前記ネイティブコードは、第１のメモリ部２００に伝送され、後でネイティブコード管理部３００により第２のメモリ部４００に格納される(Ｓ１７４)。ここで、前記第２のメモリ部４００に格納されているネイティブコードは、ネイティブコード管理部３００によりＬＲＵ方式で管理される。即ち、第２のメモリ部４００の格納領域が限定されているため、ＬＵＲ方式を適用して格納されているネイティブコードを管理している。
【００３１】
一方、前記チェックの結果、頻繁に使用されないバイトコードであるか、最初に使用されるバイトコードの場合（Ｓ１７０で「いいえ」）、前記バイトコードインタープリーター５１０で解析されて実行される(Ｓ１８０)。
【００３２】
なお、ガベージコレクター部６００は、前記第１のメモリ部２００でそれ以上実行されないコードが占める空間を自動に回収することにより、前記第１のメモリ部２００の空間を確保し、もし、それ以上実行されないコードを処理した後でも、第１のメモリ部２００の空間が不足する場合、ネイティブコード管理部３００に第１のメモリ部にローディングされているネイティブコードを第２のメモリ部４００に格納するように要請することにより、第１のメモリ部２００の空間を確保する。
【００３３】
以上のように、添付図面に基づいて本発明の実施の形態を説明してきたが、このような本発明の基本的な技術的思想を逸脱しない範囲内で、当業界の通常の知識を有する者にとっては、他の多くの変更が可能であろう。また、本発明は、添付の特許請求の範囲により解釈されるべきであることは言うまでもない。
【図面の簡単な説明】
【００３４】
【図１】本発明に係るＪａｖａ（登録商標）プログラムでのバイトコードのコンパイル時間短縮システムを示す概略ブロック図である。
【図２】本発明に係るＪａｖａ（登録商標）プログラムでのバイトコードのコンパイル時間短縮方法を概略的に示すフローチャートである。
【符号の説明】
【００３５】
１００      クラスローダー部
２００      第１のメモリ部
３００      ネイティブコード管理部
４００      第２のメモリ部
５００      実行部
６００      ガベージコレクター部
【図１】
2004259252.tif 000003
【図２】
2004259252.tif 000004