java(1)

名前
java - Java アプリケーション起動プログラム

形式
java [ options ] class [ argument ... ]

java [ options ] -jar file.jar
[ argument ... ]

options
    コマンド行オプション。

class
    呼び出されるクラスの名前。

file.jar
    呼び出されるファイルの名前。必ず -jar と同時に使用される。

argument
    main 関数に渡される引数。

機能説明

java ツールは、Java アプリケーションを起動します。 java ツールは、Java Runtime Environment を起動したあと、指定されたクラスをロードし、このクラスの main メソッドを呼び出して Java アプリケーションを起動します。

このメソッドは public および static で宣言され、値を返さず、パラメータとして String 配列を使用できなければなりません。 メソッド宣言は次のようにする必要があります。

   public static void main(String args[])

デフォルトでは、オプションではない最初の引数が、呼び出すクラスの名前に なります。この名前には、完全指定のクラス名を使用する必要があります。 -jar オプションを指定した場合、オプションではない最初の引数は、アプリケーションの クラスファイルとリソースファイルを含む JAR アーカイブの名前になります。 この場合、Main-Class マニフェストヘッダで指定されたクラスがスタート アップクラスになります。

Java Runtime は、ブートストラップクラスパス、インストール型拡張機能、 およびユーザクラスパスの 3 つの場所から、起動クラスとその他の 使用するクラスを探します。

クラス名または JAR ファイル名のあとにあるオプションではない引数は、 main 関数に渡されます。

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

  標準オプション

-client
    Java HotSpot Client VM を選択します。 64 ビット対応 JDK は現時点では、このオプションを無視し、代わりに Java Hotspot Server VM を使用します。 デフォルトの VM の選択については、
    http://java.sun.com/javase/6/docs/technotes/guides/vm/server-class.html の 「Server-Class Machine Detection」を参照してください。

-server
    Java HotSpot Server VM を選択します。 64 ビット対応 JDK 上では、サポートされるのは Java Hotspot Server VM だけであるため、-server オプションが暗黙的に選択されます。 デフォルトの VM の選択については、
    http://java.sun.com/javase/6/docs/technotes/guides/vm/server-class.html の 「Server-Class Machine Detection」を参照してください。

-agentlib:libname[=options]
    ネイティブのエージェントライブラリ libname を読み込みします。次に例を示します。

    -agentlib:hprof
    -agentlib:jdwp=help
    -agentlib:hprof=help

詳細は、
http://java.sun.com/javase/6/docs/platform/jvmti/jvmti.html#starting の 「JVMTI Agent Command Line Options」を参照してください。

-agentpath:pathname[=options]
    ネイティブのエージェントライブラリをフルパス名を使用して読み込みします。 詳細は、
    http://java.sun.com/javase/6/docs/platform/jvmti/jvmti.html#starting の 「JVMTI Agent Command Line Options」を参照してください。

-classpath  classpath

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

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

便宜上、* のベース名を含むクラスパス要素は、ディレクトリ内の拡張子 .jar または .JAR を持つすべてのファイルのリストを指定するのと同じとみなされます (Java プログラムはこの 2 つの呼び出しを区別できない)。
たとえば、ディレクトリ foo に a.jar と b.JAR が含まれている場合、クラスパス要素 foo/* は A.jar:b.JAR に展開されます。ただし、JAR ファイルの順番は指定されません。このリストには、隠しファイルも含め、指定されたディレクトリ内のすべての JAR ファイルが含まれます。 * だけから成るクラスパスエントリは、カレントディレクトリ内のすべての JAR ファイルのリストに展開されます。 CLASSPATH 環境変数も、定義時には同様に展開されます。クラスパスのワイルドカード展開は必ず、Java 仮想マシンの起動前に実行されます。したがって、 System.getenv (" CLASSPATH ") 呼び出しのように環境に問い合わせを行わない限り、Java プログラムが展開されていないワイルドカードを認識することはありません。

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

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

-d32

-d64
    それぞれ 32 ビット環境、64 ビット環境でプログラムを実行することを要求します。要求された環境がインストールされていないかサポートされていない場合は、エラーが報告されます。

現時点では、64 ビット操作をサポートしているのは Java HotSpot Server VM だけであり、 -server オプションでは、 -d64 が暗黙的に使用されます。 したがって、-d64 使用時には「-client」オプションは無視されます。 この仕様は将来変更される場合があります。

-d32 と -d64 のどちらも指定しなかった場合、 64 ビット専用システムを除いて、 デフォルトでは 32 ビット環境で実行されます。 この仕様は将来変更される場合があります。

-enableassertions[:<package name>"..." | :<class name> ]

-ea[:<package name>"..." | :<class name> ]

表明を有効にします。デフォルトで、表明は無効です。

引数を指定しなくても、 enableassertions または -ea で表明が有効になります。 「...」で終わる引数を 1 つ指定すると、 スイッチにより、指定したパッケージおよびすべての サブパッケージ内の表明が有効になります。 「...」という引数を指定すると、スイッチにより、 現在の作業用ディレクトリ内にある名前のないパッケージ内の 表明が有効になります。 「...」で終わらない引数を 1 つ指定すると、 スイッチにより、指定したクラス内の表明が有効になります。

1 行のコマンドに、これらのスイッチの複数のインスタンスが 含まれている場合、クラスを読み込む前に、正しく処理されます。 たとえば、パッケージ com.wombat.fruitbat
 (およびすべてのサブパッケージ) 内だけの有効な表明を 含んだプログラムを実行する場合、次のコマンドを使用できます。

java-ea:com.wombat.fruitbat...<MainClass>

-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 ファイルのマニフェストを扱う方法については、Jar ツールのリファレンスページと、 Java Tutorial
    (http://java.sun.com/docs/books/tutorial/jar) の Jar トレールを参照してください。

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

java -jar オプションで実行できる JAR ファイルでは、 java -jar なしでも実行できるように、実行権限を設定できます。
http://java.sun.com/javase/6/docs/technotes/guides/jar/index.html の 「Java Archive (JAR) Filesを参照してください。

-javaagent:jarpath[=options]
    Java プログラミング言語エージェントを読み込みます。 http://java.sun.com/javase/6/docs/api/java/lang/instrument/package-summary.html の 「java.lang.instrument」を参照してください。

-verbose

-verbose: class
    クラスが読み込まれるたびにクラスに関する情報を表示します。

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

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

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

-version:release
    コマンド行に指定されたクラスまたは JAR ファイルが、release で指定されたバージョンを必要としていることを示します。起動された java コマンドのバージョンがこの指定内容を満たさず、かつ適切な実装がシステム上で見つかった場合には、その適切な実装が使用されます。

release では、特定のバージョンを指定できるだけでなく、バージョン文字列と呼ばれるバージョンのリストを指定することもできます。バージョン文字列は、いくつかのバージョン範囲を空白で区切った形式の順序付きリストです。バージョン範囲は、バージョン ID、バージョン ID の後にアスタリスク (*) を付加したもの、バージョン ID の後にプラス記号 (+) を付加したもの、2 つのバージョン範囲をアンパサンド (&) で結合したもの、のいずれかになります。アスタリスクはプレフィックス一致を、プラス記号は指定されたバージョン以上を、アンパサンドは 2 つのバージョン範囲の論理積を、それぞれ意味します。次に例を示します。

-version:"1.5.0_04 1.5*&1.5.1_02+"

上記の意味は、バージョン 1.5.0_04、または 1.5.1_02 以上で 1.5 をバージョン ID プレフィックスとして持つバージョン、のいずれかをクラスまたは JAR ファイルが必要とする、ということです。バージョン文字列の厳密な構文や定義については、「Java Network Launching Protocol & API Specification (JSR-56)」の「Appendix A」を参照してください。

JAR ファイルの場合は通常、バージョン要件をコマンド行に指定するよりも、JAR ファイルのマニフェスト内に指定することが推奨されています。

このオプションの使用に関する重要なポリシー情報については、後述の「注」節を参照してください。

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

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

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

  非標準オプション

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

-Xbatch
    バックグラウンドコンパイルを無効にします。 通常、VM ではメソッドをバックグラウンドタスクとしてコンパイルします。 このとき、バックグラウンドコンパイルが終了するまでは、 インタプリタモードでメソッドが実行されます。 -Xbatch フラグを使用すると、バックグラウンドコンパイルが 無効になるため、すべてのメソッドのコンパイルは完了するまで フォアグラウンドのタスクとして処理されます。

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

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

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

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

-Xfuture
    厳密なクラスファイル形式の検査を実行します。下位互換性を維持 するため、JDK の Virtual Machine で実行されるデフォルトの 形式検査は、JDK ソフトウェアの 1.1.x バージョンで実行される検査よりも 厳密ではありません。 -Xfuture フラグを使用すると、クラスファイル形式を より仕様に準拠したものにするための、さらに厳密なクラスファイル形式検査が 有効になります。開発者が新しいコードを開発する際には、このフラグの 使用を推奨します。Java アプリケーション起動ツールの 将来のリリースでは、より厳密な検査がデフォルトになるからです。

-Xnoclassgc
    クラスのガベージコレクションを無効にします。 このオプションを使用すると、ロード済みクラスからメモリが回復されることがなくなるため、全体的なメモリ使用量が増大します。この場合、アプリケーションによっては OutOfMemoryError がスローされる可能性があります。

-Xincgc
    インクリメンタルガベージコレクタを有効にします。 インクリメンタルガベージコレクタは、デフォルトでは 無効に設定されていますが、有効にするとプログラムの実行中の ガベージコレクションによる停止を防ぎます。 インクリメンタルガベージコレクタは、場合によってはプログラムと同時に 実行されます。同時に実行されている間は、プログラムで利用可能な プロセッサ能力が減少します。

-Xloggc:file
    -verbose:gc と同様、各ガベージコレクションイベントで レポートを作成し、このデータを file に記録します。 -verbose:gc により入手できる情報に加えて、レポートされるイベントには 最初のガベージコレクションイベントからの経過時間 (秒数) が付けられます。

    ネットワークの遅延による JVM の停止を避けるために、このファイルの 記憶域として常にローカルファイルシステムを使用します。 このファイルは、フルファイルシステムおよびロギングが不完全なファイル に追加される場合、切り詰められることがあります。 コマンド行で -verbose:gc といっしょに指定された場合、このオプションが優先されます。

-Xmsn
    メモリ割り当てプールの初期サイズを指定します。 指定する値は、1M バイトよりも大きな 1024 の倍数でなければなりません。 文字 k または K を付けると K バイト、文字 m または M を付けると M バイトを表します。 デフォルト値は、実行時にシステムの設定に基づいて選択されます。詳細については、「HotSpot Ergonomics」を参照してください
    例:

    -Xms6291456
    -Xms6144k
    -Xms6m

-Xmxn
    メモリ割り当てプールの最大サイズをバイト単位で指定します。 指定する値は、2M バイトよりも大きな 1024 の倍数でなければなりません。 文字 k または K を付けると K バイト、文字 m または M を付けると M バイトを表します。 デフォルト値は、実行時にシステムの設定に基づいて選択されます。詳細については、「HotSpot Ergonomics」を参照してください
    例:

    -Xmx83886080
    -Xmx81920k
    -Xmx80m

Solaris 7 および Solaris 8 SPARC プラットフォームの場合、この値の上限はおよそ 4000m からオーバーヘッドの量を引いたものであり、Solaris 2.6 および x86 プラットフォームの場合は 2000m からオーバーヘッドの量を引いたものです。 Linux プラットフォームの場合の上限は、およそ 2000m からオーバーヘッドの量を引いたものです。

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

-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() を呼び出します。

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

    -XX:+UseAltSigs
        VM ではデフォルトで SIGUSR1 および SIGUSR2 を使用しますが、 SIGUSR1 および SIGUSR2 をシグナル連鎖するアプリケーションと 競合する場合があります。 -XX:+UseAltSigs オプションは、VM にデフォルトとして SIGUSR1 と SIGUSR2 以外のシグナルを使用させます。

注

-version:release コマンド行オプションでは、どんなに複雑にリリースを指定してもかまいません。ただし、現実的なリリース指定の限られたサブセットを使用するだけでも適切なポリシーを表現できるため、それらのサブセットのみが完全にサポートされます。それらのポリシーを次に示します。

    1.  任意のバージョン。これは、このオプションを使用しないことで表現できます。

    2.  ある特定のバージョン ID よりも大きい任意のバージョン。次に例を示します。

        "1.5.0_03+"

    この場合、1.5.0_03 よりも大きい任意のバージョンが使用されます。これは、指定されたバージョンで特定のインタフェースが導入された (あるいはそのバグが修正された) 場合に便利です。

    3.  ある特定のバージョン ID よりも大きいバージョン。ただし、そのリリースファミリの上限によって制限するもの。次に例を示します。

    "1.5.0_03+&1.5*"

    4.  上の項目 2 または 3 の「OR」表現。次に例を示します。

        "1.4.2_05+&1.4* 1.5+"

        これは項目 2 に似ていますが、ある変更が特定のリリース (1.5) で導入されたが、その同じ変更が以前のリリースのアップデートでも利用可能になった、という場合に便利です。

関連項目

    *   javac - Java プログラム言語コンパイラ

    *   jdb - Java アプリケーションデバッガ

    *   javah - C ヘッダとスタブファイルジェネレータ

    *   jar - JAR アーカイブツール

    *
        http://java.sun.com/javase/6/docs/technotes/guides/extensions/index.html の 「The Java Extensions Framework」

    *
        http://java.sun.com/javase/6/docs/technotes/guides/security/index.html の 「Security Features」

    *
        http://java.sun.com/docs/hotspot/VMOptions.html の 「HotSpot VM Specific Options」