• ベストアンサー

JVMとはどのようなものですか

こんにちは、JVMとはどのようなものでしょうか。 JavaがどのOSでも動くのは、JVMの上で動くからと本には書かれていますが、 どのようなものかよく理解出来ません。 これは、JDKとかをOSにインストールした時に、自動的にインストールされるものでしょうか。 それとも、ソースファイルをコンパイルした時に自動的に作られるものでしょうか。 また、このJVMは何故どのOSにも対応出来るのでしょうか。 以上宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.9

今までの回答者さん達の内容から、JVMというのは「JRE」や「JDK」の中に入っている、というのが分かるかと思います。 故に、『どの時点でどのようにして』というのを以下の2つに分けて回答していきます。 1.【Javaソフトウェアの実行時[JREの中のJVMを使用]】 →実行環境が異なるので、各プラットフォームごとにさらに分けます。 1-1.J2ME 携帯などの場合は、厳密には「KVM」という用語を用います。(携帯関連の仕事から退いてもうかれこれ数年経つけど、今ではだいぶ変わっているのかな?) たとえば、i-appli対応の携帯電話であれば、docomoのショップなどで新規購入の『時点』で、もう既にKVMがインストされているわけですね。(正確には、工場出荷前の段階で、各実機にインストされていると思われる。) 1-2.J2SE PCの場合は、各OSごとにいろいろと異なってきます。(MacやBSD系は使ったことがないので、割愛。) 1-2-1.Linux TurboLinux FUJIの場合は、デフォルトでSunのJDKが入っているので、OSのインストール直後からすぐに利用可能です。FedoraやCentOSなどでは、OSのインストールの途中で選択可能ですが、Sunとは異なるGNU系統(GCJ)だったりするので、わざとチェックを外し、Winなどと同じようにインターネットや各種専門書などから後でインストしたりもします。 1-2-2.Windows XP以降からは、デフォルトでインストールできなくなったらしく、以下のサイトなどから必要なのを自分でインストします。 java.com(→ゲームなど。) http://www.java.com/ja/ OpenOffice(→無料のオフィスソフト。) http://ja.openoffice.org/ 1-3.J2EE サイトの管理者さんなどが、外部に公開する前に、サーバ上にインストしているものと思われます。 ここのサイト「oshiete.goo.ne.jp」などでは、php3のファイルなどがよく拝見されますが、「search.goo.ne.jp」の方ではウェブ検索の結果のURL上にweb.jspやGETで送信したと思われるクエリーの文字列などが見受けられるので、ServletやJSPなどが動くWebアプリケーションサーバが内部で動作しているのでしょう。 2.【Javaソフトウェアの開発時[JDKの中のJVMを使用]】 以下のサイトなどを元に、JDKをインストールした『時点』で、JVMもそのOSにインストされます。IDE(統合開発環境)を使えば、プラグインなどによりどのプラットフォームの開発も可能となっています。 本家サイト(→コマンドベースでコーディング。) http://java.sun.com/javase/ja/6/download.html Eclipse(→人気No.1。日本語対応版は、Pleiadesの方で。) http://www.eclipse.org/downloads/ NetBeans(→インストール時にSunオススメのソフトがくっついてくるので、注意が必要。) http://ja.netbeans.org/

htgo
質問者

お礼

choconamacreamさん、何度も丁重なレスを有り難う御座いました。 結局、JVMというのは「JRE」や「JDK」の中に入っていて、それらをインストールする時に自動的にそれぞれの「OS」に 適合するJVMだけがインストールされるという理解でよいのでしょうか。 因みに、アプリケーションプログラムは、コンパル済みの実行可能ファイルなので、「JVM」を必要とせず、 ソースファイルを実行する時(コンパルしてオブジェクトファイルを作成する時?)だけは、JVMが必要ということでしょうか。 もう一つの質問ですが、色々とノートPCを見ているとコントロールパネルの中に「JAVA」というアイコンがありました。(Win XP SP3) 別のPC(Desk Top Win XP SP3)のコントロールパネルには「JAVA」のアイコンはありませんでした。 これはなにか意味があるのでしょうか。 再度宜しくお願いします。

その他の回答 (8)

回答No.8

>そのJVMがどの時点でどのようにしてそのOSにインストされるかを知りたいのですが。。。。。。 普通はJava開発キット(JDK)やJavaの実行環境(JRE)などをインストールしたときにインストールされます。 「普通は」と書いたのは、上記以外にも自分の知らないところでJavaがインストールされることがあるからです。 例えば、オラクルクライアントをインストールするとオラクルクライアントのインストーラが同時にJavaをインストールしてしまいます。 (正確にはきっとインストールの説明か何かに「Javaがインストールされます。」って書かれているんでしょうけど…。読み飛ばしてしまうことが多いです。)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.7

