java - Java アプリケーション起動ツール

形式

    java [ options ] class [ argument ... ]
    java [ options ] -jar file.jar [ argument ... ]
    javaw [ options ] class [ argument ... ]
    javaw [ options ] -jar file.jar [ argument ... ]
options
コマンド行オプション
class
呼び出されるクラスの名前
file.jar
呼び出される JAR ファイルの名前。 必ず -jar とともに使用する
argument
main 関数に渡される引数

説明

java ツールは、Java アプリケーションを起動します。 java ツールは、Java Runtime Environment を起動したあと、指定されたクラスをロードし、そのクラスの main メソッドを呼び出すことにより、Java アプリケーションを起動します。 メソッドの宣言は、次のようになっていなければなりません。
    public static void main(String args[])
このメソッドは、public および static として宣言する必要があります。また、値を返してはなりません。さらに、String 配列をパラメータとして指定できなければなりません。 デフォルトでは、コマンド行オプション以外の最初の引数が、呼び出されるクラスの名前になります。 この名前には、完全指定のクラス名を使用する必要があります。 -jar オプションを指定した場合、コマンド行オプション以外の最初の引数が、アプリケーションのクラスファイルとリソースファイルを含む JAR アーカイブの名前になります。この場合、マニフェストの Main-Class ヘッダで指定されたクラスが起動クラスになります。

Java Runtime は、起動クラスと使用されるその他のクラスを、ブートストラップクラスパス、インストール済みの拡張機能、およびユーザクラスパスという 3 種類の位置から検索します。

クラス名または JAR ファイル名のあとにある、コマンド行オプション以外の引数は、main 関数に渡されます。

javaw コマンドは、コンソールウィンドウがない以外は、java コマンドと同じです。 javaw は、コマンドプロンプトウィンドウを表示する必要がないときに使用します。 ただし、javaw 起動ツールでは、なんらかの理由で起動に失敗すると、エラー情報を示すダイアログボックスが表示されます。

オプション

起動ツールには、現在の実行環境および将来のリリースでサポートされる標準オプションがあります。 また、デフォルトの Java HotSpot VM では、非標準オプションが提供されます。 非標準オプションは、将来のリリースで変更される可能性があります。

標準オプション

-client
Java HotSpot Client VM を選択します。 これはデフォルトの設定です。

-server
Java HotSpot Server VM を選択します。

-classpath classpath
-cp classpath
クラスファイルを検索するディレクトリ、JAR アーカイブ、および ZIP アーカイブのリストを指定します。 クラスパスの各エントリは、セミコロン (;) で区切ります。 -classpath または -cp を指定すると、このオプションの値によって CLASSPATH 環境変数の設定がオーバーライドされます。

-classpath-cp も使用されず、CLASSPATH も設定されていない場合、ユーザクラスパスは現在のディレクトリ (.) になります。

クラスパスの詳細は、「クラスパスの設定」を参照してください。

-Dproperty=value
システムプロパティの値を設定します。 value が、スペースを含む文字列である場合は、文字列を次のように二重引用符で囲む必要があります。
        java -Dfoo="some string" SomeClass
        
-enableassertions[:<package name>"..." | :<class name> ]
-ea[:<package name>"..." | :<class name> ]
アサーションを有効にします。 アサーションは、デフォルトでは無効になっています。

引数なしの enableassertions または -ea を指定すると、アサーションが有効になります。 「...」で終わる引数を 1 つ指定すると、指定したパッケージとそのサブパッケージ内でアサーションが有効になります。 引数として「...」だけを指定すると、現在の作業ディレクトリにある名前のないパッケージ内でアサーションが有効になります。 「...」で終わらない引数を 1 つ指定すると、指定したクラス内でアサーションが有効になります。

