ホーム > デベロッパ > BREW FAQ

BREW FAQ : BREW と Java の違いは?

BREW と Java の違いは?

BREW は QUALCOMM 社が開発した REX ( Real-Time Executive ) と呼ばれる RTOS ( Real-Time Operating System ) 上のミドルウェアです。

最近では、BREWそのものがOSへと進化を遂げようとしています。一方、Javaは仮想マシン( Virtual Machine )、Java 言語、Java API という、OSに依存しない統合的なソフト環境です。

全体的な BREW と携帯 Java の違いをまとめます。

BREW携帯 Java
動作環境AEEJava仮想マシン
OSREXOSに依存しない
APIBREW APIJava API
記述言語C/C++Java言語

Java はインタプリタなので、BREW よりも同じ処理に時間を多く要します。BREW の場合、ハード資源に乏しい端末でも C/C++ で記述された高機能なアプリが高速に動作します。

プログラマの視点からの BREW と携帯 Java の違いをまとめます。

BREW携帯 Java
メモリ管理メモリ管理を意識 不要(ガーベージコレクション)
文字列処理独自に実装文字列クラス
データ管理独自に実装豊富なコレクションクラス
スレッドコオペラティブ /
シングルスレッド
プリエンプティブ /
マルチスレッド
ネットワーク非同期通信同期通信
イベントハンドリング手動自動

Java にはガーベッジコレクションという便利な機能があります。BREW ではプログラマがメモリを管理しなければいけません。

BREW では1つのコオペレイティブなスレッドしか利用できません。つまり、1つのスレッドが CPU を占有できません。例えば、ネットワークプログラミングではこの点を注意してください。

Java アプリでは HTTP 通信を行う場合、データがすべて読み込めるまで while 文や for 文を使った繰り返し処理を用いて記述できました。BREW では通信はすべてコールバックで扱います。データがある程度受信できた時点で突然システム側からデータが読み込めたという通知が来るわけです。この場合、while 文や for 文で処理できません。通信のコンテキストを自分で管理しなくてはいけません。

BREW の場合、メモリ管理の観点から文字列処理も面倒です。データ構造を扱うコレクションクラスも存在しません。独自にデータ構造を定義しなければいけません。ひとつの解決策は文字列処理やコレクションなどのライブラリが用意された C++ を採用が考えられます。

Java は sandbox によって危険なコードが実行されません。ネットワークは HTTP/HTTPS 通信だけです。BREW ではハードを直接制御することもできれば TCP/IP 通信もできます。 BREW では QUALCOMM 社の認証によってセキュリティが保たれます。

その他の一般的な BREW と携帯 Java の違いをまとめます。

BREW携帯 Java
起動速度速い遅い(端末のコストで比較)
実行速度速い遅い(端末のコストで比較)
プログラム署名必要不要 ( vodafone では必要 )
セキュリティ署名認証sandbox
通信TCP/IP・UDP(任意)TCP/IP ( HTTP/HTTPS のみ)
勝手アプリ不可能可能

BREW のほうが携帯 Java よりも高機能に見えますが、実は BREW の機能の多くは携帯 Java にも搭載可能です。

ただ、BREW は C/C++/アセンブラ … とプログラミング言語を選ばない点で汎用性が高いと言えます。

実際のところ、BREW 上に Java VM を実装すれば Java 言語でプログラミングすることすら可能です。

また、C/C++/アセンブラ … という言語で記述されたプログラムは Java よりもプログラミングは複雑になりますが、速度面やハードを柔軟に扱えるという点で優れています。