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