単一コマンド行にこれらのスイッチのインスタンスを複数指定した場合は、指定したスイッチが順番に処理されてからクラスがロードされます。 したがって、たとえば、パッケージ com.wombat.fruitbat (サブパッケージを含む) 内でのみアサーションを有効にしてプログラムを実行するには、次のようなコマンドを使用します。

java -ea:com.wombat.fruitbat... <Main Class>

-enableassertions および -ea スイッチは、すべてのクラスローダおよびシステムクラスに適用されます。システムクラスにはクラスローダはありません。 ただし、この規則には例外が 1 つあります。 それは、引数なしでこのスイッチを指定すると、その指定はシステムクラスには適用されない、ということです。 この例外を利用すれば、システムクラスを除くすべてのクラスでアサーションを簡単に有効にすることができます。 すべてのシステムクラスでアサーションを有効にするために、別のスイッチが用意されています。このあとの -enablesystemassertions を参照してください。

-disableassertions[:<package name>"..." | :<class ; ]
-da[:<package name>"..." | :<class name> ]
アサーションを無効にします。 これはデフォルトの設定です。

引数なしの disableassertions または -da を指定すると、アサーションが無効になります。 「...」で終わる引数を 1 つ指定すると、指定したパッケージとそのサブパッケージ内でアサーションが無効になります。 引数として「...」だけを指定すると、現在の作業ディレクトリにある名前のないパッケージ内でアサーションが無効になります。 「...」で終わらない引数を 1 つ指定すると、指定したクラス内でアサーションが無効になります。

パッケージ com.wombat.fruitbat 内ではアサーションを有効にし、クラス com.wombat.fruitbat.Brickbat 内ではアサーションを無効にしたうえで、プログラムを実行するには、次のようなコマンドを使用します。

java -ea:com.wombat.fruitbat... -da:com.wombat.fruitbat.Brickbat <メインクラス>

-disableassertions および -da スイッチは、すべてのクラスローダおよびシステムクラスに適用されます。システムクラスにはクラスローダはありません。 ただし、この規則には例外が 1 つあります。 それは、引数なしでこのスイッチを指定すると、その指定はシステムクラスには適用されない、ということです。 この例外を利用すれば、システムクラスを除くすべてのクラスでアサーションを簡単に有効にすることができます。 すべてのシステムクラスでアサーションを無効にするために、別のスイッチが用意されています。このあとの -disablesystemassertions を参照してください。

-enablesystemassertions
-esa
すべてのシステムクラス内でアサーションを有効にします。つまり、システムクラスについてアサーションのデフォルトステータスを true に設定します。

-disablesystemassertions
-dsa
すべてのシステムクラス内でアサーションを無効にします。

-jar
JAR ファイルにカプセル化されたプログラムを実行します。 最初の引数は、起動クラスの名前ではなく、JAR ファイルの名前にします。 このオプションが機能するには、JAR ファイルのマニフェストに「Main-Class: classnameという形式の行を指定する必要があります。 classname には、アプリケーションの開始位置として機能する public static void main(String[] args) メソッドを含むクラスを指定します。 JAR ファイルとそのマニフェストについては、jar ツールのリファレンスページと、Java チュートリアルの「Trail: Jar Files」を参照してください。

このオプションを使用すると、指定した JAR ファイルがすべてのユーザクラスのソースになり、ユーザクラスパスのほかの設定は無視されます。

-verbose
-verbose:class
クラスがロードされるたびにクラスに関する情報を表示します。

-verbose:gc
ガベージコレクションイベントが発生するたびに報告します。

-verbose:jni
ネイティブメソッドの使用およびその他の Java Native Interface (JNI) アクティビティに関する情報を報告します。

-version
バージョン情報を表示して終了します。

-showversion
バージョン情報を表示して続行します。

-?
-help
使用法を表示して終了します。

-X
非標準オプションに関する情報を表示して終了します。

非標準オプション

