首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java 7和反射-它是否优化了自己?

Java 7和反射-它是否优化了自己?
EN

Stack Overflow用户
提问于 2013-12-22 17:19:59
回答 2查看 345关注 0票数 0

只是一个简单的问题,而不是“我需要帮助!”更多的是为了满足我的好奇心:)

我们已经编写了自己的定制jackson Json序列化和反序列化器,它使用反射来序列化/反序列化对象。例如,对于序列化程序,它将使用Introspector.getBeanInfo()查找对象的属性,获取当前对象字段的PropertyDescriptor,并在需要时调用读或写方法来获取和设置值。

起初,这需要相当长的时间(250到500毫秒),但是在多次调用序列化程序之后,我们注意到这会急剧下降到25到50毫秒左右。从互联网的角度来看,从我能收集到的数据来看,JVM可以优化反射,但是它是如何做到的呢?实际上,它是否跟踪每个调用以获取读或写方法,并计算字节码,从而跳过反射部分?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-22 17:26:45

反射方法调用在特定方法的16次调用(默认膨胀阈值)后得到优化。优化版本依赖于生成的字节码,这意味着基本上不再涉及反射。

但是,该优化只涉及在已知的invoke实例上调用Method的开销,而使用反射的大部分开销来自成员查找。这个方面肯定会从JIT编译中受益,在默认情况下,这种编译会在10,000次通过同一段代码之后发生。

通过缓存Method实例,也可以在Jackson本身中进行查找优化。

票数 3
EN

Stack Overflow用户

发布于 2013-12-22 17:24:41

请看我的回答:

Java benchmarking - why is the second loop faster?

这也可以解释你在这里看到的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20731952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档