JavaOne 2000 レポート - 組み込み分野から見た Java -


  1. はじめに
  2. Java 2 Platform, Micro Edition は今年羽ばたく
  3. パビリオンで見た J2ME
  4. カンファレンスにて
  5. CLDC と KVM
  6. Real-Time Java
  7. JIM: Web-based Industrial Monitoring Framework
  8. おわりに
 
 

カンファレンスにて

 
 


カンファレンスにおいても Java 2 ME は携帯機器に関するセッションを中心に行われていました。

Java 2 ME は大きく 2 つに分けることができ、それぞれ Connected Device Configuration (CDC)、Connected Limited Device Configuration (CLDC) と呼ばれます。Configuration というのは想定する機器向けに VM や最低限のライブラリなどを取り決めたものです。CDC は Set Top Box のようにネットワークにつながることができ、比較的メモリーなどのリソースに制限のないデバイス向けの Configuration で、CLDC は同じようにネットワークに接続はできるのですが、携帯電話のようにリソースに制限のあるデバイス向けの Configuration です。

それぞれの VM は CDC がJava 2 SE と同じ JVM、CLDC が KVM となります。ただし、CDC で使用される JVM はJIT や HotSpot は利用しないインタプリタであり、ライブラリの選択などができるなどの特徴があります。

Configuration の上にもう少し具体的なデバイスに関する API を決めた Profile があります。たとえば、Profile には TV Profile、携帯機器向けの MIDP (Mobile Interface Device Profile) などがあります。以前は Personal Java と呼ばれていたものは、Personal Profile となっています。Java 2 Platform 全体を示したのが下の図です。今年の JavaOne ではやはり CLDC、その中でも特に MIDP が大きく取り上げられていたようです。

Java 2 Platform 全体図
(TS-1413 Techincal Overview of the K Virtual Machine And the Connected Limited Device Configuration 発表資料より抜粋)


その他に組み込み向けで目立っていたのがリアルタイム処理への拡張に関してです。以下では CLDC とリアルタイム処理に関して実際にセッションで説明されたものを基に簡単に解説していきたいと思います。

 

 
  CLDC と KVM  
 

CLDC は携帯電話などがターゲットとなっていますが、その他に想定しているデバイスとしては次のようなものがあります。

  • Device control (e.g., vending machines, engines, sensors, routers)
  • Home appliances
  • Mobile audio and video equipment
  • Bar code scanners/inventory control devices
  • Point-of-sale terminal

CLDC には携帯電話や PDE のイメージが大きいのですが、ターゲットの中には産業用のデバイスも含まれていることがわかります。CLDC は JCP の JSR-30 で標準化活動がなされており、メンバの中には NTT Docomo や Motorola、Siemens などがいます。現在は仕様書のファイナルリリースおよびリファレンスインプリメンテーションが Sun のサイトからダウンロードできます。リファレンスインプリメンテーションは Windows と Solaris および PalmOS 版があります。

JSR-30 仕様書ダウンロードページ
http://java.sun.com/aboutJava/communityprocess/final/jsr030/index.html

JSR-30 Reference Implementation
http://www.sun.com/software/communitysource/j2me/

以下ではカンファレンスの TS-1413 Techincal Overview of the K Virtual Machine And the Connected Limited Device Configuration と TS-1507 Inside the K Virtual Machine の 2 つのセッションを基に説明を行いたいと思います。

まず、CLDC のターゲットとしているデバイスの条件を次に示します。

  • Java に使用できるメモリが 160 〜 512 KB
  • ネットワークに接続するときのバンド幅が狭い
  • Java の VM とライブラリをあわせたサイズが 128KB 以下

このようにリソースにかなり制限があるため、CLDC では必要最小限のライブラリしかサポートしていません。サポートしているのは

  • Virtual Machine
  • 入出力
  • ネットワーキング
  • セキュリティ
  • 国際化

サポートしていないものにはユーザインタフェースやイベント処理、データベースなどがあり、これらは MIDP などのプロファイルで扱われることになっています。

