,

JavaVMについて

はるか昔からJavaは好きなのですが(HotJavaかな?)、Java1.0のころはアプレットを作るだけの言語…

はるか昔からJavaは好きなのですが(HotJavaかな?)、Java1.0のころはアプレットを作るだけの言語かと思っていたんです。事実、入門書関連はAppletを作ることから始まっていました。しかし、Javaアプレットのプラグインが非推奨などになった(使えなくなった)現在はサーバーサイドやクライアントのアプリケーションを作るために使われています。

ややこしいことに、”Write once, run anywhere”がコンパイルしたもの(classファイル)のことを指しているのか、ソースコードを指しているのか分かりません。
実際には新しいバージョン(例えばJava1.5)のクラスファイルを旧バージョン(Java1.2)環境では動きません。実行できないエラーがでます。ソースコードを旧コンパイラでビルドすれば旧バージョンの実行環境で動きます。

余談はさておき、JavaVMって中身は何なの?という疑問に答えているサイトは少ないです。Open Javaのソースコードでjava.cppのソースコードを見たことがあるのですが、これをメンテするのは大変だなぁと感じます。あたり前ですけど、OSごとCPUごとに考えて実装するんです。新しいOSやCPUなんてどんどん出てくる。それを解析して(もちろん実機を準備しますね)デバッグなんて難しいと思います。それこそ、神様エンジニアクラス(魔法使い)です。頭が下がります。パフォーマンスチェックやガベージコレクトなんかどうやるのかな。知りたいけど、なんだか怖い気がします。

もちろん、システムをJavaで実装することには賛成です。C#で実装してもサーバーサイドで動きません。Windowsサーバーで組めばいいのかな?でもスケールアップはどうするのかな。
でも、クライアントアプリケーションはJavaで実装は難しかったです。どうしてもOS固有の処理が入ってしまいました。ファイル入出力で難しかったです。例えばWindowsではドライブレターがありますが(C:\やD:\など)、UnixやLinuxではないです(ルートとなりますね。mac OS Xも同じかな?)。Systemクラスで戻ってくる値の予測も難しかったです。クロスプラットホーム(OSがWindowsとLinux)は可能ですが、マルチプラットホーム(OSが三つ以上、OS/2などマイナー系OSやSolarisなど)はかなりの難易度になります。

話がそれつつ、無駄な話となりました。単にJavaVMについて語りたいだけでした。
(駄文になり、失礼しました)

またね!

Tags:

コメントを残す