java(1)

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

    o   形式

    o   説明

    o   オプション

    o   関連項目

形式

    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 として宣言する必要があります。 また、値を返してはいけません。 さらに、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

    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を参照してください。

    -agentlib:libname[=options]
        ネイティブエージェントライブラリ libname をロードします。 たとえば次のように指定します。

    -agentlib:hprof

    -agentlib:jdwp=help

    -agentlib:hprof=help

    詳細については、 「JVMTI エージェントのコマンド行オプション」 @
    http://java.sun.com/javase/6/docs/platform/jvmti/jvmti.html#startingを参照してください。

    -agentpath:pathname[=options]
        フルパス名を使用して、ネーティブエージェントライブラリをロードします。詳細については、 「JVMTI エージェントのコマンド行オプション」 @
        http://java.sun.com/javase/6/docs/platform/jvmti/jvmti.html#startingを参照してください。

    -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 プログラムが展開されていないワイルドカードを認識することはありません。

    クラスパスの詳細は、 「クラスパスの設定」 @
    http://java.sun.com/javase/6/docs/technotes/tools/index.html#classpathを参照してください。

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

    -d32

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

    現在のところ、Java HotSpot Server VM だけが 64 ビットの操作をサポートしており、-d64 を使用すると -server オプションが暗黙的に有効になります。したがって、-d64 使用時には「-client」オプションは無視されます。この仕様は、将来のリリースでは変更になる可能性があります。

    -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(1)と、 Java チュートリアル @
        http://java.sun.com/docs/books/tutorial/jarの「Trail: Jar Files」を参照してください。

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

    Solaris 8 では、「java -jar」オプションで実行できる JAR ファイルは、実行権限のセットを保持しています。 このため、「java -jar」を使用しないで実行することも可能です。 Java Archive (JAR) ファイル @
    http://java.sun.com/javase/6/docs/technotes/guides/jar/index.htmlを参照してください。

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

    -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 アーカイブをコロンで区切ったリストで指定します。指定したパスに存在するブートクラスファイルが、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
            クラスのガベージコレクションを無効にします。このオプションを使用すると、ロード済みクラスからメモリーが回復されることがなくなるため、全体的なメモリー使用量が増大します。この場合、アプリケーションによっては OutOfMemoryError がスローされる可能性があります。

        -Xincgc
            インクリメンタルガーベジコレクタを有効にします。インクリメンタルガベージコレクタは、デフォルトでは無効になっています。 有効にすると、プログラムの実行中にガベージコレクションによる一時停止が発生しなくなります。インクリメンタルガベージコレクタは、プログラムと同時に実行することがあり、この場合、プログラムの利用できるプロセッサ能力が低下します。

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

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

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

                   -Xms6291456
                   -Xms6144k
                   -Xms6m

        -Xmxn
            メモリー割り当てプールの最大サイズをバイト数で指定します。指定する値は、2M バイトより大きい 1024 の倍数にしなければなりません。キロバイトを指定するには、文字 k または K を付けます。 メガバイトを指定するには、文字 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 つの影響があります。

            o   SIGQUIT によるスレッドダンプを利用できない

            o   シャットダウンフック処理の実行は、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) で導入されたが、その同じ変更が以前のリリースのアップデートでも利用可能になった、という場合に便利です。

関連項目

    o   javac(1)

    o   jdb(1)

    o   javah(1)

    o   jar(1)

    o   「Java 拡張機能フレームワーク」 @
        http://java.sun.com/javase/6/docs/technotes/guides/extensions/index.html

    o   「セキュリティー」 @
        http://java.sun.com/javase/6/docs/technotes/guides/security/index.html

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