java - Javaインタプリタ

java は Java バイトコードを解釈 (実行) します。

形式

java [ options ] entryname [ argument ... ]

機能説明

javaは、コマンドラインベースの Java VMです。

entryname 引数は、初めに実行されるエントリーポイントです。これには、以下の二つの意味があります:

  • デフォルトは、最初に実行されるクラスの名前です。CLASSPATH環境変数や -classpath オプションで指定されたクラスファイル中から指定されたクラスを探し実行します。
  • -jar オプションが指定された場合、JAR アーカイブ名を指定します。アーカイブには Main-Classヘッダーのある manifest ファイルが含まれていなければなりません。 Main-Class ヘッダーに記述されたクラスが初めに実行されます。

エントリーポイントには以下のメソッドが含まれていなければなりません:

    public static void main(String[])

entryname のあとに続く argument は、javaで呼ばれるmain() メソッドの引数として渡されます。

クラスは、javac のような Javaコンパイラによってコンパイルされた、バイトコードファイル(.class)といった形で提供されます。例えば、 MyClass.class というファイルには MyClass というクラスがあります。そして、それらを実行するにはファイル名でなくクラス名である MyClass を指定します。

    % java MyClass 

MyClass.class ファイルから MyClass がロードされ、 MyClass.main() メソッドが実行されます。

javaの動作は CLASSPATH の設定に左右されます。使用する .class ファイルは、 CLASSPATH に登録されたディレクトリや JAR アーカイブ、ZIPアーカイブに含まれていなければなりません。 javaは、CLASSPATHにカレントディレクトリーが指定されていない場合、カレントディレクトリーをサーチしません。

CLASSPATH を設定したにもかかわらず、 javaentryname をサーチできない場合、以下の様にフルエントリー名を指定してみて下さい:

    % java COM.MyCompany.MyPackage.MyClass

このバージョン(JDK 1.2β)の注意

クラスや JARファイルおよびポリシーを指定する場合、-new オプションを指定しなくてはならない。でも、将来このオプションはなくなるでしょう。なんでだろう?あまり必然性が感じられない。新しい機能だから? ま、いいか.....

JAR ファイル指定の場合

% java -new -jar foo.jar

クラス指定の場合

% java -new MyClass

検証

インタプリタは検査のメカニズムを介して、クラスが許可されているかどうかの判定をします。検査により、実行に先立って、クラスファイルがいかなる言語制約にも違反していないことを保証します。

JITの利用

このバージョンの JDKは、ジャストインタイム(JIT)コンパイラをサポートしています。クラスがロードされた時に JIT はバイトコードをネイティブのマシンコードに翻訳します。JITを使用すると、それぞれのクラスをロードする時間がかかりますが、プログラムの実行時間は飛躍的にアップします。

このバージョンの java は、JITをデフォルトでは使用しません。もし、JITを利用したい場合、JAVA_COMPILER 環境変数を設定するか java-D オプションを利用して下さい。

Solaris版は、"sunwjit"と呼ばれる JITが含まれています。Windows版は、"sunwjit"と"symcjit"と呼ばれる JIT が含まれています。
JITを利用したい場合:

    % setenv JAVA_COMPILER sunwjit
    % java MyClass 

JITの利用を中止したい場合:

    % unsetenv JAVA_COMPILER 

コマンドラインで使用の有無を決定したい場合:

    % java -Djava.compiler=sunwjit MyClass 

オプション

Java インタプリタは標準オプションと非標準のオプションが用意されています。非標準のオプションは将来の java VM で正式なものになるかもしれない。 非標準のオプションは -Xが付いています。

標準オプション

-classpath path
java がクラスを探すために使用するパスを指定します。デフォルト、またはCLASSPATH 環境変数の設定をオーバーライドします。ディレクトリはコロン(UNIX版)やセミコロン(Windows版)で分割します。path の一般形式は、以下のようになります:
UNIX版
   .:<your_path>

Windows版
   .;<your_path>
例えば以下の様に指定します:
   .:/home/xyz/classes:/usr/local/java/classes

-version
javaのバージョン情報を表示します。
-help
ヘルプの表示。
-v, -verbose, -verbose:class
クラスファイルがロードされるたびに java が標準出力にメッセージを表示します。
-verbose:gc
メモリを解放するときに、ガベージコレクタにメッセージを表示させます。
-verbose:jni
ネイティブメソッドが呼ばれたり実行された時にメッセージを表示します。
-DpropertyName=newValue
プロパティーの再定義。変更したいプロパティーの名前 propertyName に値 newValue を指定する。例えば
   % java -Dawt.button.color=green ...
プロパティー awt.button.color の値を "green"に設定します。-D オプションは複数指定できます。
-jar
Note: このβバージョンの java では -new オプションの指定が必要。

JARアーカイブにカプセルかされた Java プログラムを実行します。アーカイブには Main-Classヘッダーのある manifest ファイルが含まれていなければなりません。 Main-Class ヘッダーに記述されたクラスが初めに実行されます。
例えば、プログラムのエントリーポイントが COM.MyCompany.MyPackage.MyClass.main() ならば、manifest には以下の記述が含まれていなければなりません。

    Main-Class: COM.MyCompany.MyPackage.MyClass

