こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

WindowsでのJavaについて

こんにちは。
OSは現在、32bit版のWindowsVista(SP2)と、64bit版のWindows7を使っています。
今回、最近のWindows系OS上で、Javaがどういった事を行っているのかが知りたくて、
投稿させて頂きました。
以下で、いくつか質問させて下さい。

・Windows上で、Javaの行う事は?
僕のPCでは、"C:\Program Files\Java"以下に、Java開発環境がインストールされています。
ですが僕は、一度もJavaプログラムを作って、走らせたりしたことがありません。
それなのに、Windowsでは、Javaのアップデートの通知がよく来ますし、
どうやら、Javaがないと上手く動作しないプロセスも存在するようです。
Windowsのアプリケーション層以外のところで、Javaは何かやっているのでしょうか?
それとも、特定のアプリケーションを動作させるために、Javaが必要なだけでしょうか?


・仮想計算機とは?
Javaについて調べてみると、「仮想計算機というものを使って、同じプログラムをいろいろな種類の計算機で動かす事ができるのが特徴である」といった意見が多かったです。
この説明で、「同じプログラムをいろいろな種類の計算機で動かす事ができる」
というのは、Cといった言語にも言えることです。
では、Cプログラムも、この「仮想計算機」(Windowsのコマンドプロンプトのようなものの事かな?)というものを使っているからこそ、様々な計算機上で、動かす事ができるのでしょうか?
それとも、JavaプログラムとCプログラムの、OS上での実行のされ方は、
異なるのでしょうか?


・JavaScriptプログラムは、Windows上でどのようにして実行される?
インターネット上で、特定のサイトを見る場合に、「JavaScript」をインストールしなければならない時があります。
この「JavaScript」は、"C:\Program Files\Java"以下にインストールされている、
Java開発環境とは、全く独立したものらしいのですが、
JavaScript開発環境が、どこにインストールされているのかが分かりません。
JavaScriptプログラムは、Windows上でどのように動作しているのでしょうか?


以上の件について何かご存知の方がいらっしゃれば、是非教えて頂きたいと思います。
では、よろしくお願い致します。

投稿日時 - 2012-11-13 16:26:45

QNo.7795818

困ってます

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

コンピュータの概念を少し調べていただかないと、理解は難しいかもしれません。
次のようなキーワードを検索すると良いと思います。

機械語、アセンブラー、高級言語
コンパイラー、インタープリター
仮想マシン、エミュレータ
中間言語(バイトコード)

1.コンピュータは機械語しか処理できません。
 機械語は32ビット、64ビットなどを単位とした1と0の羅列です。
 1と0の羅列を人が読みやすいニーモニック(英数字)に置き換えたのがアセンブラーです。

2.機械語はコンピュータの動作そのものを記しています(メモリ参照、演算、分岐など)。
 これを、人間の作業に近いイメージで書けるようにしたものが高級言語です。
 Cは高級言語です。高級言語は機械語に翻訳する必要があります。それをするのがコンパイラーです。
 コンパイラーは翻訳して機械語のファイルを作るだけですが、翻訳してすぐにコンピュータに実効
 させることもできます。これがインタープリターです。インタープリターはいわば「通訳」です。

3.機械語はコンピュータの種類(CPU)によって違います。
したがって、コンパイラーもインタープリターも、それぞれ別のものが必要です。
 同じ高級言語の記述から、それぞれのマシンに応じた機械語に翻訳します。 

4.他のマシンの動作をソフトウェアで処理して、いかにも他のマシンのようなふりをするのが
 エミュレータです。たとえば、MacOSの上でWindowsのふりをするエミュレータがあれば、
 Windows マシン用に翻訳された機械語がMacで動作します。
 JAVA仮想マシンもエミュレータです。いろいろなOSの上で「JAVAマシン」のふりをします。

5.JAVAも高級言語なのでコンパイル(翻訳)が必要です。ただし、本当の機械語ではなく、
 JAVA仮想マシンが処理できるようにした中間言語に翻訳します。これがバイトコードです。

6.JAVAのアプリ/アプレットーはバイトコードで配布されます。Webページなどにも組み込まれています。
 したがって、これを実効するためには仮想マシン(エミュレータ)が必要です。
 アップデートの通知があるのは、この仮想マシンだと思われます。


「機械語」の定義などに語弊がありますが、たいだいのイメージはこんな感じだと思います。

投稿日時 - 2012-11-13 18:28:54

お礼

御回答ありがとうございます。

大変御丁寧に説明して頂き、非常に感謝しています。

「機械語、アセンブラー、高級言語
コンパイラー、インタープリター
仮想マシン、エミュレータ
中間言語(バイトコード)」
については、説明して頂いた内容で、大体理解できました。

仮想マシンについては、もう少し勉強したいと思いました。
その仮想マシンについてですが、Java以外に、Cなどの高級言語のプログラムも、
仮想マシンを使っているからこそ、様々なOS上で、
動かす事ができるのでしょうか?

投稿日時 - 2012-11-14 21:48:44

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

2 です。
先にお答えした記述は、ほんのさわりにすぎません。
無理に簡略化したので語弊もあります。私自身の誤解もあると思います。
先にあげたキーワードなどを検索するなりして、学習されることをお勧めします。


Cのコードは主にコンパイルされて実行形式に変換されます。
実行形式は各マシン(OS)によって異なります。先に説明した「機械語」に近いイメージです。
市販のアプリがOSを選ぶのはこのためです。

Cのコンパイラは各マシン(OS)ごとに用意されているので、基本的に同じソース(Cのコート)から、
各マシン用の実行形式のファイルが作れます。

実行形式のファイルは、そのOS上で動く様に作られるので、仮想マシンは必要ありません。

一方、JAVAのバイトコードは「JAVAマシン」の上で動作するように作られます。
JAVAマシンは現実には存在しないので、
WinやMacOSの上で「JAVAマシンのふりをする」仮想マシンが必要です。


参考まで。

投稿日時 - 2012-11-15 19:03:29

お礼

御回答ありがとうございます。

御説明して頂いた内容で、
CとJAVAの根本的な違いが分かりました。
ありがとうございました。

投稿日時 - 2012-11-16 21:08:14

ANo.1

javaのバーチャルマシンはIEで動きます。つまりJavaを使用したサイトがあるという事です。これらのサイトにアクセスするとローカルのコンポーネントを動かして、サイトが見れるのです。
でも最近javaの仮想マシンにセキュリティの穴が多くみつかり、アンインストールするユーザーも増えてます。オラクル社の対応が間に合って無いのでしょうね。
でもそれによってサイトが見れないなどの不都合は出るでしょう。
IEにはJAVAの挙動の設定ができますので、そちらで制御することもできます。

ちなみにJAVAとCはまるで違います。どちらかと言うとC#に近い言語でオブジェクト指向型です。C++より安全を重視して作られた言語でフリーで広まったので、最近では主流になってます。それに追従させるためにMSが考えたのがC#です。MSはVBを捨ててまでC#に賭けてますが、VBのように手続き型言語ではWebは処理しきれないのと、セキュリティも危ないからです。同じことはC言語にも言えます。

投稿日時 - 2012-11-13 16:48:13

お礼

御回答ありがとうございます。

Javaの実行環境の事を、Java仮想マシンというのですね。
これによって、様々な場所で、Javaプログラムが動くという事は理解できました。
では、JavaScriptプログラムも、こういった仮想マシンによって、
実行されるのでしょうか?

投稿日時 - 2012-11-14 21:40:55

あなたにオススメの質問