まず、CLDC の VM である KVM について見てみましょう。KVM はサイズを小さくするためにさまざまな処理を省略しています。たとえば、JNI、リフレクション、スレッドグループなどがあります。もちろん、JIT や HotSpot は使われていません。また、ユーザが定義したクラスローダは使うことができませんし、例外処理やセキュリティも限定されたものになっています。これらの制限を行うことで VM のサイズを 40〜80KB に抑えることができました。

KVM の GC は基本的には Mark and Sweep 方式で行われますが、少ないヒープ量に最適化されています。しかし、インクリメンタルな処理などは行われていません。

もちろん KVM でもスレッドは使用することはできます。スレッドはプラットフォームに非依存な Green thread でインプリされています。このため KVM の移植性は高いのですが、反面スレッドの切り替えなどの処理速度は遅くなってしまっているようです。

セキュリティに関するものの中に、クラスのベリファイがあります。KVM では通常の JVM とは異なり 2 pass 方式のクラスベリファイを行うようになっています。まず、ソースファイルをコンパイルした後にすぐにプリベリファイを行います。この 1 pass 目のベリファイは KVM では行われません。その後、実際にクラスがダウンロードされたときに KVM 上でもう一度ベリファイを行います。こうすることで、 ランタイム時にベリファイに必要な処理時間やメモリを減らすことができます。ただし、プリベリファイを行うことでクラスファイルが若干大きくなってしまうという欠点もあります。

それでは、次に CLDC のライブラリについて見ていきましょう。

CLDC で提供されるライブラリは jara.lang, java.io, java.util パッケージの中の一部のクラスになります。また、それ以外に javax.micoroedition.io パッケージが提供されます。java.lang パッケージで提供されるクラスを次に示します。

Object Class Runtime System
Thread Runnable String StringBuffer
Throwable Math Boolean Byte
Short Integer Long Character


java.io パッケージで提供されるクラスは

InputStream OutputStream DataInput DataOutput
Reader Writer ByteArrayInputStream ByteArrayOutputStream
DataInputStream DataOutputStream InputStreamReader OutputStreamReader
PrintStream      


java.util パッケージは

Calendar Date TimeZone Vector
Stack Hashtable Enumeration Random


J2SE の java.lang パッケージでは 34 のクラス (インタフェースを含む) が定義されていますので、約半分のクラスしか CLDC では使えないことになります。java.util パッケージに至っては時間とコレクションに関するものだけになっています。これしかクラスがないとどうやってアプリケーションを作ればいいか途方にくれてしまうようですが、Configuration では必要最小限のライブラリしか定義していないためこのようになっているようです。これ以外にたとえばユーザインタフェースに関する API などは Profile で定義されます。

また、CLDC ではネットワークに接続可能なデバイスがターゲットになっているはずなのですが、java.net パッケージは使用することができません。これは J2SE のネットワーキングクラスがかなり大きくなってしまっているため、CLDC がターゲットにしているデバイスには使用できないためのようです。その代わりに、javax.microedition.io パッケージが導入されています。このパッケージで定義される Connector クラスで HTTP やソケットさらにはシリアルポートやファイルまで扱うことが可能になります。実際にこれらのプロトコルの処理をどのように実現するかは CLDC には定義されていません。しかし、リファレンスインプリメンテーションにはポーティング例として HTTP やソケットのインプリメンテーションなどが含まれているようです。

さらに、オプションで Java Application Manager (JAM) というのが規定されています。JAM を利用すれば携帯電話などのブラウザを利用して Java のアプリケーションをダウンロードすることができます。さらに、アプリケーションのインストール、起動、削除などのマネージを行うことが可能になります。

 

 
  Real-Time Java  
 

