Arch manual pages

java(1) General Commands Manual java(1)

java - Javaアプリケーションを起動します。

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

オプション

コマンドライン・オプション。オプションを参照してください。

クラス

コールするクラスの名前。

file.jar

コールするJARファイルの名前。-jarコマンドでのみ使用されます。

引数

main関数に渡される引数。

javaコマンドはJavaアプリケーションを開始します。Java Runtime Environmentを起動した後、指定されたクラスをロードし、そのクラスのmainメソッドをコールすることにより、これを行います。

このメソッドは、publicおよびstaticとして宣言する必要があります。また、値は返せません。さらに、String配列をパラメータとして指定できる必要があります。メソッド宣言は次の形式を含みます。

public static void main(String args[]

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

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

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

起動ツールには、現在のランタイム環境でサポートされる標準オプションのセットがあります。

また、仮想マシンの現在の実装では、非標準オプションのセットもサポートされます。これは、将来のリリースで変更される可能性があります。非標準オプションを参照してください。

-client
Java HotSpot VMクライアントを選択します。64ビット対応JDKは現時点では、このオプションを無視し、かわりにJava Hotspot Server VMを使用します。

デフォルトのJava VM選択は、次の「サーバークラス・マシンの検出」ページを参照してください:

http://docs.oracle.com/javase/7/docs/technotes/guides/vm/server-class.html

-server

Java HotSpot VMサーバーを選択します。64ビット対応JDK上では、サポートされるのはJava Hotspot Server VMのみであるため、-serverオプションが暗黙的に選択されます。

デフォルトのJava VM選択は、次の「サーバークラス・マシンの検出」ページを参照してください:

http://docs.oracle.com/javase/7/docs/technotes/guides/vm/server-class.html

-agentlib:libname[=options]

次の例のようなネイティブ・エージェント・ライブラリlibnameをロードします。

-agentlib:hprof
 
-agentlib:jdwp=help
 
-agentlib:hprof=help
次の「JVMTIエージェント・コマンドライン・オプション」を参照してください:

http://docs.oracle.com/javase/7/docs/platform/jvmti/jvmti.html#starting

-agentpath:pathname[=options]

フルパス名を使用して、ネイティブ・エージェント・ライブラリをロードします。次の「JVMTIコマンドライン・オプション」を参照してください:

http://docs.oracle.com/javase/7/docs/platform/jvmti/jvmti.html#starting

-classpath classpath, -cp classpath

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

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

便宜上、*のベース名を含むクラス・パス要素は、.jarまたは.JARを拡張子に持つディレクトリ内のすべてのファイルのリストを指定するのと同等とみなされます。Javaプログラムは2つの呼出しの違いを認識できません。

たとえば、ディレクトリmydirにa.jarとb.JARが含まれている場合、クラス・パス要素mydir/*はA.jar:b.JARに展開されますが、JARファイルの順番は未指定となります。このリストには、隠しファイルも含め、指定されたディレクトリ内のすべてのJARファイルが含まれます。*のみからなるクラス・パス・エントリは、現在のディレクトリ内のすべてのJARファイルのリストに展開されます。CLASSPATH環境変数も、定義時には同様に展開されます。クラス・パス・ワイルドカード拡張は、Java VMの開始前に行われます。Javaプログラムは、環境を問い合せる場合を除き、拡張されていないワイルド・カードを参照しません。たとえば、System.getenv("CLASSPATH")をコールして問い合せる場合です。

-Dproperty=value

システム・プロパティの値を設定します。

-d32

アプリケーションを32ビット環境で実行します。32ビット環境がインストールされていないかサポートされていない場合は、エラーが報告されます。デフォルトでは、64ビット専用システムが使用されている場合を除き、アプリケーションは32ビット環境で実行されます。

-d64

アプリケーションを64ビット環境で実行します。64ビット環境がインストールされていないかサポートされていない場合は、エラーが報告されます。デフォルトでは、64ビット専用システムが使用されている場合を除き、アプリケーションは32ビット環境で実行されます。

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

-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オプションは、すべてのシステム・クラスでアサーションを有効にする別のスイッチを提供します。

-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オプションは、すべてのシステム・クラスでアサーションを有効にする別のスイッチを提供します。

-enablesystemassertions, -esa

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

-disablesystemassertions, -dsa

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

-helpまたは-?

使用方法を表示して終了します。

-jar

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

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

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

http://docs.oracle.com/javase/7/docs/technotes/guides/jar/jarGuide.html

-javaagent:jarpath[=options]

Javaプログラミング言語エージェントをロードします。

-jre-restrict-search

ユーザー・プライベートなJREをバージョン検索に含めます。

-no-jre-restrict-search

ユーザー・プライベートなJREをバージョン検索から除外します。

-showversion

バージョン情報を表示して続行します。(も参照してください。)

-splash:imagepath

imagepathに指定された画像を含むスプラッシュ画面を表示します。

-verbose, -verbose:class

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

-verbose:gc

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

-verbose:jni

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

-version

バージョン情報を表示して終了します。-showversionオプションも参照してください。

-version:release

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

releaseオプションでは、特定のバージョンと、バージョン文字列と呼ばれるバージョンのリストを指定します。バージョン文字列は、いくつかのバージョン範囲を空白で区切った形式の順序付きリストです。バージョン範囲は、バージョンIDバージョンIDとそれに続くアスタリスク(*)、バージョンIDとそれに続くプラス記号(+)、またはアンパサンド(&)を使用して結合された2つのバージョンIDから構成されるバージョン範囲です。次の例のように、アスタリスクはプレフィックス一致を、プラス記号は指定されたバージョン以上を、アンパサンドは2つのバージョン範囲の論理andをそれぞれ意味します。

-version:"1.6.0_13 1.6* & 1.6.0_10+"
前の例の意味は、バージョン1.6.0_13、または1.6をバージョンIDプレフィックスに持つ1.6.0_10以上のバージョンをクラスまたはJARファイルが必要としている、ということです。バージョン文字列の厳密な構文や定義については、「Javaネットワーク起動プロトコル & API仕様(JSR-56)」の「付録A」を参照してください。

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

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

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

-Xint

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

-Xbatch

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

-Xbootclasspath:bootclasspath

ブート・クラス・ファイルを検索するディレクトリ、JARファイルおよびZIPアーカイブのコロンで区切られたリストを指定します。指定したパスに存在するブート・クラス・ファイルが、Javaプラットフォーム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仮想マシンはJNIリクエストを処理する前に、JNI関数に渡されるパラメータと、実行環境のデータを検証します。無効なデータが見つかった場合は、ネイティブ・コードに問題があることを示しているため、Java仮想マシンは致命的エラーを発生して終了します。このオプションを使用すると、パフォーマンス低下が予想されます。

-Xfuture

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

-Xnoclassgc

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

-Xincgc

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

-Xloggc:file

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

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

-Xmnsizeまたは-XX:NewSize

若い世代(ナーサリ)のサイズを設定します。

-Xmsn

メモリー割当てプールの初期サイズをバイト数で指定します。指定する値は、1MBより大きい1024の倍数にする必要があります。キロバイトを指定するには、文字kまたはKを付けます。メガバイトを指定するには、文字mまたはMを付けます。デフォルト値は、実行時にシステム構成に基づいて選択されます。次の「ガベージ・コレクタのエルゴノミクス」を参照してください:

http://docs.oracle.com/javase/7/docs/technotes/guide/vm/gc-ergonomics.html

例:

-Xms6291456
-Xms6144k
-Xms6m

-Xmxn

メモリー割当てプールの最大サイズをバイト数で指定します。指定する値は、2MBより大きい1024の倍数にする必要があります。キロバイトを指定するには、文字kまたはKを付けます。メガバイトを指定するには、文字mまたはMを付けます。デフォルト値は、実行時にシステム構成に基づいて選択されます。

サーバー・デプロイメントでは、-Xmsおよび-Xmxは通常同じ値に設定されます。次の「ガベージ・コレクタのエルゴノミクス」を参照してください:

http://docs.oracle.com/javase/7/docs/technotes/guide/vm/gc-ergonomics.html

例:

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

-Xprof

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

-Xrs

Java VMによるオペレーティング・システム・シグナルの使用を減らします。

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

Java VMは、予期しないJava VM終了のシャットダウン・フックを実装するためにシグナルをキャッチします。Java VMは、SIGHUPSIGINTおよびSIGTERMを使用してシャットダウン・フックの実行を開始します。

JVMは、デバッグの目的でスレッド・スタックをダンプするという機能を実現するために、同様のメカニズムを使用します。JVMは、スレッド・ダンプを実行するためにSIGQUITを使用します。

Java VMを埋め込んでいるアプリケーションはSIGINTSIGTERMなどのシグナルを頻繁にトラップする必要があり、その結果Java VMのシグナル・ハンドラと衝突する可能性があります。-Xrsコマンドライン・オプションを使用すると、この問題に対処できます。-XrsがJava VMで使用されている場合、SIGINTSIGTERMSIGHUPおよびSIGQUITのシグナル・マスクはJava VMによって変更されず、これらのシグナルのシグナル・ハンドラはインストールされません。

-Xrsを指定すると、次の2つの結果が生じます:

SIGQUITによるスレッド・ダンプは使用できません。

•シャットダウン・フック処理の実行は、Java VMが終了しようとしている時点でSystem.exit()を呼び出すなどして、ユーザー・コード側で行う必要があります。

-Xssn

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

-XX:AllocationPrefetchStyle=n

割当中に使用されるプリフェッチのスタイルを設定します。デフォルトは2です。

-XX:+AggressiveOpts

積極的な最適化を有効にします。

-XX:+|-DisableAttachMechanism

コマンド(jmapjconsoleなど)がJava VMに接続できるかどうかを指定します。デフォルトでは、この機能は無効になっています。つまり、次の例のように接続が有効です。

java -XX:+DisableAttachMechanism

-XXLargePageSizeInBytes=n

ラージ・ページの最大サイズを指定します。

-XX:MaxGCPauseMillis=n

最大GC休止時間のターゲットを設定します。

これはソフト・ゴールのため、Java VMは実現のために最善の努力をします。デフォルトで設定されている最大値はありません。

-XX:NewSize

若い世代(ナーサリ)のサイズを設定します。-Xmnsizeと同じです。

-XX:ParallelGCThreads=n

パラレル・コレクタ内のGCスレッドの数を設定します。

-XX:PredictedClassLoadCount=n

このオプションでは、最初にUnlockExperimentalVMOptionsフラグを設定する必要があります。アプリケーションが多数のクラスをロードする場合で、特にclass.forName()が頻繁に使用される場合はPredictedClassLoadCountフラグを使用します。推奨値は、-verbose:classからの出力に示されているロード済クラスの数です。

例:

java -XX:+UnlockExperimentalVMOptions -XX:PredictedClassLoadCount=60013

-XX:+PrintCompilation

Java HotSpot VMダイナミック・ランタイム・コンパイラからの詳細出力を印刷します。

-XX:+PrintGCDetails -XX:+PrintGCTimeStamps

ガベージ・コレクション出力をタイムスタンプとともに印刷します。

-XX:SoftRefLRUPolicyMSPerMB=0

このフラグは、ソフトウェア参照の積極的処理を有効にします。このフラグは、ソフトウェア参照カウントがJava HotSpot VMガベージ・コレクタに影響する場合に使用します。

-XX:TLABSize=n

スレッド・ローカル割当てバッファ(TLAB)がJava HotSpot VMでデフォルトで有効になっています。Java HotSpot VMでは、TLABのサイズを割当てパターンに基づいて決定します。-XX:TLABSizeオプションでTLABのサイズを微調整できます。

-XX:+UseAltSigs

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

-XX:+|-UseCompressedOops

64ビットJava VMで圧縮された参照を有効にします。

このオプションは、デフォルトでtrueになります。

-XX:+UseConcMarkSweepGCまたは-XX:+UseG1GC

Concurrent Mark Sweep (CMS)またはG1ガベージ・コレクションを有効にします。

-XX:+|-UseLargePages

ラージ・ページ・サポートを有効にします。

ラージ・ページは、Solarisではデフォルトで有効になっています。

-XX:+UseParallelOldGC

パラレル・ガベージ・コレクタを有効にします。これはスループットおよび平均レスポンス時間に対して最適化されます。

-version:releaseオプションでは、リリース指定の複雑さに制限はありません。ただし、可能なリリース指定の限られたサブセットのみが適切なサウンド・ポリシーを表現でき、それらのみが完全にサポートされます。それらのポリシーを次に示します。

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

2.次の例のように、ある特定のバージョンID値よりも大きい任意のバージョン。

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

3.次の例のように、ある特定のバージョンIDよりも大きいバージョンで、そのリリース・ファミリの上限によって制限されるもの。

"1.6.0_10+ & 1.6*"

4.次の例のように、項目2または3のor式。

 "1.6.0_10+ & 1.6* 1.7+"
項目2と同様です。これは、ある変更が特定のリリース(1.7)で導入されたが、その同じ変更が以前のリリースのアップデートでも利用可能になった、という場合に便利です。

スループットまたはレスポンス時間の高速化のどちらかを最適化するための、試験的なチューニング・フラグの使用例を次に示します。

Example 1, スループットを向上するためのチューニング

java -d64 -server -XX:+AggressiveOpts -XX:+UseLargePages -Xmn10g  -Xms26g -Xmx26g 

Example 2, レスポンス時間を速くするためのチューニング

 java -d64 -XX:+UseG1GC -Xms26g Xmx26g -XX:MaxGCPauseMillis=500 -XX:+PrintGCTimeStamps 

一般に、次の終了値が起動ツールから返されるのは通常、起動元が不正な引数で呼び出されたか、深刻なエラーが発生したか、あるいはJava仮想マシンから例外がスローされた場合です。ただしJavaアプリケーションは、API呼出しSystem.exit(exitValue)を使用して任意の値を返すことを選択することもできます。

0: 正常終了

>0: エラー発生

•javac [SolarisおよびLinux] [Windows]

•jdb [SolarisおよびLinux] [Windows]

•javah [SolarisおよびLinux] [Windows]

•jar [SolarisおよびLinux] [Windows]
11 Jul 2013