本地方法(JNI)是否始终会被编译?能否仅以解释模式运行?
native方法能否以解释模式执行?
可以,native方法完全不需要被JIT编译就能在解释模式下正常执行。
- 解释器调用native方法有专门的处理路径:HotSpot虚拟机的解释器遇到native方法调用时,会使用预先生成的解释器native调用存根来完成一系列底层操作——包括Java栈与本地栈的切换、参数传递、调用对应的本地函数,执行完成后再切换回Java执行环境。
- 你提到的编译时生成的包装器,是JIT编译器为已编译的Java方法调用native方法生成的优化版本,属于JIT编译路径下的产物,和解释器的执行流程没有关系。
- 实际验证:你可以用
-Xint参数强制JVM以纯解释模式运行,此时所有方法都不会被JIT编译,但像System.currentTimeMillis()这类native方法依然能正常调用执行。
内容的提问来源于stack exchange,提问作者hololensen
相关产品推荐
相关产品推荐

