只是一个简单的问题,而不是“我需要帮助!”更多的是为了满足我的好奇心:)
我们已经编写了自己的定制jackson Json序列化和反序列化器,它使用反射来序列化/反序列化对象。例如,对于序列化程序,它将使用Introspector.getBeanInfo()查找对象的属性,获取当前对象字段的PropertyDescriptor,并在需要时调用读或写方法来获取和设置值。
起初,这需要相当长的时间(250到500毫秒),但是在多次调用序列化程序之后,我们注意到这会急剧下降到25到50毫秒左右。从互联网的角度来看,从我能收集到的数据来看,JVM可以优化反射,但是它是如何做到的呢?实际上,它是否跟踪每个调用以获取读或写方法,并计算字节码,从而跳过反射部分?
发布于 2013-12-22 17:26:45
反射方法调用在特定方法的16次调用(默认膨胀阈值)后得到优化。优化版本依赖于生成的字节码,这意味着基本上不再涉及反射。
但是,该优化只涉及在已知的invoke
实例上调用Method
的开销,而使用反射的大部分开销来自成员查找。这个方面肯定会从JIT编译中受益,在默认情况下,这种编译会在10,000次通过同一段代码之后发生。
通过缓存Method
实例,也可以在Jackson本身中进行查找优化。
发布于 2013-12-22 17:24:41
https://stackoverflow.com/questions/20731952
复制相似问题