![]() |
安藤幸央のランダウン[42]
開発者が知っておくべき
Javaと仮想マシンの歴史
安藤幸央(yukio-ando@exa-corp.co.jp)
株式会社エクサ
2008/9/4
「Java News.jp(Javaに関する最新ニュース)」の安藤幸央氏が、CoolなプログラミングのためのノウハウやTIPS、筆者の経験などを「Rundown」(駆け足の要点説明)でお届けします(編集部)
■ 歴史あるJavaとVM(Virtual Machine)、その生い立ち
Javaは、1995年5月23日に開催されたデベロッパーカンファレンス「Sun World Expo」で初めて一般に公表されました。
Java言語はもともと「Oak」というプログラミング言語に由来しています。1990年12月にスタートしたGreen Projectの一環として情報家電を制御するために開発された言語がOakでした。これはオフィスの窓から樫の木(Oak)が見えたことに由来しているようです。その後、Oakの商標がすでに使われていることが分かり、「Java」に改名されました。
「Java」という言葉になった由来は、どうもはっきりとせず、諸説あります(参考:Java Technology: The Early Years)。
- 開発チームがよく行くカフェで見掛けたJava(米口語でコーヒー)という文言
- 開発チームの近所に「Java Street」という道があった
- 当時マーケティング担当だったKim Polese氏が、響きの良い名前としてJavaを選択した
- 開発者の頭文字「James gosling氏、Arthur Van hoff氏、Andy bechtolsheim 」
現在、Javaは単なる1つのコンピュータ言語にとどまらず多くのものに影響を与えています。Javaが影響を受けたプログラミング言語である「Smalltalk」の時代以前から、「Virtual Machine」(仮想マシン。以下、VM)という概念(環境)は考えられ、利用されてきました。PascalからPコードへのコンパイラと、Pコードインタプリタからなる、中間言語コンパイラも、いまにして考えると、Javaバイトコード的な扱いであったと振り返ることができます。
「Javaの父」と呼ばれるJames Gosling氏が考えていたJavaのポリシーの1つに「Architecture Neutral : マシン環境に依存しない」というものがありました。Java VMとJavaバイトコードはそれを具現化する最良の仕組みでもあったのです。
1995〜1996年のJavaが登場した年は、ほかにも以下のような言語が登場してきました。意外とJavaの登場は古い時代だったとの印象を受けるのではないでしょうか。
- Perl 4.0
- Python 1.0
- Fortran 90
- Visual Basic 1.0
■ Javaの栄光とその後
Java黎明(れいめい)期のスローガンは以下のものでした。
Write once , run anywhere . |
プラットフォームに依存しないプログラミング言語として多くのプログラマーに期待を抱かせ、「理想」とも思える環境を夢見させたスローガンでもありました。
その一方、実際は夢のようなことはいっていられず、「そこら中でデバッグ・テストしなければいけない」(Write once, debug/test everywhere.)と揶揄(やゆ)されることもありました。その原因は、どこでも動くはずのJava VM環境が、その仕組み上OS環境ごとに違い、Java VMの実装もライセンスを受けたさまざまなベンダが手掛けたことに由来しています。
そのまた一方で、Java/Java VMの思想は、その後のさまざまなプログラミング言語に影響を与えていきました。
■ JDK(Java Development Kit)の歴史
Javaの開発環境であるJDK(Java Development Kit)、Javaの実行環境であるJRE(Java Runtime Environment)は数多くのOS向けに用意され、オープンソースのものから、メーカー製のものまで数多く存在します。基本はリファレンス実装の米サン・マイクロシステムズ製のものが広く使われています。
| 表1 JDK歴史 | |||||||||||||||||||||||||||||||||||||||
|
Javaの黎明(れいめい)期、多くの人々にJavaが知られ、広まった理由の1つは、WebブラウザにJava VMが組み込まれたことにあるでしょう。その当時のWebブラウザ開発のエキサイティングな様子は、雑誌『Wired』の古い記事「The Java Saga」で読むことができます。
Webブラウザ上で動作するJavaアプレットの勢いも借りて、各OSベンダが米サン・マイクロシステムズからライセンス提供を受け、各OSプラットフォーム用のJava環境が続々とリリースされます。
その一方、米マイクロソフトのWebブラウザ「Internet Explorer」(以下、IE)にJava VMが組み込まれたことは、歓迎とともに混乱を招きました。米マイクロソフトが提供したWindows 95/NT用のJava VM((MSJVM))が持つ「J/Direct」機能は高性能ながら、Win32 APIを直接呼び出せるという米マイクロソフト独自の実装が加えられていました。このJ/DirectはIE 4.0に含まれてリリースされました。ちょうどそのころ各ベンダから「100% Pure Java」を支持する動きもありました。
その後、1997年10月にIE 4.0がJavaの互換性テストに劣るとして米サン・マイクロシステムズが米マイクロソフトを提訴しました。1998年11月に、米マイクロソフトがJava訴訟で敗訴の仮決定がされ、これを受けてIE用Java VMの改訂版がリリースされました。2004年4月には和解しましたが、結果として現在、通常の方法でMicrosoft Java VMを入手できません(参考「MSJVM の移行に関するよく寄せられる質問」)。
■ オープンソース系Java VMと、企業系Java VMの台頭
2006年11月にJava SEとJava MEがGPL 2の下、完全にオープンソース化しました。
それまでは、公式には対応していない特殊なプラットフォーム(CPU)や米サン・マイクロシステムズのJava VMが大きくなり過ぎたことに反発し、数多くのJava環境がリリースされました。中には自由に組み込めるライセンス方式を求めたものや、純粋な研究目的のものもあります。2008年9月現在も開発(メンテナンス)が続いており、安心して利用できるものも数多くあります。
また、各企業が自社製品と親和性を高く特化した領域で高性能なサーバサイド専用のJava VMや携帯電話や家電製品に特化したJava VM、より高速に動作するJava VM環境などを商品化してきています。以下、アルファベット順でリストにしてみました。
- AegisVM
軽量、高速に動作することを目指したオープンソースのJava VM。2004年以降開発は停止している - Apache Harmony
Apache Projectのスクラッチから開発したオープンソースでフリーなJava実装 - Azul Compute Appliance(Azul Systems)
Javaバイトコードの実行を専用プロセッサで行う環境。GC(Garbage Collection)にかかる時間が高速化されるなど、Java VMに最適化されたハードウェア環境を提供する - BEA JRockit
動作性能や安定性に注力した米BEAによるJava VM実装。パフォーマンス性能の評判が高い。WebLogicと親和性が高い。OSなしの仮想化環境で動作するLiquid VM環境も販売されている - cacaovm
JITを含む、Java 2実装。商用としても使えるが、主にVM研究のためのプロジェクト - C# Java Virtual Machine
C#で実装されたJava VM。拡張が容易。C#とJavaの両方を知ることができる - FreeBSD Java Project
FreeBSD Foundationによる、米サン・マイクロシステムズから公式にライセンスを受けて活動している移植版 - IBM Java
米IBMが実装したJava環境(Windows/Linux/AIX用)。WebSphere環境と親和性が高い - IBM J9
同じく米IBMの開発したJava VM。WebSphere Micro Editionに含まれる - IcedTea(Red Hat)
主にFedora環境で利用するための米Red Hatが提供するJava VM。OpenJDKとGNU Classpathがベースとなっている - IKVM.NET
.NET(Monoやマイクロソフトの.NET)ベースのJava環境。Javaバイトコードを.NETに変換して利用できる - jamaicaVM
リアルタイムGC機能が搭載されたドイツ製のJava VM - JamVM
商用利用可能なフル仕様ながらも、極めてサイズの小さいJava VM。インタプリタモードでのみ動作する - The JanosVM
1つのVMで複数のプロセスを安定して動作することを目的としたJava VM。主に研究目的 - Jbed Advanced CDC(エスマティック)
ネットワーク機器や、情報家電など、組み込み向けのJava 環境。Windows CE/Mobileや各種リアルタイムOSに対応 - JBlend(アプリックス)
リアルタイムOS向けのJava VM。主に組み込み機器用として使われる。KDDI(au)のezplusの実行環境 - Jikes RVM
IBM Researchの研究に由来するJava VM。主にVM研究や設計のために使われているもの - joeq(上級)
主に研究目的のための Java VM。Java2対応。2003年以降開発停止中 - Jupiter
分散コンピューティング専用の特殊なJava VM環境 - JV-Lite(ACCESS)
情報家電、携帯電話向けのJava環境。DoCoMoの携帯電話用Java実装「DoJa」の実行環境として使われている - Kaffe
1996年に登場した歴史あるJava VM。50以上のプラットフォームに対応。Linuxのディストリビューションに含まれる場合もあり、既存のJava VMを置き換えることのできるレベルとして広く使われる - Open Runtime Platform
Javaバイトコードに対応した中間言語のコンパイルに対応したランタイム環境 - sableVM
小型で高速なJava VM。保守や拡張しやすいクリーンルーム実装のJava VM。C言語による実装。2005年以降開発停止 - waba
PalmやZaurus、iPaq、GameBoyといった携帯端末(PDA)/ゲーム機用の極小構成のVM。Java仕様によく似てはいるがJavaそのものではない
2008年9月現在のJava VM環境を網羅したつもりですが、抜けがあるかもしれません。読者がいま開発を行っている環境ではどのVMが使われているのか、調べてみてはいかがでしょうか。
■ いまも広がり続けるJava VM
■■携帯電話環境Google Androidの「Dalvik VM」
2007年11月に発表された米Google(とAn Open Handset Alliance Project)が提供する携帯電話環境であるGoogle AndroidもJavaの血筋を引いたものです。Androidのアプリケーションは「Dalvik virtual machine」という専用のJava VM上で動作します。
Javaのコードは、「Dalvik実行形式ファイル(.dex)」というjarファイルよりもコンパクトで展開の速い独自の「バイトコード」にコンパイルされ、Dalvik VM上で動かすことができます。Dalvik VMは携帯電話などの、遅いCPUや、少ないメモリの環境でも動作するようスリム化されたもので、簡素なアーキティクチャを指向している環境です。
またライセンス形式は、Apache Licenseで提供され、携帯電話各メーカーが商用利用の際、コード改変できるようになっています。
■■iPhoneとJavaの微妙な関係
2008年7月に日本でも3GのiPhoneが発売され、大きな騒ぎとなりました。開発者にとってもう1つの話題は、iPhone SDKで開発したアプリケーションがアップルのAppStoreを通じ、安価な手数料で全世界に配布・販売できることでした。
米サン・マイクロシステムズのJava Marketing VPのEric Klein氏もiPhone向けのJava環境をリリースしたいとコメントしていましたが、実際はそう簡単にコトは進まないようです。
理由はiPhone SDKやAppStoreのアプリケーション配布に関する仕組みや制限によるものです。iPhone上でJava VMを動作させることは自体は技術的には可能だそうです。ところが、現在のiPhoneアプリケーションの配布体系や制約を考えると、Java VM上で動作するJavaアプリやJavaツールを配布する方法がないのです。このことに関して米サン・マイクロシステムズは2008年9月現在も米アップルと交渉中と伝え聞いています。
Javaには、Java ME環境から携帯電話に必要な機能に特化した「phoneME」」が整いつつあり、iPhoneがJavaプラットフォームとして利用できれば、既存のアプリケーション資産も含め、より多くのモバイルアプリケーションの登場が期待されます。
■ 環境としてのJava VM、スクリプト言語への広がり
Java VMは、もともとJavaを動作させるために設計されたため、Java言語以外のプログラミング言語を実行するのにはあまり適していません。ところが、開発者の要求はJava VMにおけるスクリプト言語のサポートまで広がっており、「the Da Vinci Machine Project」を中心として、数々のスクリプト言語がJava VM上で動作するようになってきています。代表的なものをいくつか挙げてみました(アルファベット順)。
- Armed Bear Common Lisp(Common Lisp)
- ColdFusionMX
- Groovy
- JavaFX
- JRuby(Ruby)
- JSqueak(Squeak)
- Jython(Python)
- Proccesing
- Rhino(JavaScript)
- Scala
またネイティブコンパイラ自身も、llvm(Low Level Virtual Machine)のような、言語に対してVM環境を用意し、言語やプラットフォームとは独立した最適化を行うコンパイラ基盤も一般化してきています。
■ Java VMのこれから
サーバ環境の構築には、台数分だけコンピュータが陣取る形態から、VMwareなどの仮想環境で、効率よくまとめる事例も多くなってきました。また、「many core / multi core」のCPU環境も、VM利用の流れを促進していると思われます。携帯電話などの組み込みデバイス環境も一昔前のパソコン並みの性能を誇っています。
一風変わった例としては、携帯電話用のフルブラウザ「jig ブラウザ」はWebブラウザ内に独自のJava VMを持ち、Javaアプレット風の小さなアプリケーションが動作するような2重構造を持ったVM環境も実現されてきています。
Javaはもうすでに「新しい」ものではなくなってきています。数多くの企業や教育機関で利用され、初めて学ぶプログラミング言語がJavaというプログラマーも多くなってきていることでしょう。コンピュータの細かな環境を気にすることなく(それはそれで技術的には大切な事柄ですが)手軽に最大限のパフォーマンスを引き出しつつ、アプリケーションやサービスを提供する日がやって来ているのです。
Javaが黎明(れいめい)期に目指した「Write once, run anywhere.」の時代がいまこそやって来るのかもしれませんね。
次回は2008年11月初めごろに公開の予定です。内容は未定ですが、読者の皆さんの興味を引き、役立つ記事にする予定です。何か取り上げてほしい内容などリクエストがありましたら、編集部や@ITの掲示板までお知らせください。次回もどうぞよろしく。
■ @IT関連記事
| いろいろなJavaを楽しむ 小山博史のJavaを楽しむ(2) Javaの実装には本家のサン以外にもApacheやGNU系などさまざまなものがある。用途に適したJavaを選択して開発に役立ててみよう 「Java
Solution」フォーラム 2006/10/7 |
| 実行速度に挑戦してきたJava
VMの歴史 Javaの歴史は実行速度向上の歴史でもあった。今日のJava VMが完成するまでのアーキテクチャの変遷を振り返ることで、Java VMの理解をより深めることができる 「Java
Solution」フォーラム 2003/12/11 |
| 20世紀のJavaの歴史と21世紀への5つの提案 [コラム]米持幸久のJava Issue(2) コンピュータの歴史はまだ56年だ。21世紀のJavaはどうなるのか?大胆予測と5つの提言を行う 「Java
Solution」フォーラム 2001/1/16 |
| キャリアとプロファイルを覚えて「Hello Javaアプリ!」 携帯アプリを作って学ぶJava文法の基礎(2) 携帯電話のキャリアによってJavaアプリ開発用プロファイルが違うことをしっかり理解し、簡単なプログラムを作ってみましょう 「Java Solution」フォーラム 2008/2/12 |
| Javaでコンパイラの基礎を理解する コンパイラを意識したコーディングをすると、パフォーマンスが向上し、プログラミング力も向上します。Javaを通してその仕組みを理解しましょう |
||
| プロフィール |
安藤幸央(あんどう ゆきお) 1970年北海道生まれ。現在、株式会社エクサ
マルチメディアソリューションセンター所属。フォトリアリスティック3次元コンピュータグラフィックス、リアルタイムグラフィックスやネットワークを利用した各種開発業務に携わる。コンピュータ自動彩色システムや3次元イメージ検索システム大規模データ可視化システム、リアルタイムCG投影システム、建築業界、エンターテインメント向け3次元
CG ソフトの開発、インターネットベースのコンピュータグラフィックスシステムなどを手掛ける。また、Java、Web3D、OpenGL、3DCG
の情報源となるWebページをまとめている。ホームページ Java News.jp(Javaに関する最新ニュース) 所属団体 OpenGL_Japan (Member)、SIGGRAPH TOKYO (Vice Chairman) 主な著書 「VRML 60分ガイド」(監訳、ソフトバンク) 「これがJava だ! インターネットの新たな主役」(共著、日本経済新聞社) 「The Java3D API仕様」(監修、アスキー) |
安藤幸央のランダウン バックナンバー 連載インデックスへ»
- 第1回 Javaを速くするための心構え
- 第2回 サーバサイドで進化するグラフィックス
- 第3回 ユーザビリティ(使いやすさ)の大切さ
- 第4回 Javaプログラマのお役立ちサイト
- 第5回 伝説のイベントJava Night
- 第6回 次世代のインターネット言語curl登場!
- 第7回 次世代を予感させるグリッドコンピューティング
- 第8回 音声はコンピューティングを変える?
- 第9回 GoogleをWebサービスから利用するAPIの登場
- 第10回 これは使える!Java風スクリプト
- 第11回 PtoPはいよいよビジネスのステージに
- 第12回 ハリウッド映画並のCGがPCに到来する日
- 第13回 知的ゲーム「Robocode」でJavaのチャンピオンに
- 第14回 海の上のJava Night
- 第15回 Java版テラリウム? ただいま開催中
- 第16回 進化したアプレット、Viewletとは?
- 第17回 Eclipse:新しい開発環境モデルの誕生
- 第18回 Webサービス、どこまで実用になっている?
- 第19回 SWTは本当に高速なGUIを実現するのか?
- 第20回 JavaOne 2003の注目トピックを振り返る
- 第21回 SIGGRAPH 2003に見るJavaの進化
- 第22回 AmazonWebサービスの可能性
- 第23回 オープンソースの検索エンジン登場
- 第24回 技術者の祭典JTC BOFとJava Night
- 第25回 リッチクライアント時代の到来
- 第26回 Eclipse 3.0のリッチクライアントとは?
- 第27回 データ中心型、簡単リッチクライアントJDNC
- 第28回 浸透する新世代のシンクライアント
- 第29回 WebプログラマはRailsに乗るべきか?
- 第30回 Ruby On Railsのチームに学ぶ仕事術
- 第31回 JavaプログラマはAjaxに乗るべきか
- 第32回 Java SE 6へ移行する理由と移行をとどまる5つの理由
- 第33回 見つけて得するソースコード専用の検索エンジン
- 第34回 Podcastでプログラマーに必要な英語をStudyしよう!
- 第35回 人気のAPI/フレームワークを作るための39カ条
- 第36回 あなたのサイトはiPhoneで見られますか?
- 第37回 バッチ処理はJavaでバッチリ?その現状とこれから
- 第38回 Cometに代表されるサーバ・プッシュ技術の復権
- 第39回 ソースコードの宝石箱、●●Forgeを見逃すなかれ
- 第40回 Webアプリ開発環境としてのSafariを知ってますか?
- 第41回 夏休みに世界へ挑戦! プログラミングコンテスト
- 第42回 開発者が知っておくべきJavaと仮想マシンの歴史
- 第43回 あなたの知らないJDKの便利ツールたち
- 第44回 時を欠ける症状−うるう秒から考えるサステナビリティ
- 第45回 IT業界で楽しく仕事をするための10カ条
- 第46回 そのWebサービスで“対価”をもらえますか?
- 第47回 IT系でも活用しなければ損。論文を読んで広がる知見
- 第48回 Webからの知見、見つけた論文の読み解き方
- 第49回 Java技術者も知っておきたい「AR(拡張現実)」
- 第50回 クラウド活用「雲活」のために押さえるべき39のポイント
- 第51回 意外と知らないバージョン表記・数字の豆知識
- 第52回 グーグルは、○○おもいっきり、テレビ
- 第53回 いま購読するべき15の開発者ブログ
- 第54回 技術者なら知っておきたい「ソーシャルゲーム」とは
- 第55回 開発者は覚えておきたいアプリストア/マーケット大全
- 第56回 売れるスマホアプリを目指せ! テスト達人への道
- 第57回 プレゼン巨人の星となるためのツールと手法のまとめ
- 第58回 ぼくらの七ボタン戦争 - Social Buttons War
- 第59回 師走を楽しもう。技術系アドベントカレンダーの魅力とは
- 第60回 GitHubをもっとソーシャルに使いこなすための7つ道具
| ご意見、ご感想は掲示板へどうぞ |
| JavaコラムINDEX |
TechTargetジャパン
- EclipseでScalaプログラミングを始めるための基礎 (2012/2/10)
概要や5つの特徴を紹介し、開発環境を構築して対話型実行環境「REPL」やEclipse上でHello Worldを実行します - 並列分散処理の常識をHadoopファミリから学ぶ (2012/2/8)
並列分散処理の課題やHadoopの長所/短所、そして短所を補うHadoop関連プロジェクトの構成や概要などを簡単に紹介 - WebLogicサーバ最新版「12c」の気になる4つの特徴 (2012/1/31)
久々にメジャーアップグレードしたJavaアプリケーションサーバについて、製品担当者に軽量インストーラなどの特徴を聞いた - GitHubをもっとソーシャルに使いこなすための7つ道具 (2012/1/23)
ソースコードホスティングのGitHub周辺で便利な新サービスが続々登場しているので、まとめて紹介しよう。特に連動クラウド「fluxflex」が注目だ
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -


1970年北海道生まれ。現在、株式会社エクサ
マルチメディアソリューションセンター所属。フォトリアリスティック3次元コンピュータグラフィックス、リアルタイムグラフィックスやネットワークを利用した各種開発業務に携わる。コンピュータ自動彩色システムや3次元イメージ検索システム大規模データ可視化システム、リアルタイムCG投影システム、建築業界、エンターテインメント向け3次元
CG ソフトの開発、インターネットベースのコンピュータグラフィックスシステムなどを手掛ける。また、Java、Web3D、OpenGL、3DCG
の情報源となるWebページをまとめている。