産業用途に Java を使用する時に避けて通れない話題の一つがリアルタイム処理であると思います。今年の JavaOne ではこのリアルタイム処理に関して大きく進歩した年ではないでしょうか。リアルタイム処理は JCP の JSR-1 で議論されており、スペックリーダは IBM の Greg Bollella 氏です。また、Sun からは James Gosling 氏が参加しています。最近、Gosling 氏はリアルタイム拡張だけに専念しているそうです。JSR-1 の現在の状況は仕様書のパブリックレビューが終わり、最終的な仕様書が完成したところです。この仕様書は JCP のサイトからダウンロードできますが、書籍にもまとめられています。

JSR-1 仕様書ダウンロードページ
http://java.sun.com/aboutJava/communityprocess/first/jsr001/index.html

仕様書 (書籍)
"The Real-Time Specification for Java," Bollella, et al., Addison Wesley, ISBN 0-201-70323-8
http://java.sun.com/docs/books/realtime/

リアルタイム拡張のセッションはパネルの BUS-1132 The Future of Java Technology in Embedded and Real-time System Design と、技術的な内容である TS-1122 Java Technology for Real-time Systems の 2 つがありました。ここでは TS-1122 に沿って説明したいと思います。

まず、このセッションが行われる部屋に入ってびっくりしたのが、Gosling 氏が壇上にいたことでした。前述したように Gosling 氏はリアルタイム拡張に専念しているそうですが、まさかセッションにあらわれるとは思っても見ませんでした。筆者は今回で JavaOne に 3 回参加していますが、キーノート以外のセッションに Gosling 氏が登場したのを見たのは初めてです。Gosling 氏は JSR-1 の過去の経緯や現在の状況などを説明しただけで後を Bollella 氏に譲りましたが、それでもインパクトは大きかったです。

セッションの様子。右側から James Gosling (Sun), Vicki Shipkowitz (Sun), David Hardin (aJile), Greg Bollella (IBM) (敬称略) 壇上で説明を行う Gosling 氏

それではリアルタイム拡張に関して説明して行きましょう。

Java のリアルタイム拡張は国家機関である The National Institute of Standards and Technology (NIST) からの要求事項をベースに議論されています。リアルタイム拡張の基本的な原則には次のようなものがあります。

  • バックワードコンパチビリティ
  • どのような Java Platform で動作させることができる
  • Write Once Carefully, Run Anywhere Conditionally (Write Once, Run Anywhere とは異なる)
  • 予測可能な実行
  • 文法の拡張は行わない
  • インプリメンテーションにおけるトレードオフを認める

このような原則に基づいてセッションでは次に示すトピックについて説明が行われました。

  • スケジューリング
  • メモリマネージメント
  • 同期
  • 非同期のイベントハンドリング
  • 非同期のコントロール切り替え
  • 非同期のスレッド終了
  • 物理メモリへのアクセス

スケジューリングには Schedule というクラスが導入されています。Schedule によってスケジューリングされるオブジェクトは Schedulable インタフェースをインプリメントする必要があります。リアルタイム処理を行う RealtimeThread クラスなどが Schedulable インタフェースをインプリメントしています。RealtimeThread の優先度は少なくとも 28 レベルあります。

メモリマネージメントではオブジェクトのライフサイクルなどが定義されています。GC されないオブジェクトなどを扱うために Immotal Memory Area をヒープ以外に設けています。このためヒープに対する GC に関しては JSR-1 ではほとんど議論されていないようです。

リアルタイム処理には直接関係ないのですが、物理メモリへのアクセスに関しても JSR-1 で議論されています。通常 Java では直接ハードウェアにアクセスすることはできませんが、リアルタイム処理が必要な分野ではハードウェアにアクセスすることは不可欠です。そこで物理メモリにアクセスするための専用のクラスが導入されています。

セッションでは実際のコード例も解説されるなど、具体的なプログラムのイメージがつかみやすくなっています。仕様書は公開されましたが、リファレンスインプリメンテーションはまだ公開されていません。リファレンスインプリメンテーションのαバージョンが 2000 年 6 月公開予定で、ベータは 2000 年の第 4 四半期の予定になっています。

 

 
  JIM: Web-based Industrial Monitoring Framework  
 

Java コンソーシアムの工業応用部会では Java をベースにした監視システム JIM の標準化活動を行っております。今年の 2 月にパブリックレビューを開始し、それと同時に JCP でも標準化を開始しています (JSR-49)。今年の JavaOne ではその成果を BOF (Birds-of-a-Feather) セッションで発表しました。セッションははじめに工業応用部会のリーダである山武 橋向氏から工業応用部会や JCP の活動に関して全般的な説明をし、山武 西氏がその後を引継ぎデモを交えながら技術的な内容の説明を加えました。JIM の内容についてはここでは触れませんが、FAのための Java 活用サイトにある技術情報の橋向氏の解説を参照していただきたいと思います。

まだ産業用途への Java の応用に関して注目度が低いなどの理由からか、残念ながらセッションに参加された方は多くはありませんでした。しかし、参加者は問題意識をもって参加された方が多く、セッション後の質疑応答ではいろいろな議論を行う事ができたと思います。

セッションの様子。説明を行っているのは山武 西氏 参加者からの質問に答える山武 橋向氏

 

 
  おわりに  
 

今年の JavaOne でもやはり J2EE に関するセッションはにぎわっていました。それ以外では Jini のセッションが増えていることが顕著でした。その中でも Sun 以外の企業の発表が多くあり、これは Jini がさまざまな企業で取りあげられていることを示しているのだと思います。なかなか Jini の使用した製品は市場に出てきませんが、着々と進歩しているのではないでしょうか。

その他にも Java のパフォーマンスやプログラミング技術に関するセッションが多くありました。どのようにコードを記述すればパフォーマンスよく実行できるか、効果的なスレッドの使い方、どのようにチューニングを行うかなどのセッションが行われました。Java の新しい機能についてのセッションも人気があるようです。筆者は JDK 1.3 で導入された Dynamic Proxy に関するセッションを聴講しましたが、満席状態で通路に座ってみている人もいたぐらいでした。

筆者にとって最も興味深かったセッションは Mrtin Fowler 氏による Refactoring のセッションでした。Fowler 氏はアナリシスパターンや Refactoring など最近活躍している人ですが、その人気を示すかのように会場は満席、座っている人がかなりいるほどでした。セッションもとてもおもしろく、2 時間と通常のセッションより長かったのですが、長さを感じさせないほどでした。

JavaOne にはカンファレンス以外に多くの BOF が開催されます。BOF は朝 6:00 から夜中の 12:00 まで行われます (通常のセッションの時間帯は除かれています)。BOF でも、やはり J2EE は人気のようでした。また、Meet the XXX Team と題したセッションもあります。XXX の部分には Core Library とか Swing などのようにライブラリやツールの名前が入ります。ようするに Sun でこれらのライブラリやツールを担当している人たちが壇上にあがり、時間の大半を聴講者からの Q&A を行うわけです。夜中でも熱心にこれらの BOF に参加する人たちが少なからずいることが驚きでもあります (筆者も参加していましたが....)。

今年の JavaOne を降りかえってみると、サーバ側からクライアント側に Java をもう一度引き戻したいという Sun のメッセージがあったのではないかと筆者は感じます。たとえば、Steve Jobs 氏がキーノートで登場し、Mac OS X での J2SDK1.3 が標準添付を発表した事などに、この意図があるのではないでしょうか。さらに進んで、PDA や携帯電話などの組み込みデバイスにも Java が使われるのは当たり前の状況になってきています。そんな Sun の意図 (筆者が思っているだけですが) も関係なく、サーバ側での Java ははな盛りの状況を呈しています。

今後、Java がどのように変遷して行くかは分かりませんが、少なくとも JavaOne に参加している各国の技術者の Java に対する熱意を見ていると、まだまだ Java は伸びていくのではないかと感じました。

 

 
 

Bullet JavaおよびJavaに関する商標は、米国Sun Microsystems社の登録商標または商標です。

 
  最初のページに戻る