本地方法(JNI)总是被编译吗?

问题描述 投票:0回答:1

我注意到here,当调用本机方法时,会生成一个包装器。然而,这个包装器似乎仅在编译该方法时生成。所以,我的问题是: 本地方法可以被解释而不是被编译吗(从java角度)?

java jvm java-native-interface
1个回答
0
投票

本机方法可以被解释而不是编译(从java角度来看)吗?

是的,参见例如这里生成解释器存根(在

TemplateInterpreterGenerator::generate_native_entry
中):https://github.com/openjdk/jdk/blob/01c0d5dd0a4f7587288219bad8ed4648f4e456ce/src/hotspot/cpu/x86/templateInterpreterGenerator_x86.cpp#L793

编译的存根和解释的存根之间的主要区别在于,解释器存根处理所有解释的本机调用(嗯,有 2 个存根:一个用于

synchronized
方法,一个用于常规方法),而编译的包装器是专门针对一种方法。

对于解释器存根,不同的参数和返回类型通过对“签名处理程序”和“结果处理程序”的外部调用进行处理。

© www.soinside.com 2019 - 2024. All rights reserved.