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

形式

    java [ options ] class [ argument ... ]
    java [ 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 関数に渡されます。

オプション

起動ツールには、現在の実行環境および将来のリリースでサポートされる標準オプションがあります。 また、仮想マシンの現在の実装では、非標準オプションのセットもサポートされます。これは、将来のリリースで変更される可能性があります。

標準オプション

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

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

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

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

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

-Dproperty=value
システムプロパティの値を設定します。

-d32
-d64
プログラムを 32 ビット環境で実行するか、64 ビット環境で実行するかを指定します。 Solaris 上では、これらのオプションは、それぞれ ILP32 および LP64 データモデルに対応します。 -d64 オプションを使用できるのは、64 ビットの Solaris システム上だけです。

現在のところ、Java HotSpot Server VM だけが 64 ビットの操作をサポートしており、-server オプションを使用する場合は、-d64 も一緒に使用する必要があります。 この仕様は、将来のリリースでは変更になる可能性があります。

-d32-d64 がどちらも指定されていない場合は、デフォルトとして、32 ビット環境で実行されます。 この仕様は、将来のリリースでは変更になる可能性があります。

-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 name> ]
-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 <Main Class>

-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 ファイルがすべてのユーザクラスのソースになり、ユーザクラスパスのほかの設定は無視されます。

Solaris 8 では、「java -jar」オプションで実行できる JAR ファイルは、実行権限のセットを保持しています。このため、「java -jar」を使用しないで実行することも可能です。

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

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

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

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

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

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

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

非標準オプション

-Xint
インタプリタ専用モードで動作します。 ネイティブコードへのコンパイルは無効になり、すべてのバイトコードがインタプリタによって実行されます。 Java HotSpot 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 リクエストを処理する前に、実行環境データのほか、JIN 機能に渡されるパラメータも検査します。 無効なデータに遭遇するということは、ネイティブコードに問題があることを示します。その場合、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 バイトです。 この値のおよその上限は、Solaris 7 および Solaris 8 SPARC プラットフォームでは 4000m からオーバーヘッドの量を差し引いたサイズ、Solaris 2.6 および x86 プラットフォームでは 2000m からオーバーヘッドの量を差し引いたサイズになります。 例:
       -Xmx83886080
       -Xmx81920k
       -Xmx80m
       

-Xssn
スレッドのスタックサイズを設定します。

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

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

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

-Xrs
Java 仮想マシン (JVM) によるオペレーティングシステムシグナルの使用を減らします。

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

Sun の JVM は、シグナルをキャッチすることによって、JVM の異常終了のためのシャットダウンフックを実装します。 JVM は、SIGHUP、SIGINT、および SIGTERM を使用して、シャットダウンフックの実行を開始します。

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

JVM を埋め込んでいるアプリケーションが SIGINT や SIGTERM などのシグナルを頻繁にトラップする必要があると、JVM そのもののシグナルハンドラの処理に支障が出る可能性があります。 -Xrs コマンド行オプションを使用すると、この問題に対処できます。 Sun の JVM に対して -Xrs を使用すると、SIGINT、SIGTERM、SIGHUP、および SIGQUIT に対するシグナルマスクは JVM によって変更されず、これらのシグナルに対するシグナルハンドラはインストールされません。

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

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

関連項目


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

Sun
Java ソフトウェア