2016-08-29 7 views
4

Javaのバイトコードからマシンコードを呼び出すときにパフォーマンスに何か影響はありますか?マシンコードは「アンマネージド」なので、Javaの内部構造を「認識」していないため、JVMの内部スケジューラが一時停止することがありますか?ネイティブコードを呼び出すときにJVMが停止しますか?

私はJavaを初めて使っています。多分これは関連性がないかもしれません、助けてください。

Erlangには、マシンコードの呼び出し中にVMが基本的に停止するこの問題があります。私はこれがJavaの場合ではないことを願っています。それは...ですか?

+0

http://stackoverflow.com/questions/1393937/disadvantages-of-using-java-native-interface同様に –

+0

コメントをいただきありがとうございます。 JNIの呼び出しが遅いという問題は一度も言及していません。私は別のものを求めていました... – akonsu

+0

あなたの実際の要件は何ですか?それは必然的にネイティブコールを呼び出すことを含みますか? –

答えて

7

ネイティブコードを実行するスレッドはJVMを停止しません。

JNIメソッドが呼び出されるとすぐに、Javaスレッドは_thread_in_native状態に切り替わります。この状態のスレッドは、セーフポイント操作中にカウントされません。つまりガベージコレクションなどの世界的なイベントが発生すると、JVMはこれらのスレッドを停止しません。逆に、ネイティブ状態のスレッドは、JNI upcallを実行しない限り、JVMを停止できません。ネイティブメソッドが返ってくると、スレッドは_thread_in_Javaの状態に戻ります。

+0

優秀!グーグルでこの種の情報を取得していませんでした。 –

関連する問題