java 反射 慢在那里

阅读: 评论:0

java 反射 慢在那里

java 反射 慢在那里

根据这篇文章总结,每一个Method都有一个root,不暴漏给外部,而是每次copy一个Method。具体的反射调用逻辑是委托给MethodAccessor的,而accessor对象会在第一次invoke的时候才创建,是一种lazy init方式。而且默认Class类会cache method对象。目前MethodAccessor的实现有两种,通过设置inflation,一个native方式,一种生成java bytecode方式。native方式启动快,但运行时间长了不如java方式,个人感觉应该是java方式运行长了,jit compiler可以进行优化。所以JDK6的实现,在native方式中,有一个计数器,当调用次数达到阀值,就会转为使用java方式。默认值是15。java方式的实现,基本和非反射方式相同。主要影响性能的问题,1是method.invoke中每次都要进行参数数组包装,2.在method.invoke中要进行方法可见性检查,3在accessor的java实现方式下,invoke时会检查参数的类型匹配。而在JDK7中methodhandle来做反射调用,形参和实参是准确的,所以只需要在链接方法的时候做检查,调用时不用再做检查。并且methodhandle是不可变值,所以jvm可以做激进优化,例如内联。

本文发布于:2024-02-02 22:04:10,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170688264646737.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:在那里   反射   java
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23