当调用本地代码时,JVM是否会停止?

6

当从Java的字节码中调用机器码时是否会有性能影响?由于机器码是"非托管"的,它不"知道"Java的内部情况,这可能会导致JVM的内部调度程序暂停或类似的问题吗?

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

我知道在Erlang中存在这个问题,其中VM在调用机器码时基本上会停止。我希望这在Java中不是这种情况。是吗?


请参见 https://dev59.com/t0nSa4cB1Zd3GeqPMUFk。 - Ankit Tripathi
你的实际需求是什么?是否必须包括调用本地调用? - Ankit Tripathi
我正在编写一个调用用C语言编写的库的应用程序。 我需要知道,如果我的C代码像在Erlang中那样停止VM。 - akonsu
“halt”是什么意思?它会停止当前线程吗?当然会,它会停止JVM的其余部分吗?(几乎)绝对不会。 - Mark Rotteveel
我希望人们在投票将问题关闭为重复之前先阅读问题。 - akonsu
显示剩余5条评论
1个回答

12

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

JNI方法被调用时,Java线程会立即切换到_thread_in_native状态。在这种状态下的线程在安全点操作期间不被计数,也就是说,在发生停止JVM的事件(例如垃圾回收)时,JVM不会停止这些线程。相反,未执行JNI upcall的本地状态线程无法停止JVM。当本地方法返回时,线程切换回_thread_in_Java状态。


太好了!在谷歌搜索中没有找到这种类型的信息。 - Ravindra babu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接