当从Java的字节码中调用机器码时是否会有性能影响?由于机器码是"非托管"的,它不"知道"Java的内部情况,这可能会导致JVM的内部调度程序暂停或类似的问题吗?
我是Java的新手,所以也许这甚至不相关,请帮忙。
我知道在Erlang中存在这个问题,其中VM在调用机器码时基本上会停止。我希望这在Java中不是这种情况。是吗?
当从Java的字节码中调用机器码时是否会有性能影响?由于机器码是"非托管"的,它不"知道"Java的内部情况,这可能会导致JVM的内部调度程序暂停或类似的问题吗?
我是Java的新手,所以也许这甚至不相关,请帮忙。
我知道在Erlang中存在这个问题,其中VM在调用机器码时基本上会停止。我希望这在Java中不是这种情况。是吗?
运行本地代码的线程不会停止JVM。
JNI方法被调用时,Java线程会立即切换到_thread_in_native
状态。在这种状态下的线程在安全点操作期间不被计数,也就是说,在发生停止JVM的事件(例如垃圾回收)时,JVM不会停止这些线程。相反,未执行JNI upcall的本地状态线程无法停止JVM。当本地方法返回时,线程切换回_thread_in_Java
状态。