最近我在阅读JDK 19(JDK 8,11,12的反射代码好像没变,所以任何版本都可以)关于反射的源代码.关键要像这样在C++类reflection.cpp
中得到类Reflection::invoke_method
的方法:
oop mirror = java_lang_reflect_Method::clazz(method_mirror);
获取类示例,如下所示:
InstanceKlass* klass = InstanceKlass::cast(java_lang_Class::as_Klass(mirror));
我发现本地代码通过使用JNI来调用java类来获得类。为什么要使用本地代码来实现反射?本地代码实现反射的优势是什么?我在谷歌上搜索了一下,发现没有人谈论这个。
PS:我也读过反射可以用bytecode通过Java实现。
1条答案
按热度按时间v440hwme1#
其实JVM团队已经告诉你答案了,从
ReflectionFactory.java
里的注解中,这个注解是这样的:这就是为什么我们需要本机反射。