(57)【要約】【課題】  フィールド試験の効率性を高めたＪａｖａクラスパスの最適化方式を得る。【解決手段】  内部にＪａｖａ仮想マシン１０１と、コンソール１０７とを有して構成される。Ｊａｖａ仮想マシン１０１は、クラスパスに含まれる全てのファイルまたはディレクトリについて、ファイルまたはディレクトリに含まれるクラスファイルのリストをカラムとして持ち、クラスパスに含まれる全てのクラスについてクラス名と、該クラスがロードされていることを示すロード済フラグを含むロードしたクラスの情報を記録して、診断情報を出力する。これにより、クラスパスの中で全く使用されないパスを検出して削除を実行したり、動作が不正になる可能性があることを利用者に通知できる。【選択図】  図１
2005293084.tif 000002
【特許請求の範囲】
【請求項１】
内部にＪａｖａ仮想マシンとコンソールとを有するＪａｖａクラスパスの最適化方式であって、
前記Ｊａｖａ仮想マシンは、
クラスパスに含まれる全てのファイルまたはディレクトリについて、前記ファイルまたは前記ディレクトリに含まれるクラスファイルのリストをカラムとして有し、
ロードしたクラスの情報を記録して診断情報を出力し、
前記クラスパスの中で全く使用されないパスを検出して削除を実行することを特徴とするＪａｖａクラスパスの最適化方式。
【請求項２】
前記ロードしたクラスの情報は、前記クラスパスに含まれる全ての前記クラスについて前記クラス名と前記クラスとがロードされていることを示すロード済フラグとを有し、
前記ロードしたクラス情報をカラムとして有し、前記診断情報を出力することを特徴とする請求項１記載のＪａｖａクラスパスの最適化方式。
【請求項３】
前記Ｊａｖａ仮想マシンは、
クラスファイル一覧生成手段と、
前記ファイルまたは前記ディレクトリの名前と前記ファイルまたは前記ディレクトリに含まれる前記クラスファイルのリストとをカラムとして持つクラスファイル一覧情報テーブルと、
前記ロードしたクラスの情報を記録する情報記録用クラスローダと、
前記ロード済フラグをカラムとして持つクラスロード情報履歴テーブルと、
前記診断情報を出力するクラスパス診断情報出力手段とを有することを特徴とする請求項２記載のＪａｖａクラスパスの最適化方式。
【請求項４】
前記クラスファイル一覧情報テーブルにリストを格納するクラスファイル一覧生成手段をさらに有し、
前記クラスファイル一覧生成手段は、
前記Ｊａｖａ仮想マシン起動時に指定された前記クラスパスの全要素の前記ファイルまたは前記ディレクトリを検索して要素を取り出し、
前記ファイルまたは前記ディレクトリ名と前記ファイルまたは前記ディレクトリに含まれる前記クラスファイルのリストとを前記クラスファイル一覧情報テーブルに追加し、
前記ファイル又は前記ディレクトリ名と前記ファイルまたは前記ディレクトリに含まれる前記クラスファイルのリストの前記クラスファイル一覧情報テーブルへの追加を前記クラスパスに要素が無くなるまで繰り返し、
前記クラスパスの中で全く使用されないパスを検索して前記使用されないパスの削除を実行することを特徴とする請求項３記載のＪａｖａクラスパスの最適化方式。
【請求項５】
前記クラスファイル一覧生成手段は、前記クラスファイル一覧情報テーブルに、/usr/java/lib/app.jar、App.class、AppMain.class、及びAppHelper.classからなるリストを格納することを特徴とする請求項４記載のＪａｖａクラスパスの最適化方式。
【請求項６】
前記クラスファイル一覧生成手段は、/usr/java/lib/classes、AppUtil.class、及びApp.classから成るリストを格納することを特徴とする請求項５記載のＪａｖａクラスパスの最適化方式。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｊａｖａ（登録商標）仮想マシン上で動作するプログラム処理に係るＪａｖａ（登録商標）クラスパスの最適化方式に関するものである。
【背景技術】
【０００２】
Ｊａｖａ（登録商標）言語では、Ｊａｖａ（登録商標）仮想マシン（java（登録商標） Virtual Machine/ＶＭ）と呼ばれるプログラムが、利用者の作成したクラスファイルを読み込んで、その内容を解釈して実行する。クラスファイルの検索では、クラスパスと呼ばれるクラスファイルを格納したディレクトリ、またはクラスファイルをアーカイブしたファイルが、特定の区切り文字で区切って並べた文字列に基き実行される。尚、上記クラスパスは、Ｊａｖａ（登録商標）仮想マシンの実行時に指定したclasspathオプション、または環境変数（CLASSPATH）の値で指定される。
【０００３】
特許文献１では、クラスファイルの使用履歴である履歴情報を検索して、クラスファイルの入手経路を判断する。また、特許文献２では、サービスの名称とサービスのプログラムファイルが保存されているパス情報の対を、クラスパス管理情報部に記憶して管理する。特許文献３では、Ｊａｖａ（登録商標）オブジェクトを管理するために必用な処理を、Ｊａｖａ（登録商標）バイト・コードを解析するポストプロセッサで行なっている。
【特許文献１】特開２００２−２４０３８号公報
【特許文献２】特開２００２−２８７９９０号公報
【特許文献３】特開平１１−１４９３７４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
本発明が解決しようとする問題点を以下に記す。
【０００５】
従来技術では、クラスパス中で重複した指定や使われないクラスパス指定を検知することができない。その理由は、Ｊａｖａ（登録商標）仮想マシンが、クラスパスに指定された各パス間の重複チェックや、実際にパスが使用されたことを検知していないためである。
【０００６】
クラスパスに同じ名前のクラスファイルを格納したファイルまたはディレクトリが複数存在する場合、例えば、あるアプリケーションのクラスファイルの旧バージョンと新バージョンの両方を含むファイルまたはディレクトリがクラスパスに指定されていた場合には、指定された順序によってアプリケーションの動作が変わってしまう。また使われないパスがクラスパスに含まれていた場合、クラスロード時のファイル検索がロードする必要のないファイルに対しても行われてしまう。このため、クラスロードの性能が低下するという問題点がある。
【０００７】
本発明は、Ｊａｖａ（登録商標）仮想マシンのクラスパスに含まれる同一クラスの重複指定や、実際にはロードされないファイルまたはディレクトリの指定を検出し、クラスパスに指定された順序によってアプリケーションの動作が変わってしまうという問題点や、クラスロードの性能が低下するという問題点を解決するための処理を可能とするシステムを提供することを目的としている。
【課題を解決するための手段】
【０００８】
請求項１記載の発明は、内部にＪａｖａ仮想マシンとコンソールとを有するＪａｖａクラスパスの最適化方式であって、前記Ｊａｖａ仮想マシンは、クラスパスに含まれる全てのファイルまたはディレクトリについて、前記ファイルまたは前記ディレクトリに含まれるクラスファイルのリストをカラムとして有し、ロードしたクラスの情報を記録して診断情報を出力し、前記クラスパスの中で全く使用されないパスを検出して削除を実行することを特徴とする。
【０００９】
請求項２記載の発明は、請求項１記載のＪａｖａクラスパスの最適化方式において、前記ロードしたクラスの情報は、前記クラスパスに含まれる全ての前記クラスについて前記クラス名と前記クラスとがロードされていることを示すロード済フラグとを有し、前記ロードしたクラス情報をカラムとして有し、前記診断情報を出力することを特徴とする。
【００１０】
請求項３記載の発明は、請求項２記載のＪａｖａクラスパスの最適化方式において、前記Ｊａｖａ仮想マシンは、クラスファイル一覧生成手段と、前記ファイルまたは前記ディレクトリの名前と前記ファイルまたは前記ディレクトリに含まれる前記クラスファイルのリストとをカラムとして持つクラスファイル一覧情報テーブルと、前記ロードしたクラスの情報を記録する情報記録用クラスローダと、前記ロード済フラグをカラムとして持つクラスロード情報履歴テーブルと、前記診断情報を出力するクラスパス診断情報出力手段とを有することを特徴とする。
【００１１】
請求項４記載の発明は、請求項３記載のＪａｖａクラスパスの最適化方式において、前記クラスファイル一覧情報テーブルにリストを格納するクラスファイル一覧生成手段をさらに有し、前記クラスファイル一覧生成手段は、前記Ｊａｖａ仮想マシン起動時に指定された前記クラスパスの全要素の前記ファイルまたは前記ディレクトリを検索して要素を取り出し、前記ファイルまたは前記ディレクトリ名と前記ファイルまたは前記ディレクトリに含まれる前記クラスファイルのリストとを前記クラスファイル一覧情報テーブルに追加し、前記ファイル又は前記ディレクトリ名と前記ファイルまたは前記ディレクトリに含まれる前記クラスファイルのリストの前記クラスファイル一覧情報テーブルへの追加を前記クラスパスに要素が無くなるまで繰り返し、前記クラスパスの中で全く使用されないパスを検索して前記使用されないパスの削除を実行することを特徴とする。
【００１２】
請求項５記載の発明は、請求項４記載のＪａｖａクラスパスの最適化方式において、前記クラスファイル一覧生成手段は、前記クラスファイル一覧情報テーブルに、/usr/java/lib/app.jar、App.class、AppMain.class、及びAppHelper.classからなるリストを格納することを特徴とする。
【００１３】
請求項６記載の発明は、請求項５記載のＪａｖａクラスパスの最適化方式において、前記クラスファイル一覧生成手段は、/usr/java/lib/classes、AppUtil.class、及びApp.classから成るリストを格納することを特徴とする。
【発明の効果】
【００１４】
本発明は、クラスパス中で重複しているものを検知することで、動作が不正になる可能性があることを利用者に通知できる。その理由は、実行時にクラスパスの重複を検査するためである。
【００１５】
また、本発明は、クラスパス中で使用されていないものを検知することで、Ｊａｖａ（登録商標）のクラスロードの性能向上させることができる。その理由は、実行時にクラスパスの使用の有無を検査することにより、以降の不要な動作を排除可能としたためである。
【発明を実施するための最良の形態】
【００１６】
添付図面を参照して本発明によるＪａｖａ（登録商標）クラスパスの最適化方式の実施形態を詳細に説明する。図１から図７に、本発明を適用したＪａｖａ（登録商標）クラスパスの最適化方式の一実施形態を示す。
【００１７】
次に、発明を実施するための最良の形態について図面を参照して詳細に説明する。
図１に示す本発明の第１の実施形態は、プログラム制御により動作するコンピュータ（中央処理装置；プロセッサ；データ処理装置）１００へ本発明を適用した例である。本コンピュータ１００は、コンピュータ内で動作するＪａｖａ（登録商標）仮想マシン１０１と、コンソール１０７とから構成される。
【００１８】
Ｊａｖａ（登録商標）仮想マシン１０１は、クラスファイル一覧生成手段１０２と、クラスパスに含まれる全てのファイルまたはディレクトリについて、ファイルまたはディレクトリの名前とそのファイルまたはディレクトリに含まれるクラスファイルのリストとをカラムとして持つクラスファイル一覧情報テーブル１０３と、ロードしたクラスの情報を記録する情報記録用クラスローダ１０４と、クラスパスに含まれる全てのクラスについてクラス名とそのクラスがロードされていることとを示すロード済フラグをカラムとして持つクラスロード情報履歴テーブル１０５と、診断情報を出力するクラスパス診断情報出力手段１０６とから構成される。
【００１９】
図２および図３は、上記構成のコンピュータ１００における処理動作例を示すフローチャートである。コンピュータ１００において、まず、図２に示すようにクラスファイル一覧生成手段１０２は、Ｊａｖａ（登録商標）仮想マシン起動時に指定されたクラスパスの全要素のファイルまたはディレクトリを検索して要素を取り出す（ステップＳ１）。そのファイルまたはディレクトリ名と、そのファイルまたはディレクトリに含まれるクラスファイルのリストを、クラスファイル一覧情報テーブル１０３に追加する（ステップＳ２）。上記のステップＳ２を、クラスパスに要素が無くなるまで繰り返す（ステップＳ３）。
【００２０】
次に、情報記録用クラスローダ１０４は、初期化の際にクラスファイル一覧情報テーブル１０３から全クラス名の一覧を得て、クラスロード履歴テーブル１０５に全てのクラス名を追加し、ロード済みフラグを全てfalseにセットする。その後、情報記録用クラスローダ１０４は、クラスロードが行われる度に、クラスロード履歴テーブル１０５のロード対象となるクラスのロード済フラグを、trueに変更する。
【００２１】
Ｊａｖａ（登録商標）仮想マシンの終了時に、クラスパス診断情報出力手段１０６は、クラスファイル一覧情報テーブル１０３から、同一のクラス名をメンバーとして持つファイルまたはディレクトリを検出する。本検出に基き、そのファイルまたはディレクトリに同一の名前のクラスが重複して存在していることを示すメッセージを、コンソール１０７に表示する。
【００２２】
その後、クラスファイル一覧情報テーブル１０３と、クラスロード履歴テーブル１０５に格納されている情報から、クラスパスの中で全く使用されなかったパスを検索する。図３に示すように、検索の方式は、クラスファイル一覧情報テーブル１０３から各行を読み込む（ステップＳ３０）。クラスファイル一覧情報テーブル１０３の終端まで読み込んでいる場合は（ステップＳ３０／ＹＥＳ）、処理は終了する。一方、クラスファイル一覧情報テーブル１０３の終端まで読み込んでいない場合は（ステップＳ３０／ＮＯ）、クラスファイル一覧情報テーブル１０３から１行を読み込み、一つのファイルまたはディレクトリ名とそこに含まれる全クラス名のリストを得る（ステップＳ３１）。クラスファイル一覧情報テーブル１０３から得た全クラス名リストにクラス名の要素が存在するときは（ステップＳ３２／ＹＥＳ）、全クラス名のリストから一つを取り出し（ステップＳ３３）、得られたクラス名がクラスロード履歴テーブル１０５にロード済みであると記録されているかを判断する（ステップＳ３４）。得られたクラス名がクラスロード履歴テーブル１０５にロード済みであると記録されていたときは（ステップＳ３４／ＹＥＳ）、ステップＳ３０の処理を繰り返す。一方、得られたクラス名がクラスロード履歴テーブル１０５にローズ済みであると記録されていなかったときは（ステップＳ３４／ＮＯ）、ステップＳ３２の判断を再び行う。なお、ステップＳ３２において全クラス名リストにクラス名の要素が存在しなかったときは（ステップＳ３２／ＮＯ）、実際に使用されなかったファイル又はディレクトリ名をコンソールに出力し（ステップＳ３５）、ステップＳ３０の判断を繰り返す。以上により、ファイルまたはディレクトリに含まれるクラス名全てについて、クラスロード情報履歴テーブル１０５からロード済フラグがfalseであるかを検査する。全てfalseである場合は、そのファイルまたはディレクトリが使用されていないことを示すメッセージと伴に、クラス名をコンソール１０７に表示する（ステップＳ３５）。
【実施例１】
【００２３】
次に、より具体的な実施例を用いて、本発明を実施するための最良の形態での動作例を説明する。
図４に示すように、クラスパスに/usr/java（登録商標）/lib/app.jarというファイルと/usr/java（登録商標）/lib/classesというディレクトリが指定されていて、app.jarにはApp.class、AppMain.class、及びAppHelper.class、classesにはAppUtil.classとApp.classというクラスファイルが含まれている場合にApp.class、AppMain、AppHelper、及びAppUtil.classをロードするＪａｖａ（登録商標）アプリケーションの動作について説明する。
【００２４】
クラスファイル一覧生成手段１０２は、クラスファイル一覧情報テーブル１０３に、/usr/java（登録商標）/lib/app.jar、App.class、AppMain.class、及びAppHelper.classからなるリストを格納する。さらに、/usr/java（登録商標）/lib/classes、AppUtil.class、及びApp.classから成るリストを格納する。
【００２５】
情報記録用クラスローダ１０４は、初期化処理の中で、クラスロード履歴テーブル１０５にApp.class、AppMain.class、AppHelper.class、及びAppUtil.classを追加し、ロード済フラグをfalseに設定する。アプリケーションが実行される時、情報記録用クラスローダ１０４は、App.class、AppMain.class、及びAppHelper.classをロードする。その時、情報記録用クラスローダ１０４は、クラスロード履歴テーブル１０５に格納されているApp.class、AppMain.class、及びAppHelper.classのロード済みフラグを、trueに設定する。
【００２６】
Ｊａｖａ（登録商標）仮想マシンの終了時に、クラスパス診断情報出力手段１０６は、クラスファイル一覧情報テーブル１０３からApp.classが/usr/java（登録商標）/lib/app.jarと/usr/java（登録商標）/lib/classesの両方に含まれていることを検出し、/usr/java（登録商標）/lib/app.jarと/usr/java（登録商標）/lib/classesの両方にApp.classが含まれていることを示すメッセージを、コンソール１０７に表示する。
【００２７】
次にクラスパス診断情報出力手段１０６は、/usr/Ｊａｖａ（登録商標）/lib/app.jarに含まれているApp.class、AppMain.class、及びAppHelper.classについて、クラスロード履歴テーブル１０５でロード済フラグが全てfalseに設定されているかどうかを検査し、全てtrueに設定されているため、何もせずに次の処理に移る。
【００２８】
次に、/usr/java（登録商標）/lib/classesに含まれているAppUtil.class及びApp.classについて、クラスロード履歴テーブル１０５でロード済フラグが全てfalseにされているかを検査する。本検査の結果、全てtrueに設定されているため、何もせずに処理を終了する。
【００２９】
利用者は、コンソール１０７に出力された情報を参照し、/usr/java（登録商標）/lib/app.jarと/usr/java（登録商標）/lib/classesの両者に含まれるApp.classが同一のものであるか検査し、可能であればどちらかのパスから削除を行う。このことにより、不正な動作が行われる可能性を除去することができる。
【実施例２】
【００３０】
図５に示すように、クラスパスに/usr/java（登録商標）/lib/app.jarというファイルと/usr/java（登録商標）/lib/classesというディレクトリが指定されていて、app.jarにはApp.class、AppMain.class、及びAppHelper.class、classesにはAppUtil.class及びAppTest.classというクラスファイルが含まれている場合に、App.class、AppMain、及びAppHelperをロードするＪａｖａ（登録商標）アプリケーションの動作例について説明する。
【００３１】
クラスファイル一覧生成手段１０２は、クラスファイル一覧情報テーブル１０３に/usr/java（登録商標）/lib/app.jar、App.class、AppMain.class、及びAppHelper.classから成るリストを格納する。さらに、/usr/java（登録商標）/lib/classes、AppUtil.class、及びAppTest.classから成るリストを格納する。
【００３２】
情報記録用クラスローダ１０４は、初期化処理の中で、クラスロード履歴テーブルの構成例１を表した図６に示すように、クラスロード履歴テーブル１０５にApp.class、AppMain.class、AppHelper.class、AppUtil.class、AppTest.classを追加し、それらのロード済フラグをfalseに設定する。アプリケーションが実行される時、情報記録用クラスローダ１０４は、App.class、AppMain.class、AppHelper.classをロードする。その時、情報記録用クラスローダ１０４は、クラスロード履歴テーブル１０５に格納されているApp.class、AppMain.class、AppHelper.classのロード済みフラグを、trueに設定する。この時、クラスロード履歴テーブル１０５は、クラスロード履歴テーブルの構成例２を表した図７のような状態になる。
【００３３】
Ｊａｖａ（登録商標）仮想マシンの終了時に、クラスパス診断情報出力手段１０６は、クラスファイル一覧情報テーブル１０３から/usr/java（登録商標）/lib/app.jarと/usr/java（登録商標）/lib/classesに、同じ名前のクラスが存在するかを検索し、存在しないため何もせずに次の処理に進む。次に、/usr/java（登録商標）/lib/app.jarに含まれているApp.class、AppMain.class、AppHelper.classについて、クラスロード履歴テーブル１０５でロード済フラグが全てfalseに設定されているかどうかを検査し、全てtrueに設定されているため、何もせずに次の処理に移る。
【００３４】
次に、/usr/java（登録商標）/lib/classesに含まれているAppUtil.class、AppTest.classについて、クラスロード履歴テーブル１０５でロード済フラグが全てfalseにされているかを検査する。本検査の結果、全てfalseに設定されているため、/usr/java（登録商標）/lib/classesは、使用されていないクラスパスであることを示すメッセージを、コンソール１０７に表示する。
【００３５】
利用者は、コンソール１０７に出力された情報を参照し、/usr/java（登録商標）/lib/classesに含まれるクラスが不要であれば、クラスパスから削除することで、クラスロードの性能を向上させることができる。従って、本発明におけるＪａｖａ（登録商標）クラスパスの最適化方式の有効性は非常に高い。
【図面の簡単な説明】
【００３６】
【図１】Ｊａｖａ（登録商標）クラスパスの最適化方式へ適用される通信システムの図である。
【図２】本発明を適用したコンピュータの処理手順例を示すフローチャートである。
【図３】本発明を適用したコンピュータの処理手順例を示すフローチャートである。
【図４】Ｊａｖａ（登録商標）アプリケーションの動作例を示す図である。
【図５】Ｊａｖａ（登録商標）アプリケーションの動作例を示す図である。
【図６】クラスロード履歴テーブルの構成例１を示している。
【図７】クラスロード履歴テーブルの構成例２を示している。
【符号の説明】
【００３７】
１００    コンピュータ（中央処理装置；プロセッサ；データ処理装置）
１０１    Ｊａｖａ（登録商標）仮想マシン
１０２    クラスファイル一覧生成手段
１０３    クラスファイル一覧情報テーブル
１０４    情報記録用クラスローダ
１０５    クラスロード情報履歴テーブル
１０６    クラスパス診断情報出力手段
１０７    コンソール
【図１】
2005293084.tif 000003
【図２】
2005293084.tif 000004
【図３】
2005293084.tif 000005
【図４】
2005293084.tif 000006
【図５】
2005293084.tif 000007
【図６】
2005293084.tif 000008
【図７】
2005293084.tif 000009