「そのJVMがどの時点でどのようにして」インストールされるのかというと, 管理者が「インストールしよう」と思って操作したときにインストールされるんです. そこには魔法もなにもありません. ついでにいうと「マシン語のオブジェクトを作れない」というよりは, 「(現実には存在しない) JVM という名の機械用のマシン語のオブジェクトを作る」というべきでしょう>#4. もっとも「あれが『マシン語』か」って突っ込みは受け付けません.

回答No.6

>これは、JDKとかをOSにインストールした時に、自動的にインストールされるものでしょうか。 はい、そうです。 >IT技術情報>Java>JAVAコマンドを知る http://www.stackasterisk.jp/tech/java/javaCommand01_01.jsp 強いてあげれば、以下のような感じ? JVM < JRE < JDK >それとも、ソースファイルをコンパイルした時に自動的に作られるものでしょうか。 いいえ、そうではありません。 ソースファイル(~.java)をコンパイルした時に自動的に作られるのは、実行ファイル(~.class)です。 >また、このJVMは何故どのOSにも対応出来るのでしょうか。 「なぜ?」って、そりゃやっぱし、Sunが『マルチプラットフォーム』を謳ったからでしょう。(当時は、MSと犬猿以上の仲だったというは、業界内でも有名な話でしたし‥。)

参考URL:
http://ja.wikipedia.org/wiki/JVM
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.5

まとめ的に、こんな区分けで、理解できませんか? JDK : コンパイラーとランタイム(JRE) とを含む  コンパイラー(javac.exe) : 「.java」ソースを「.class」ファイルにコンパイルする JRE : ランタイム : 「.class」ファイルを実行する環境(JVM)を提供する。OSごとにインストールするものが違う。windows用では「.dll」という機械語ファイルで、JVMの本体が提供されている。 JVM : Java Virtual Machine : 「.class」ファイルを読み込み、ウインドウアプリケーションや、applet、servletなどを実行する。実際にはjava.exe やappletviewer.exe や各ブラウザのプラグインなどが、このJVMを起動する。windowsでは、起動中はtea capアイコンがタスクトレイに表示される。 「.class」ファイル : 中間コードファイル : JVMに読める形式のファイル。 「.java」ソース : テキストファイル。人間が読みやすいようにかかれたファイル。

  • A88No8
  • ベストアンサー率52% (836/1606)
回答No.4

こんにちは #2です。 >>JVM上で動くJavaアプリケーションプログラムは、どのOSでも動くが > 上記の意味は、Javaアプリケーションプログラムは「JVM」を必要とせず、ソ >ースファイルの時だけは、JVMが必要ということでしょうか。  素人なのでそこまで突っ込んだ質問の回答は、用意していませんでしたが、javaは、マシン語のオブジェクトを作れない中途半端なコンパイラという認識です(中間コードコンパイラ)。 これは、Windows上のCコンパイラでコンパイル&リンクしたマシン語(バイナリ)がdllを必要とするのとは次元が違うと認識しています。  家に帰ったら私もjavaの入門書を読み返してみますね(^^;

回答No.3

Javaはソースファイル(.javaファイル)をコンパイルすると、 クラスファイル(.classファイル)が作成されます。 このクラスファイルはどのOSでも共通で、同じソースファイルであれば、 Windowsでコンパイルしても、Solarisでコンパイルしても同じものができますし、 Windowsで作成したクラスファイルもSolarisでちゃんと動きます。 (厳密にはいろいろ(ファイル区切り文字など)考慮する点もありますが。) ではなぜ違うOSで作成したクラスファイルが動くかというと、 JVMにも  Windows用のJVM  Solaris用のJVM などそのOS用のJVMがあり、JVMでOSの違いを吸収しているからです。

htgo
質問者

お礼

>Windows用のJVM  Solaris用のJVM などそのOS用のJVMがあり、JVMでOSの違いを吸収しているからです。 そのJVMがどの時点でどのようにしてそのOSにインストされるかを知りたいのですが。。。。。。

  • A88No8
  • ベストアンサー率52% (836/1606)
回答No.2

こんにちは #1さんの補足です。 >また、このJVMは何故どのOSにも対応出来るのでしょうか。  そのOS毎にソースファイルをコンパイルして専用のJVM(Java Virtual Machine)を作るからです。  JVM上で動くJavaアプリケーションプログラムは、どのOSでも動くがJVMは、OS専用(というか各機種かな=「JVM というプログラムが動作する環境」)のものを必要とするということです。

htgo
質問者

お礼

 A88No8さん、有り難う御座います。 >JVM上で動くJavaアプリケーションプログラムは、どのOSでも動くが  上記の意味は、Javaアプリケーションプログラムは「JVM」を必要とせず、ソースファイルの時だけは、JVMが必要ということでしょうか。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

端的にいうと, JVM は「クラスファイルのインタプリタ」, あるいは「エミュレータ」です. で, しょせんはソフトウェアですから, 「JVM というプログラムが動作する環境」であればどんな OS でも 動作します. そして, これは JDK なり JRE なりをインストールすれば自動的にインストールされます... というか, インストールしてくれないと Java のプログラムを動かせない.