-Xmixed
混合専用モードで動作します (デフォルト)。 頻繁に使用されるプログラムセグメント (ホットスポット) はネイティブコードにコンパイルされ、残りのバイトコードはバイトコードインタプリタによって実行されます。 このモードでは、Java HotSpot Client VM が提供するパフォーマンス上の利点がすべて実現されます。

-Xint
インタプリタ専用モードで動作します。 ネイティブコードへのコンパイルは無効になり、すべてのバイトコードがインタプリタによって実行されます。 Java HotSpot Client VM 対応のコンパイラが提供するパフォーマンス上の利点は、このモードでは実現されません。

-Xdebug
デバッガが有効な状態で起動します。 詳細と例については、「jdb の説明」を参照してください。

-Xbootclasspath:bootclasspath
ブートクラスファイルを検索するディレクトリ、JAR アーカイブ、および ZIP アーカイブをセミコロンで区切ったリストで指定します。 指定したパスに存在するブートクラスファイルが、Java 2 SDK に含まれるブートクラスファイルの代わりに使用されます。 注: rt.jar 内のクラスをオーバーライドする目的でこのオプションを使用するアプリケーションは、システムに配置しないでください。Java 2 Runtime Environment バイナリコードライセンス違反になります。

-Xbootclasspath/a:path
ディレクトリ、JAR アーカイブ、および ZIP アーカイブのパスをセミコロンで区切って指定します。パスはデフォルトのブートストラップクラスパスの後ろに追加されます。

-Xbootclasspath/p:path
ディレクトリ、JAR アーカイブ、および ZIP アーカイブのパスをセミコロンで区切って指定します。パスはデフォルトのブートストラップクラスパスの前に追加されます。 注: rt.jar 内のクラスをオーバーライドする目的でこのオプションを使用するアプリケーションは、システムに配置しないでください。Java 2 Runtime Environment バイナリコードライセンス違反になります。

-Xcheck:jni
Java Native Interface (JNI) 機能に対して追加チェックを行います。 特に、Java 仮想マシンは、JNI 要求を処理する前に、JNI 機能に渡されるパラメータと実行時環境データを検証します。 無効なデータが検出された場合、ネイティブコード内に問題があります。この場合、Java 仮想マシンは致命的なエラーとともに終了します。 このオプションを使用するとパフォーマンスが低減されます。

-Xfuture
クラスとファイルの形式を厳密にチェックします。 下位互換性を保つため、Java 2 SDK の仮想マシンが実行するデフォルトの形式チェックは、JDK ソフトウェアのバージョン 1.1.x が実行するチェックと同程度の厳密さになっています。 -Xfuture フラグを指定すると、クラスファイル形式の仕様への準拠を強化するためのより厳密なチェックが有効になります。 Java アプリケーション起動ツールの将来のリリースでは、より厳密なチェックがデフォルトになるため、新しいコードを開発するときにはこのフラグを使用することをお勧めします。

-Xnoclassgc
クラスのガベージコレクションを無効にします。

-Xincgc
インクリメンタルガベージコレクタを有効にします。 インクリメンタルガベージコレクタは、デフォルトでは無効になっています。有効にすると、プログラムの実行中にガベージコレクションによる一時停止が発生しなくなります。 ただし、ガベージコレクションの全体的なパフォーマンスが 10% ほど低下することがあります。

-Xloggc:file
-verbose:gc と同様にガベージコレクションイベントが発生するたびに報告しますが、そのデータを file に記録します。 -verbose:gc を指定したときに報告される情報のほかに、報告される各イベントの先頭に、最初のガベージコレクションイベントからの経過時間 (秒単位) が付け加えられます。

ネットワークの応答時間によって JVM の実行速度が低下するのを避けるため、このファイルの格納先は、常にローカルファイルシステムにしてください。 ファイルシステムが満杯になると、ファイルは切り捨てられ、そのファイルにデータが引き続き記録されます。 このオプションと -verbose:gc の両方がコマンド行に指定されている場合は、このオプションが優先されます。

-Xmsn
メモリ割り当てプールの初期サイズをバイト数で指定します。 指定する値は、1M バイトより大きい 1024 の倍数にしなければなりません。 キロバイトを指定するには、文字 k または K を付けます。メガバイトを指定するには、文字 m または M を付けます。 既定値は 2M バイトです。 次に例を示します。
       -Xms6291456
       -Xms6144k
       -Xms6m
       

-Xmxn
メモリ割り当てプールの最大サイズをバイト数で指定します。 指定する値は、2M バイトより大きい 1024 の倍数にしなければなりません。 キロバイトを指定するには、文字 k または K を付けます。メガバイトを指定するには、文字 m または M を付けます。 既定値は 64M バイトです。 次に例を示します。
       -Xmx83886080
       -Xmx81920k
       -Xmx80m
       

-Xprof
実行中のプログラムのプロファイルを生成し、プロファイリングデータを標準出力に出力します。 このオプションは、プログラム開発用のユーティリティとして提供されています。本番稼動システムでの使用を目的としたものではありません。

-Xrunhprof[:help][:<suboption>=<value>,...]
CPU、ヒープ、またはモニターのプロファイリングを有効にします。 通常、このオプションのあとには、コンマで区切られた「<suboption>=<value>」のペアが続きます。 サブオプションとそのデフォルト値のリストを取得するには、コマンド java -Xrunhprof:help を実行します。

-Xrunjdwp
アプリケーションの実行時に、jdb があとでデバッグのために接続できるような方法でアプリケーションを起動します。 詳細と例については、「jdb の説明」を参照してください。

-Xrs
Java 仮想マシン (JVM) によるオペレーティングシステムシグナルの使用を減らします。 このオプションは、J2SE 1.3.1 以降で利用可能になりました。

J2SE 1.3.0 では、Java アプリケーションを秩序正しくシャットダウンするためのシャットダウンフック機能が追加されました。 この機能により、JVM が突然終了した場合でも、シャットダウン時にユーザクリーンアップコード (データベース接続のクローズなど) を実行できるようになりました。

JVM は、コンソール制御イベントを監視して JVM の異常終了を検知することにより、シャットダウンのフックを実現します。 具体的には、JVM は、シャットダウンフック処理を開始するコンソール制御ハンドラを登録し、CTRL_C_EVENT、CTRL_CLOSE_EVENT、CTRL_LOGOFF_EVENT、および CTRL_SHUTDOWN_EVENT に対して TRUE を返します。

JVM は、デバッグの目的でスレッドスタックをダンプするという、1.2 より前からある機能を実現するためにも、同様の機構を使用します。 Sun の JVM は、スレッドダンプを実行するために CTRL_BREAK_EVENT を使用します。

JVM がサービス (Web サーバ用のサーブレットエンジンなど) として実行されている場合、JVM は、CTRL_LOGOFF_EVENT を受け取ってもシャットダウン処理を開始してはなりません。そのとき、オペレーティングシステムは、実際にはプロセスを終了させないからです。 この例のような障害の可能性を避けるため、J2SE 1.3.1 以降では -Xrs コマンド行オプションが追加されました。Sun の JVM で -Xrs オプションを使用すると、JVM は、コンソール制御ハンドラをインストールしません。この場合、JVM は、CTRL_C_EVENT、CTRL_CLOSE_EVENT、CTRL_LOGOFF_EVENT、および CTRL_SHUTDOWN_EVENT の監視と処理を行いません。

-Xrs を指定した場合、次の 2 つの影響があります。

  • Ctrl + Break キーによるスレッドダンプを利用できない
  • シャットダウンフック処理の実行は、JVM が終了しようとしている時点で System.exit() を呼び出すなどして、ユーザコード側で行う必要がある

関連項目


Copyright © 2002 Sun Microsystems, Inc. All Rights Reserved.

Sun
Java ソフトウェア