java反射的实现原理
作者:bin实现原理:
反射的Method类的invoke方法实际上是走的MethodAccessorImpl的invoke方法
1.MethodAccessorImpl对象对开始初始化时,用的是包含类NativeMethodAccessorImpl的DelegatingMethodAccessorImpl对象
2.所以最开始调用时实际上时调用类
NativeMethodAccessorImpl.invoke的方法
private static native Object invoke0(Method var0, Object var1, Object[] var2);
3.然后达到阈值后,new一个新的
MethodAccessorGenerator对象替换DelegatingMethodAccessorImpl中的NativeMethodAccessorImpl
为什么有2个版本?
所以MethodAccessor实现有2个版本,一个是java版本,一个是本地方法的native版本。
native版本:开始启动时运行快,但随着时间变长运行速度变慢。
java版本:启动慢,随着运行时间变长速度变快。