- PR -

JNIについて

1
投稿者投稿内容
フライト
ベテラン
会議室デビュー日: 2005/03/11
投稿数: 63
お住まい・勤務地: 津田沼・東京
投稿日時: 2006-06-12 15:56
同僚のjavaの初心者の人からJNIってどんな時に使われるのですか?
という質問を受けて、私は下記のように返しました。

C言語で書かれた既に作成されたモジュールと、
javaで作成されたモジュールを結合するのに使用されます。

その後、「もし新規プロジェクトで最初からシステムを構築するのに
javaとC言語とわざわざ使用する言語を変えてモジュールを作成するような
設計を行う事があるのでしょうか?」という質問を受けました。
またj「avaでは出来て、C言語は出来るみたいな物はあるのでしょうか?」
という質問も・・・

私は既に作成されたモジュールを有効利用するケースでしか、JNIを使用した
経験がなく、またC言語についても知識がほとんど無く、上記質問に関して
答えを返す事が出来ませんでした。

そういった部分を意識してなかったのが恥かしい思いです。

プラットフォームが同じで、javaとC言語の使い分ける設計についての
有効性について教えてください。
想馬
大ベテラン
会議室デビュー日: 2003/05/29
投稿数: 245
お住まい・勤務地: 神奈川・東京
投稿日時: 2006-06-12 16:19
JNIは殆ど使ったことがありませんが、使う箇所といったらOSネイティブな処理や速度の必要なマルチメディア関連の処理とかではないでしょうか。
あと結合と書かれていますけどどちらかと言えば動的リンクになると思います。実際、実行する場合はclassファイルと参照するDLLが必要になるので。

あとやったことはないですけどDelphiで作成したDLLも使えるような説明をどこかで見た記憶があります。
_________________
己への戒め

「活動的な馬鹿より恐ろしいものはない」 by ゲーテ
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2006-06-12 16:28
 JavaでなぜJNIを使ってC言語等他の言語で書かれたモジュールを呼ぶ必要があるのか?
それは、Javaには出来ない事があるからです。
出来ない事とは、OS特有の機能を使う場合や、ハードウェアに関する処理を行うとかです。
これは、JavaのアプリケーションプログラムがJavaVM上で動作することが、
理解できているなら、解るはずです。

 JNIを使用すると、Javaの基本理念である「Write Once,Run AnyWhere」が崩れるので、
JNIを使用するような設計は避けるべきです。
JNIを使用するのは、原則として、Javaでは出来ないことを、実現する必要がある場合だけです。
フライト
ベテラン
会議室デビュー日: 2005/03/11
投稿数: 63
お住まい・勤務地: 津田沼・東京
投稿日時: 2006-06-12 16:41
想馬さん、takuさん、ありがとうございました。

大変よく分かりました。

ちいにぃ
大ベテラン
会議室デビュー日: 2002/05/28
投稿数: 244
投稿日時: 2006-06-12 16:50
ちょっと別の観点から。

Javaのライブラリ自身も、JNIを使っている箇所があります。
どのような場面で使われているかざっと見てみると、JNIを使うべき勘所がわかるかと思います。

以下は Windows (32bit, x86) の jdk1.5.0_07 付属のsrc.zipを展開し、
ライブラリのソースコードからnativeを検索してみました。

Cygwinのfind,grepでざっと検索してるので、実際に使われてる数より多めに出ているようですが、
427個のクラスで、1892箇所で使用されています。


$ ls
com/ java/ javax/ launcher/ org/ sunw/

$ find . -type f -name '*.java' | xargs grep -l native | wc -l
427

$ find . -type f -name '*.java' | xargs grep native | wc -l
1892
1

スキルアップ/キャリアアップ(JOB@IT)