-usepolicy[:policyfile]
Note: このβバージョンの java では -new オプションの指定が必要。

セキュリティーポリシーを使用する。ポリシーはファイル policyfile に記述されている。もし policyfile が指定されなかった場合、JDKインストール時のデフォルトが使用される。

-usepolicyを指定しなかった場合、セキュリティーマネージャーはインストールされません。そして、プログラムはセキュリティーに関する制限無しで実行されます。


-X
非標準なオプションを表示します。

非標準オプション

-Xdebug
Java デバッガ (jdb)を、この java セッションに付加することができます。-Xdebugがコマンド行で指定されているとき、 java は、デバックセッションの開始時に使われるパスワードを表示します。

-Xmxx
x にメモリアロケーションプール(ガベージコレクトヒープ)の最大サイズを指定します。デフォルトは 16MB メモリ。x は 1000 バイト以上でなければなりません。
デフォルトでは、x はバイト単位です。x には、文字 "k" を追加することでキロバイトを、文字 "m" を追加することでメガバイトを指定することができます。
-Xmsx
x にアロケーションプール(ガベージコレクトヒープ)のスタートアップサイズを設定します。デフォルトは 1MB のメモリです。x は 1000 バイト以上でなければなりません。
デフォルトでは、x はバイト単位です。x には、文字 "k" を追加することでキロバイトを、文字 "m" を追加することでメガバイトを指定することができます。
-Xnoasyncgc
非同期ガベージコレクションをオフにします。オプションが有効なとき、ガベージコレクションを明示的に呼び出すか、プログラムがメモリを使い果たしたときだけ、ガベージコレクションは起動します。通常ガベージコレクションは、非同期スレッドとして他のスレッドと並列して実行されます。
-Xnoclassgc
Java クラスのガベージコレクションをオフにします。デフォルトでは、ガベージコレクション中に使用されない Java クラスのスペースを、Java インタプリタが再利用します。
-Xprof
Java プロファイル機能を有効にして Java ランタイムを起動します。デフォルトでは、プロファイル結果を ./java.prof ファイルに入れます。
-Xprof:file
Java プロファイル機能を有効にして Java ランタイムを起動します。このフラグの形式では、ユーザがプロファイル結果を異なるファイルfile に出力できます。たとえば、-Xprof:myprog.prof フラグは、プロファイル機能を有効にし、デフォルトの ./java.prof ファイルではなく myprog.prof ファイルにプロファイル結果を出力します。
-Xhprof[:file=<file>,depth=<n>,top=<n>,sort=a|l]
ヒーププロファイリングデータの出力。
file=<file> 指定したファイルに出力(デフォルトは ./heap.prof
depth=<n> スタックトレースの上限を n に設定(デフォルトは 5)
top=<n> アロケーションサイトの上 n を出力(デフォルトは 20)
sort=<a|l> 出力情報のソートをアロケーション数 (a) で行うかライブオブジェクト数 (l) で行うかを指定(デフォルトは"a")

-Xssx
Java スレッドはそれぞれ、Java コードと C コードの2つのスタックを持っています。-Xss オプションは、スレッドの中で C コードによって使用されるスタックサイズの最大値を、x に指定します。java に渡されたプログラムの実行中に生成される、すべてのスレッドは C スタックサイズとして x を持ちます。x のデフォルト単位はバイトです。xの値は 1000 バイト以上でなければなりません。

キロバイトには文字 "k" を追加し、メガバイトには文字 "m" を追加することにより、xの意味を変更することができます。デフォルトのスタックサイズは 128KB("-Xss128k")です。
-Xossx
Java スレッドはそれぞれ、Java コード用と C コード用の2つのスタックを持っています。-Xoss オプションは、スレッドの中で Java コードによって使用されるスタックサイズの最大値を x に指定します。java に渡されたプログラムの実行中に生成されるすべてのスレッドは、Java スタックサイズとして x を持ちます。x のデフォルト単位はバイトです。xの値は 1000 バイト以上でなければなりません。

キロバイトには文字 "k" を追加し、メガバイトには文字 "m" を追加することにより、xの意味を変更することができます。デフォルトのスタックサイズは 400KB ("-Xss400k")です。
-Xverify
クラスファイルのバイトコードの検証を行います。
-Xverifyremote
クラスローダーによってシステムにロードされるすべてのコードの検証を行います。このオプションはデフォルトでセットされています。
-Xnoverify
検証をオフにします。

環境変数

CLASSPATH
ユーザ定義クラスへのパスをシステムに指定します。ディレクトリはコロン(UNIX版)やセミコロン(Windows版)で分割します。たとえば、
UNIXの場合
   .:/home/me/classes:/usr/local/java/classes.jar

Windowsの場合
   .;C:\home\me\classes;C:\java\classes.jar