
―Javaプログラミングの前提知識―
2001/5/12
| javaコマンドを使いこなす |
|
今回の内容
|
javaコマンドはクラスファイルを実行するツールです。javacコマンドなどでソースファイルからコンパイルしたクラスファイルは、すべてこのjavaコマンドを介して実行されます。
クラスファイルとは、コンピュータ固有の環境(CPUなど)とは完全に独立した仮想的なコンピュータ、Java Virtual Machine(Java VM)上の実行ファイルのことです。javaコマンドは、このクラスファイルを実行するために、まずJava VMを起動します。起動したJava VMは、javaコマンドに指定されたクラスファイルを読み込み、その実行を開始します。以下では、このjavaコマンドの使い方について説明します。
なお、javaコマンドは基本的に、DOSプロンプトまたはコマンドプロンプト上で実行します。
| 基本的なjavaコマンドの使い方 |
■クラスの実行
javaでクラスを実行する方法は簡単です。DOSプロンプトまたはコマンドプロンプト上で、実行するクラスファイル名を指定してjavaコマンドを実行するだけです。例えば、カレントディレクトリ中に、クラスファイルWordProcessor.classと、その実行に必要なクラスファイルがすべて存在するときに、クラスWordProcessorを実行するには、次のように入力します。
java WordProcessor |
すると、Java VMが起動し、そのJava VMがクラスファイルWordProcessor.classを読み込み、実行を開始します。
■クラスパスの指定
クラスパスは、アプリケーションを実行するのに必要なクラスファイルをJava VMがどの"場所"から読み込めばよいかを指定するものです。
Java VMにクラスパスを指定するには、javaコマンドでクラスファイルを実行するときに、次のように入力します。
java -classpath <クラスパス> <実行するクラス名> |
クラスパスは、記号“;”(セミコロン)で区切られた複数の“場所”の指定から構成されます。“場所”には、具体的には、まずディレクトリが指定できます。そのほかにも、ZIPファイルとJARファイルという、複数のクラスファイルを1つにまとめたファイルを指定することができます。大抵のJavaのクラスライブラリはJARファイルで配布されるので、“場所”にこの種類のファイルを指定できるようになっています。例えば、カレントディレクトリ中のクラスWordProcessorが、その内部でディレクトリC:\lib中のクラスライブラリSpellChecker.jarを利用しているとします。ここで、SpellChecker.jarはJARファイル、すなわち複数のクラスファイルを1つのファイルにまとめたものです。このとき、クラスWordProcessorを実行するには、
java -classpath .;C:\lib\SpellChecker.jar
WordProcessor |
のように入力し、Java VMがクラスライブラリSpellChecker.jarの中身を検索できるようにしなければなりません(“.”はカレントディレクトリを表します)。さもなければ、Java VMは実行に必要なクラスファイルを見つけることができず、
Exception in thread "main"
java.lang.NoClassDefFoundError: <クラス名> |
のようなエラーメッセージを表示して終了してしまいます。クラスパスの指定で間違えがちなのが、カレントディレクトリの指定です。例えば、上の例で、次のようにカレントディレクトリをクラスパスに指定し忘れたとします。
java -classpath C:\lib\SpellChecker.jar
WordProcessor |
この場合に、Java VMはカレントディレクトリを検索しないので、クラスWordProcessorを見つけることができず、やはりエラーメッセージを表示して終了してしまいます。
なお、この-classpathオプションを指定せずにjavaコマンドを実行した場合には、Java VMは自動的にクラスパスをカレントディレクトリに指定します。クラスパスについての詳細は、「クラスパス(class path)を正しく使う」を参照してください。
なお、標準システムクラスライブラリや、エクステンションメカニズムでインストールしたクラスライブラリを利用する場合には、それらのクラスへのクラスパスを指定する必要はありません。詳しくは、「クラスパス(class path)を正しく使う」、「クラスパスを使わずクラスライブラリを利用する」を参照してください。
| 実行を指定できるクラス、できないクラス |
Java VMは実行を開始すると、まず最初にjavaコマンドで直接指定されたクラスの
public static void main(String[]) |
というメソッドを呼び出します。このメソッドが存在しないクラスはjavaコマンドに直接指定することはできません。もし実行しようとするクラスにpublic static void main(String[] )というメソッドが存在しなければ、Java VMは、
Exception in thread "main"
java.lang.NoSuchMethodException: main |
| javaコマンドのオプションを活用する |
以下ではjavaコマンドに指定できるコマンドラインオプションについて説明します。
非常に多くのオプションがありますが、すべてのオプションについて知っている必要はありません。普通にクラスファイルを実行するだけならば、-classpathオプションの使い方を知っていれば十分です。
■標準オプション●javaコマンドの使い方を表示する
| “-?”または“-help” |
| これらのオプションを指定すると、javaコマンドは、javaコマンドの簡単な使い方を表示して、終了します。これは、オプションもクラスファイル名も何も指定せずにjavaコマンドを実行したときと同じです |
●クラスパスを指定する
|
-classpath <記号";"で区切られた複数のディレクトリ、JAR、ZIPファイル> |
|
このオプションを用いることで、Java VMのクラスパスを指定することができます。クラスパスについては、「クラスパス(class path)を正しく使う」を参照してください |
●Java VMのバージョンを表示させる(終了時)
| -version |
| このオプションを指定すると、javaコマンドはJava VMのバージョンを表示して終了します |
●Java VMのバージョンを表示させる(実行前)
|
-showversion |
| このオプションを指定すると、クラスファイルの実行前に、javaコマンドはJava VMのバージョンを表示します。 |
●実行中に読み込むクラスファイルを表示させる
|
“-verbose” または“ -verbose:class” |
| これらのオプションを指定すると、Java VMは実行中にクラスファイルを読み込むたびに、メッセージを表示します |
●ガーベッジコレクションの実行を知らせるメッセージを表示させる
| -verbose:gc |
| このオプションを指定すると、Java VMはガーベッジコレクションを行うたびに、メッセージを表示します。ガーベッジコレクションとは、利用されなくなったオブジェクトをヒープから取り除くことです |
●JNIの使用時にメッセージを表示させる
| -verbose:jni |
| このオプションを指定すると、Java VMはJava Native Interface(JNI)が使用されるたびに、メッセージを表示します。JNIとは、CPUまたはオペレーティングシステムに固有の実行コード、ネイティブコードをJava VMからアクセス、実行するためのインターフェイスです。逆に、JNIにより、ネイティブコードからJava VMにアクセスしたり、実行することができます |
●非標準オプションの内容を表示させる
| -X |
| このオプションを指定すると、非標準オプションについての説明が表示されます。非標準オプションについては以下の"非標準オプション"の説明を参照してください |
●JARファイルの実行を指定する
|
-jar |
|
このオプションを用いて、javaコマンドにクラスファイルではなくJARファイルを指定すると、Java VMはそのJARファイルから直接実行するクラスを読み込んで、実行することができます。この機能を用いるためには、JARファイルにどのクラスを最初にJava VMで実行すればよいかの情報を追加しておく必要があります。ここでは、その詳細については説明しません |
■非標準オプション
非標準オプションは、サン以外(マイクロソフト、IBMなど)のJava VMの実装では指定できる保証のないオプションです。また、将来のバージョンの実装では、これらのオプションが使用できなくなる可能性があります。
●実行効率を最適にする(JITを有効にする)
|
-Xmixed |
|
このオプションを用いると、Java VMはバイトコードインタプリタとネイティブコードコンパイラの両方を使って、最も実行効率がよくなるように、クラスファイルを実行します。Java VMは通常このように動作するので、特にこのオプションを指定する必要はありません。 バイトコードインタプリタとは、クラスファイルに書かれているJava VMの命令を1命令ずつ読み込んで実行するプログラムです。 ネイティブコードコンパイラとは、クラスファイルに書かれているJava VMの命令を読み込んで、それに対応するCPUの機械命令を生成するプログラムです。 |
●インタプリタで実行する
|
-Xint |
| このオプションを用いると、Java VMはバイトコードインタプリタのみを用いてクラスファイルを実行します。 |
●外部のデバッカからのデバックを有効にする
|
-Xdebug |
|
このオプションを指定すると、Java VMは、外部のデバッガからデバッグを行えるようになります。 |
●ブートクラスパスを指定したものに変更
|
-Xbootclasspath:<ブートクラスパス> |
|
ブートクラスパスを指定したものに変更します。ブートクラスパスについては、「クラスパス(class path)を正しく使う」を参照してください。 |
●ブートクラスパスを追加(最後に)
|
-Xbootclasspath/a:<追加するブートクラスパス> |
|
ブートクラスパスの最後に、指定したブートクラスパスを追加します。 |
●ブートクラスパスを追加する(先頭に)
|
-Xbootclasspath/p:<追加するブートクラスパス> |
|
ブートクラスパスの先頭に、指定したブートクラスパスを追加します。 |
●より厳密なクラスファイルのチェックを行う
|
-Xfuture |
|
このオプションを指定すると、Java VMはクラスファイルのチェックを正しいクラスファイルフォーマットの仕様に沿って厳密に行います。このオプションを指定しないと、Java
VMは古いJava VM(バージョン1.1時代)のクラスファイルチェックを行います。 |
●ガーベッジコレクションを無効にする
|
-Xnoclassgc |
|
このオプションを指定すると、Java VMは、クラスのガーベッジコレクションを行いません。 |
●ガーベッジコレクションのプログラム実行への影響を小さくする
|
-Xincgc |
|
このオプションを指定すると、Java VMは“インクリメンタルガーベッジコレクション”という方法の、ガーベッジコレクションを行います。この方法では、プログラムの実行中に、ガーベッジコレクションが発生してプログラムの実行が妨害されることがなくなります。ただし、ガーベッジコレクションそのものの性能は約10%低下するそうです。 |
●Java VMのヒープの初期サイズを指定する
|
-Xms<ヒープサイズ(バイト)> |
|
|
このオプションで、Java VMのヒープの初期サイズをバイト単位で指定することができます。このオプションで指定するヒープのサイズは、1024の倍数でかつ、1メガバイト以上でなければなりません。このオプションでは、キロバイトを表すのに記号“k”を、メガバイトを表すのに記号“m”を用いることができるので、これらを用いると1024の倍数を計算することなくヒープのサイズを指定することができます。例えば、ヒープの初期サイズを1024キロバイトに指定するには、次のように入力します。
|
●Java VMのヒープの初期サイズを指定する
|
-Xmx<ヒープサイズ(バイト)> |
|
|
このオプションで、Java VMのヒープの最大サイズをバイト単位で指定することができます。このオプションで指定するヒープのサイズは、1024の倍数でかつ、2メガバイト以上でなければなりません。 このオプションでは、キロバイトを表すのに記号“k”を、メガバイトを表すのに記号“m”を用いることができるので、これらを用いると1024の倍数を計算することなくヒープのサイズを指定することができます。例えば、ヒープの最大サイズを256メガバイトに指定するには、次のように入力します。
|
●プログラム終了時にCPUの簡単なプロファイリング結果を表示
|
-Xprof |
|
このオプションを指定すると、Java VMは、実行終了時に、非常に簡単なCPUのプロファイリング結果を表示します。 |
●プログラム終了時にCPUの詳細なプロファイリング結果を表示
|
-Xrunhprof |
|
|
このオプションを指定すると、Java VMの実行を詳細にプロファイリングすることができます。このオプションの詳しい使い方は、
と入力すると表示されますので、それを参照してください。 |
ホワイトペーパー(TechTargetジャパン)
- Webの表示速度を遅くする「SSLハンドシェイク」とは (2010/2/9)
安全性を担保しようとWebページにSSLを適用すると、負荷の高い処理が実行される。速度と安全性は両立できるのか? - クラウド活用「雲活」のために押さえるべき39のポイント (2010/2/2)
活用するべきサービスか否か、クラウドの利点・問題点、クラウドプラットフォーム提供企業になるための条件、開発者がするべきことに分けて紹介 - 再利用性の高いクラス作成に重要な“アクセス制御” (2010/1/28)
Javaのアクセス修飾子public、private、protectedや、Eclipseで簡単に作れるアクセサメソッドgetter、setterについて解説 - DB設計の神ツール「ERMaster」なら、ここまでできる (2010/1/21)
直感的なUIに、カスタマイズ可能な、Excel出力のテーブル定義書、辞書機能など多機能なERモデリングの無料Eclipseプラグインです
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | 企業の仮想化に足りない“発想”とは? 仮想化運用管理のキモは意外なところに! New! |
| ◆ | 操作もマニュアルも分かりやすい! ユーザー視点で開発されたPC管理ツール New! |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |

| ◆ | セキュリティを知り尽くす上野氏が登壇! @ITメールソリューションLive! in Tokyo |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
| ◆ | 世界に通用するストレージの作り方とは? 製品に込めた思いを富士通の開発者に聞く |

| ◆ | OSSで手間も時間も、障害も減った―― 「マピオンの事例」オープンソース活用法 |
| ◆ | 「ノートPCの持ち出し禁止」で大丈夫? 情報漏えいを防ぐ管理手法とインフラは? |
| ◆ | 1日の処理を1秒に――MySQLの達人が語る 「コスト削減」できるチューニング |

| ◆ | ドキュメント作成を自動化して、SEの作業 効率を大幅アップ! Visio 2007の魅力 |
| ◆ | 急速に広がるHyper-Vでのサーバ仮想化 そのベストプラクティスをデルが解説 |
| ◆ | @IT主催セミナーで語られた、「担当者に 求められるセキュリティ対策」をレポート |

| ◆ | @IT「Windows 7」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |






