• 締切済み

JAVA実行環境とは

JAVAはOSに依存しない代わりに実行環境に依存しますとよく言われていますが、それに関係する用語を教えてください。 java runtime edition これはjavaをrunさせるのでclassファイルをアセンブラに変換するものだと思いますが、そうですか? java virtual machine これもjavaを動かすものみたいなのでclassファイルをアセンブラに変換するものだと思いますが、そうですか? JREとJVMは同じ意味の言葉ですか? javaソースのコンパイルの時にJREやJVMは参照されないと思いますが、そうですか?

  • scnut
  • お礼率16% (2/12)
  • Java
  • 回答数2
  • ありがとう数1

みんなの回答

回答No.2

>java runtime edition java runtime edition というものはありません。 Java Runtime Environment (JRE) もしくは Java Platform, Standard Edition の誤りのように思います。 JREは Java virtual machine (JVM) を含む Java の実行に必要な一連の機能の集合であるのに対して、 Java Platform, Standard Edition は基本的なJava実行環境を定義する仕様のことです。 JVM はJava クラスファイルを読み取って実行するソフトウェアで、それぞれ異なるものです。 JRE は JVM を含む、と考えるとわかりやすいかと思います。 JVM は必ずしもマシン語に変換しなければならないと決まっているわけではありませんが、 最近の JVM では効率を上げるためマシン語にコンパイルすることが多いようです。

scnut
質問者

補足

Java Runtime Environmentの間違いでした。 以下の3つのパスはJAVAの実行とは関係のない開発の方のものですか? C:\WINDOWS\JAVA C:\Program Files\Java C:\Program Files\Java Web Start

noname#94983
noname#94983
回答No.1

「classファイルをアセンブラに変換する」というのが、まぁそういえなくもないか……でもそう表現するのは妙だしな……という感じで、YESともNOともいいづらいものがありますね。 Javaのプログラムは、実行するとJava仮想マシン(JVM)が起動し、その中でクラスファイルがロードされます。このJVMは、ソフトウェア的に作成された仮想コンピュータです。これ自身にソフトウェア的なCPUの機能が要されています。クラスファイルは、この仮想マシンのCPUで実行されるマシン語で記述されています。 この仮想マシンは、仮想CPUのマシン語を、仮想マシンが起動しているプラットフォーム上のマシン語コードに変換する働きを持っています。ですから、最終的には、仮想マシンが「クラスファイルを(ネイティブ環境のCPUの)マシン語に変換するもの」といっていいかも知れません。 で、この仮想マシンは、それ単体で配布されているわけではありません。標準で付属するライブラリだのユーティリティプログラムだのといったさまざまなものが、使用の際には必要となるからです。例えば、Windowsなどにしろ、CPUだけでは動きませんね? OSに付属するAPIがないと、Windows用に書かれたプログラムは動きません。これと同じようなものです。 そこで、そうした仮想マシンの実行に必要なものをセットして配布されています。これが「JRE」です。つまり、JREは、JVMを含んだソフトウェアセットです。JVM自体がJavaを動かすためのソフトウェアといってもよいですが、「CPUだけしかないパソコン」でソフトが動かないのと同じで、JREというセットでないとJavaのプログラムは動かせません。 更に、このJREを含め、開発に必要なファイル類までもセットにしたのが「JDK」という開発キットです。「コンパイルの時にJREやJVMは参照されない」というのは、おそらくそのはずです。ただ、開発キット自体にJREが内蔵されていませんから、これをわざわざ取り除いてコンパイルするとどうなるか確認したことはありませんが。

scnut
質問者

お礼

ありがとうございました。 アセンブラに変換と書きましたのは書き間違いで、回答してもらったようにマシン語をイメージしていました。

