jvm 原生方法(JNI)总是被编译的吗?

kyks70gy  于 6个月前  发布在  其他
关注(0)|答案(1)|浏览(45)

这里我注意到当native方法被调用时,会生成一个 Package 器。然而,这个 Package 器似乎只在方法被编译时才生成。所以,我的问题是:native方法可以被解释,而不是编译(从java的Angular 来看)吗?

smdncfj3

smdncfj31#

原生方法可以被解释而不被编译吗(从java的Angular 来看)?
是的,例如,请参阅此处生成解释器存根的位置(在TemplateInterpreterGenerator::generate_native_entry中):https://github.com/openjdk/jdk/blob/01c0d5dd0a4f7587288219bad8ed4648f4e456ce/src/hotspot/cpu/x86/templateInterpreterGenerator_x86.cpp#L793
编译存根和解释存根之间的主要区别在于,解释存根处理 * 所有 * 解释本机调用(好吧,有两个存根:一个用于synchronized方法,一个用于常规方法),而编译 Package 器只专门用于一个方法。
对于解释器存根,不同的参数和返回类型通过对“签名处理程序”和“结果处理程序”的离线调用来处理。

相关问题