从Java的字节码调用机器代码时是否有任何性能影响?由于机器代码是“非托管”的,并且它没有“意识到”Java的内部结构,这可能导致JVM的内部调度程序暂停或类似的东西?
我是Java的新手,所以也许这甚至不相关,请帮忙。
我知道在Erlang中他们遇到了这个问题,VM在调用机器代码时基本停止了。我希望Java不是这种情况。是吗?
答案 0 :(得分:8)
运行本机代码的线程不会停止JVM。
一旦调用JNI方法,Java线程就会切换到_thread_in_native
状态。在安全点操作期间不计算处于此状态的线程,即当发生stop-the-world事件时(如垃圾收集),JVM不会停止这些线程。相反,本机状态的线程无法阻止JVM,除非它们执行JNI上行调用。当本机方法返回时,线程切换回_thread_in_Java
状态。