调用本机代码时JVM是否会停止?

时间:2016-08-29 14:46:43

标签: java jvm

从Java的字节码调用机器代码时是否有任何性能影响?由于机器代码是“非托管”的,并且它没有“意识到”Java的内部结构,这可能导致JVM的内部调度程序暂停或类似的东西?

我是Java的新手,所以也许这甚至不相关,请帮忙。

我知道在Erlang中他们遇到了这个问题,VM在调用机器代码时基本停止了。我希望Java不是这种情况。是吗?

1 个答案:

答案 0 :(得分:8)

运行本机代码的线程不会停止JVM。

一旦调用JNI方法,Java线程就会切换到_thread_in_native状态。在安全点操作期间不计算处于此状态的线程,即当发生stop-the-world事件时(如垃圾收集),JVM不会停止这些线程。相反,本机状态的线程无法阻止JVM,除非它们执行JNI上行调用。当本机方法返回时,线程切换回_thread_in_Java状态。