Java反射真的慢吗?
你是否听到人们说“Java反射太慢了”或“使用反射刚刚降低了性能”,但我还没有听到任何确切的数字。不如我们做些测试来了解真实情况。 下面我编写了一些示例代码来对典型的Java方法调用与基于反射的方法调用进行比较。结果正是我对JVM的期望。任何可优化的函数(比如返回一个常量,或者一个只依赖于输入的方法,或者像交换内存中的整数这样的简单操作)都会因为在方法中执行的工作太快而出现明显的减速。但是,当该方
你是否听到人们说“Java反射太慢了”或“使用反射刚刚降低了性能”,但我还没有听到任何确切的数字。不如我们做些测试来了解真实情况。 下面我编写了一些示例代码来对典型的Java方法调用与基于反射的方法调用进行比较。结果正是我对JVM的期望。任何可优化的函数(比如返回一个常量,或者一个只依赖于输入的方法,或者像交换内存中的整数这样的简单操作)都会因为在方法中执行的工作太快而出现明显的减速。但是,当该方
invokedynamic 字节码指令是用来避免非常慢的反射的技术的实现者。简而言之,invokedynamic(或“indy”)是java7中引入的最伟大的东西,目的是为通过动态方法调用在JVM之上实现动态语言铺平道路。后来它还允许java8中的lambda表达式和方法引用以及java9中的字符串连接从中受益。 简而言之,下面我将利用lambdametfactory和MethodHandle来动