関連するQ&A

  • javaのコンパイル後の実行。

    javaをコンパイル後、実行する際に Error:could not open 'c:\program files\java\jre6\lib\i3386\jvm.cfg と出ます。 ヴァーチャルマシンを開く事ができないとは、どういう事なのでしょうか?

  • Javaとは...?

    コントロールパネルの中にあるJavaとは、そもそも何なのですか? ダブルクリックすると、Java virtual machine launcher 【Error:could not open 'c:\program files\java\jre6\lib\i3386\jvm.cfg】 と、エラーが出ます。 これは一体どういう事なのでしょうか? ヤバイですか?

  • javaの実行環境

    javaの勉強をしようと思い、以下のhelloworldコードを書いてみました。 public class HelloWorld { public static void main(String[] args) { System.out.print("Hello World\n"); } } それを、以下のようにlinux環境(ubuntu 10.10)でコンパイル実行しようとしたのですが、 javac HelloWorld.java java HelloWorld.class Exception in thread "main" java.lang.NoClassDefFoundError: ・・・ と怒られてしまいました。そこで色々調べて jar cvmf manifest.mf test HelloWorld.class とjarファイルを作成して実行したところ、適切に"Hello World"が表示されました。 (manifest.mfの中身は"Main-Class: HelloWorld"1行だけです。) その後、このjarファイルをwindows環境に持っていって実行したのですが、 Exception in thread "main" java.lang.NoClassDefFoundError: ・・・ と怒られてしまいました。 linux環境で、"echo $CLASSPATH"を実行しても何も表示されず、CLASSPATHはどこにも通っていないようです。 また、windows環境のDOS画面にてSETを実行し、環境変数を表示させてもCLASSPATHはありませんでした。(javaはインストール済みです。) で、質問です。 1)なぜjarにすると実行でき、classファイルのままでは実行出来なかったのでしょうか? 2)windows環境で、CLASSPATHを設定したほうが良いのでしょうか?設定する場合は、prgramfiles\java\binで良いのでしょうか? 以上、長くなり申し訳ないのですが、よろしくお願いします。

    • ベストアンサー
    • Java
  • Javaについて教えてね。

    Hello Worldを出そうと、Javaをコンパイルして、次に実行する際に『Error:could not open \'C:\\Program Files\\Java\\jre6\\lib\\i386\\jvm.cfg\'』とエラーメッセージが出るのですが、どんな理由が考えられますか?

  • Javaで作製したプログラムはJVMがなければ動かない?

    Javaはまったく知らないのですが、 windowsでも動く(私の開発環境はLinuxです)webクライアントプログラムを作製したいと思い、 ネットワークに強くかつプラットフォーム非依存ということでjavaに興味をもちました。 JavaはJVMをOSとの間に挟むことでプラットフォーム非依存を実現していると理解しているのですが、 これは、逆にいえばJVMがなければ動かせないと思ってよいでしょうか? (Perlがコンパイラがインストールされていさえすればプラットフォーム非依存、しかしなければ決して動かないように。) それとも、プラットフォーム依存な形にまでコンパイルするということも可能なのでしょうか? もしJVMがなければ動かない場合、将来フリーソフトとして公開したいと思った場合、わざわざユーザ側でJVMをインストールしなければいけないですが、このことは問題にならないでしょうか? (VC++で書けばプラットフォームに依存するでしょうが、とにかくプログラムをダウンロードするだけで動くのに対し、ユーザに煩わしさを感じさせると思うのですがどうでしょう?それが理由でフリーソフトをjavaで書くことはあまりないないことなのかな?と感じています。) 質問をまとめますと、 1) JavaプログラムはJVMがなければ動かないのか? 2) 将来フリーソフトとして公開することを考えているのならJavaで開発するは避けた方がよいのか? です。よろしくお願いします。

    • ベストアンサー
    • Java
  • JAVAアプレットがブラウザで実行できない

    JAVA超初心者です。 じつは、Java2SDK1.4を使ってコンパイルしているんですが、 コンパイルしてできた「classファイル」をブラウザで実行できないんです。 四角い灰色のものがでてきて、マウスを重ねると、 { load: class **** not found }とステータスバーに表示されるだけです。 (*はファイル名) appletviewerというJAVAの動作を見るものだと、実行できるのですが・・・。 Web上で配布されているclassファイルはブラウザでも実行できます。 配布されているのと同じソースでやっても自分でコンパイルすると、ブラウザで実行できません。 ブラウザはIE6なので、JAVAに対応してると思います。 どうすればいいのでしょうか? コンパイルに問題があるのでしょうか?

    • ベストアンサー
    • Java
  • javaが実行されない

    雑誌を買ってjavaでプログラミングをしているのですが なぜか実行できません。 ツールはteraPadとJDKを使っています。 public class sample { public static void main(String[] args) { System.out.println("hello!"); } } コンパイルし、classファイルを実行すると Exception in thread "main" java.lang.NoClassDefFoundError: sample/class と出て実行できません。結果はhello!となるはずなのですがどなたかどこがおかしいのか教えてください。

    • ベストアンサー
    • Java
  • javaの実行エラーです

    Javaのソースファイルをコンパイルまでしました。Classファイルもできています。 実行すると、下記のエラーです。 Exception in thread "main" java.lang.UnsupportedClassVersionError: Hello (Unsupported major.minor version 50.0) よろしくお願いします。

  • JAVAの開発、実行環境について

    最近JAVAの勉強をスタートした者です。 環境はWinXPSP3 SUN Microsystems から最新版のJDKをDLし、環境変数も設定、定番の初歩『HelloWorld』表示に着手しました。 public class helloworld { public static void main(String args[]) { System.out.println("Hello Java World !"); } } javac helloworld.java でコンパイル java helloworld で実行 java.lang.UnsupportedClassVersionError というエラーがきました。 調べたところ、開発環境と実行環境のバージョンの違いが原因とのこと。 javac 1.6.0_06 java version "1.4.2_03" となっていました。 さて、このjava versionがどうやっても更新できません。 JREの最新版をDLしても変わらず。 コントロールパネルのJAVA(TM)コントロールでは、JAVAアプリケーションランタイムの設定は、1.0.6_06としっかり最新版になっています。 コマンドで表示すると1.4、コンパネからだと1.6、これはどうして異なるのでしょうか?というかむしろ別のもの? またどのように設定したら、問題が解決されるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • javaの実行について

    java入門の入門で、javaの勉強を始めた初心者です。その中で、わからないことが出てきたので、助けてください。  public class sample { public static void main(String[] args) { System.out.println("hello!"); } } というプログラムを書いて、コンパイルし、実行したのですが、 Exception in thread "main" java.lang.NoClassDefFoundError: sample/class というメッセージが出てきて実行できませんでした。ファイル名は、正確に入力しました。ちなみに、 sourceというディレクトリを作ってその中に、プログラムとコンパイルしたファイルを入れています。 C:\Source のディレクトリ 005/08/21 01:15 <DIR> . 005/08/21 01:15 <DIR> .. 005/08/21 04:59 412 sample.class 005/08/21 01:14 108 sample.java 2 個のファイル 520 バイト 2 個のディレクトリ 78,121,422,848 バイトの空き領域  そして、環境変数pathは、  C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Common Files\Adaptec Shared\System;C:\Program Files\Common Files\Ulead Systems\MPEG;C:\ Program Files\Java\jdk1.5.0_04\bin です。長くなってしまいましたが、ここで止まってしまって先に進めません。どうかアドバイスをお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう