Java について

現在、最も流行っているプログラミング言語の1つで、サン・マクロシステムズが考案したプログラミング言語です。

言語自体は、C/C++ 言語を参考にてあるだけありCに似ています。ただ、複雑だったC++の文法を少し削り、言語自体を少し簡単にしています。目玉な機能として、豊富なクラスライブラリとガーベジコレクションを搭載してます。*ガーベジは英単語で"garbage"と、書いてゴミという意味です。たまにガーベッジとか言う人もいるですが、ここのページではガーベジで統一します。

最初の波はJavaアプレットでした。

どんな環境でも Javaが動作する特徴を生かして、Webページをインタラクティブなものにしようとしてました。

ただ、インターネット経由ではプログラムをダウンロードするのに時間がかかるし Java の仮想マシンが重たく当時のPCでは、重たいプログラムと認識されてしまいました。実際重たいですが。

今現在は、サーバーサイド側のマシンパワーのあるPC上で Java を走らせ簡単に Web サービスを作成できるというソリューションで流行ってます。

サーバーサイド側で動作する Java を サーブレットとか JSP, J2EE とかいいます。今の Java のバージョンは 1.4.1 なのですが名称は Java 2 です(^^ゞ

What's Java?

1991年に登場した比較的新しい言語です。文法はC/C++を参考に開発者が移行しやすいにコーディングを書くことが出来るように開発されました。

Javaの利点は C/C++ の開発者が苦しめられたポインタという概念を消すことで、タイプセーフな言語になりかつ、C++の上をいく新しい要素を標準で積んでいることがあげられます。

あと、最大の利点は移植性です。"Write once, run anywhere."を掲げているくらいで、異なるOSでもプログラムを走らさせることができます。

Sun Microsystems がJavaのほとんどの特許を所有して、開発を行っている会社です。

ちなみに "Java" は "コーヒー"っていう意味もあるそうです。それとホームページのHTMLで使われている"Java Script"とは無関係です。親子関係もなく、まったく違う言語です。

Java の特色

Java の勉強をするに当たって、モチベーションを高めてやる気を出さないといけないのでよさげな特色をいくつか挙げてみます。

っていう感じでしょうか。従来の C++ と比べると

逆に Java にない点は

ちなみにマイクロソフトが中心に発表した Java つぶしの C# 言語は

JavaVM

Java Virtual Machine の略で日本語では Java 仮想マシンという名称です。この仮想マシンが"OSにとらわれずJavaのコードを実行する"ことができる仕掛けとなります。ちょっとPCの用語になれていないと"仮想"っていう言葉に抵抗があるかもしれません。コンピュータの仮想っていうのは、ハードウェアをソフトウェアを用いて代用さえるような感じの意味合いです。

たとえば Windows にJavaVM をインストールするということは Windows に Java のマシンも入っているかのように見せかけます。ほかのOSでも JavaVM  をインストールして Java のバイトコードをそれぞれのOSのマシンコードに変換して実行させます。

Windows / Mac / Linux 用のJavaVM がインストールされ、それぞれが同じように動作する VM があるので、同じように実行させれます。

ただ それぞれのOSの抽象化して JavaVM を作っているので Windows にしかないレジストリ, Mac にはないファイルの拡張子, Linux にはスレッドの概念がなかったり OS でマルチスレッドがないシステムにマルチスレッドになるようなシステムを組んであったりとOSの機能を補間されたり、削られたりして VM があるので開発先となるターゲットOSの機能を100%使えきれないという欠点もあります。

ガーベジコレクション

Java では使用済みでもう使われていないゴミのようなインスタンスの残骸を回収してメモリの空き容量をあける機能のことを指します。このゴミ回収の作業をするのがガーベジコレクタと呼びます。

C++ プログラマからすると new したら delete しなくてもよい機能でオートポインタのように思われる方が結構いるかと思います。

結構違います。

オートポインタはオートポインタの寿命がなくなった時点で delete してメモリを解放します。

Java では変数の寿命がなくなっても破棄されません。

ガーベジコレクタは、空きメモリ容量が少なくなってきたらガーベジコレクションをし出すため、メモリはたれっぱなしになります。

確かにメモリ関連のバグはかなり少なくなるようなのですが、ファイル入出力ではストリームを close しなけばならいない点は同じです。経験不足のプログラマは結構 close をしてもしなくても同じだと思っている人が多いため、こういうところでは C との違いは少なくないかなと思います。

あと、空きメモリ容量が少なくならないとガーベジコレクションをしてくれません。System.gc を使えば明示的に呼び出せはしますが、デフォルトでは「可能な限り」行うそうです。

マルチスレッド

プログラムを同時に実行させる最小単位です。プロセスとは1つ以上のスレッドとプログラムのデータを持ちます。

1つのプロセスの中で複数のスレッドを持つことが出来ます。