プロが教えるわが家の防犯対策術!

JVM(Java仮想マシン)の動作原理を教えて下さい。
Javaバイトコードとして定義される命令セットを見たところ、比較的単純な命令しかありません。

Swingライブラリのようにウィンドウ表示などの環境に依存するプログラムがバイトコードでどのように表現されているのか教えて下さい。
つまり、Swingライブラリを使う側のバイトコードではなく、Swingライブラリ側のバイトコードはどのようになっているのでしょうか?
(Swingに限らず、環境に依存する部分のバイトコードの表現がどのようになっているかを知りたいのです。)

A 回答 (3件)

invokeinterface, invokespecial, invokestatic, invokevirtualのいずれもネイティブメソッドを呼べます。


ANo.2の方が既に書いているとおり、メソッドを呼ぶ側では呼び先がネイティブメソッドなのか普通のJavaのメソッドなのかを区別しません。だから、メソッドを呼ぶためのバイトコードはネイティブメソッドを呼ぶ場合も普通のJavaのメソッドを呼ぶ場合も同じです。
    • good
    • 0
この回答へのお礼

わかりました。ありがとうございます!

お礼日時:2010/07/01 08:57

クラスファイルのレベルでは, ネイティブメソッドは「ネイティブフラグが立っている (従ってそのクラスファイルでは定義されていない)」メソッドでしかありません.


なので, メソッドを呼び出すどの命令によってもネイティブメソッドを呼び出すことができるはず.
    • good
    • 0
この回答へのお礼

わかりました。ありがとうございます!

お礼日時:2010/07/01 08:56

Javaにはネイティブメソッドというものがあって、CやC++で書かれた関数をJavaのプログラムから呼ぶことができます。


グラフィクスでもファイルアクセスでも、最終的にはネイティブメソッドを呼ぶことで環境依存部分を実装しています。

この回答への補足

ネイティブメソッド自体は機械語に翻訳されるのでしょう。(C/C++で記述されれば、C/C++コンパイラでコンパイルされ、通常のオブジェクトが生成されるのでしょう。)

そのネイティブメソッドを呼び出し(Java側)は、バイトコード上はどのように表現されるのでしょうか?

具体的なオペコードは何でしょうか?
(invokevirtual, invokespecial, invokestatic,invokeinterfaceのいずれかですか?)

補足日時:2010/06/28 01:00
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!