
―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ジャパン)
- Android NDKでJNIを使用してアプリを高速化するには (2010/3/17)
C/C++やOpenGL ESといったネイティブコードを使うためのNDKとJNIを紹介し、その使い方や注意点を徹底解説します - 調査の難しい「OutOfMemoryError」事例、5選 (2010/3/11)
Java開発者が避けて通れないメモリ不足エラーの基本的な問題切り分け方法と発生につながる事例、対処法を解説 - 究極の問題解析ツール、逆コンパイラJD-Eclipseとは (2010/3/8)
ライブラリ内で例外が発生! そのクラスのソースコードを調べたい!! 自動で逆コンパイルしてくれる無料Eclipseプラグインがあります - いまさら聞けない「Webサービス」の常識 (2010/2/26)
昨今では企業システムでも使われる「Webサービス」の概念やJava標準のJAX-WSを紹介しJBoss WSでサンプルを作成
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
| 「いつかは壊れるサーバ」そんな故障に 迅速で安価に手軽に対応する方法とは? New! |
| 「特権ユーザー」の事件を防げ! 万能権限を持つユーザーの管理方法とは? New! |
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | TomcatやJBossなどAPサーバ環境に関する 情報を集約! “業務”用APサーバ大百科 New! |
| ◆ | 一気に解説! 最新のクラスタストレージ 「RAIDを超えたストレージ基準」……など New! |
| ◆ | クラウド的ユーザー体験の変化は脅威か? 仮想化技術を使いこなす運用管理術を紹介 New! |

| ◆ | 上司や部下、部署内メンバーとの情報共有 を“ガラッ”と変えるコラボツールとは? New! |
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |

| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |
| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |

| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |
| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |

| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |
| ◆ | その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |






