反射的开销大是重要的缺点

首先是method.invoke,其实是委托给MethodAccessor来处理的,MethodAccessor是一个接口,可以通过本地方法来反射调用,或者进行委派

在使用Method.invoke时候,先进入了委派实现,在进入了本地实现

为何使用了一个中间层,是因为还有一种动态生成字节码的实现,在反射调用到达一定次数和后,JVM会将其动态编译为字节码,将委派实现的委派对象切换为动态实现,这个过程称为Inflation

而在方法的反射调用中,可能占据大量性能开销的是,变长参数方法导致的Object数组,基本类型的自动拆装箱,以及方法内联.

发表评论

邮箱地址不会被公开。 必填项已用*标注