Java反射和new效率对比,差距有多大?

一. 基础概念 二. new 对象和反射创建对象的效率对比 三. 反射和new 的使用场景 一. 基础概念 java中,一般我们创建一个对象可能会选择new一下个实例。但是随着我们技术的不断提升,我们也学习到了,可以通过反射技术实现对象的创建。
可是,你有没有想一下,什么时候我们改用new创建对象,什么时候我们改用反射创建对象呢?
两者创建对象的效率又是如何呢?
//new 方式创建对象reflectdemo reflectdemo = new reflectdemo();//反射创建对象  反射创建对象的三种方式(1)class reflectdemoclass = reflectdemo.class;(2)class aclass = class.forname (com.whale.springtransaction.transactiondemo.reflectdemo.reflectdemo);(3)class aclass = reflectdemoclass.getclass (); 基于 spring boot + mybatis plus + vue & element 实现的后台管理系统 + 用户小程序,支持 rbac 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
项目地址:https://github.com/yunaiv/ruoyi-vue-pro 视频教程:https://doc.iocoder.cn/video/ 二. new 对象和反射创建对象的效率对比 //测试代码如下public class reflectdemo { public static void main (string[] args) throws illegalaccessexception, instantiationexception {  proxyobject();  newobject(); } //new 创建对象 //5 public static void newobject(){  long starttime = system.currenttimemillis ();  int i;  for (i = 0; i < 100000000; i++) {   reflectdemo reflectdemo = new reflectdemo ();  }  if (i == 100000000) {   long endtime = system.currenttimemillis ();   system.out.println (new耗时为: + (endtime - starttime));  } } //反射 创建对象 //30 public static void proxyobject() throws illegalaccessexception, instantiationexception {  long starttime = system.currenttimemillis ();  class reflectdemoclass = reflectdemo.class;  int i;  for (i = 0; i < 100000000; i++) {   reflectdemo reflectdemo = reflectdemoclass.newinstance ();  }  if (i == 100000000) {   long endtime = system.currenttimemillis ();   system.out.println (反射耗时为: + (endtime - starttime));  } }} 最终我们发现,new 100000000 个对象和反射创建 100000000 个对象,效率相差了很多倍。
所以下面我们来探讨一下为什么这么大差别? 首先第一点,一般我们的java代码是需要编译后在虚拟机里面运行的。
我们一般都是通过一个前端编辑器,比如javac,把java文件转为class文件。
接下来,程序运行期间,可能会通过一个jit,即时编译器将字节码文件转换为计算机认识的机器码文件。
另外一种可能是通过一个aot编译器,直接把java文件编译为本地机器码文件。其中jit在程序运行期会对程序进行优化,但是反射是通过动态解析的方式,因此可能无法执行某些java虚拟机的优化。
总结起来有下面几个原因: method#invoke 方法会对参数做封装和解封操作
需要检查方法可见 需要校验参数 反射方法难以内联 jit 无法优化 基于 spring cloud alibaba + gateway + nacos + rocketmq + vue & element 实现的后台管理系统 + 用户小程序,支持 rbac 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
项目地址:https://github.com/yunaiv/yudao-cloud 视频教程:https://doc.iocoder.cn/video/ 三. 反射和new 的使用场景 反射的部分使用场景
spring通过反射来帮我们实例化对象,并放入到ioc容器中 使用jdbc链接数据库时加载数据库驱动class.forname() 逆向代码 例如反编译 利用反射,在泛型为int的arryalist集合中存放一个string类型的对象 new 对象和反射的区别


从冬奥会开幕式超强特效看应用低延迟的必要性
电机控制器电磁兼容辐射测试定位整改分析
莱迪思新版sensAI实现10倍的性能提升,助力网络边缘低功耗、智能IoT设备
vivo正式发布了vivo X27系列手机搭载了第六代屏幕指纹技术
在线能耗电监测系统,数据分析平台搭建公司
Java反射和new效率对比,差距有多大?
韩国SK正式收购铜箔生产商灵宝华鑫 交易金额达16亿元
微网仿真测试系统解决方案
高压电机的国家标准
缺乏审查会导致AV安全分数的降低
没有算法功力,是不可能成为高手的
差压变送器如何测量液位
金融大数据的发展趋势与典型应用深度分析
MBB的持续增长和良性运营亟待解决承载网络面临的挑战
无线比例电机遥控器的设计原理
基于自供电酶联微针的神经引导导管设计
E现场:iPhone发布前夕, 华为联合荣耀新机来袭
TCL电子控股有限公司与可穿戴子屏全场景智慧显示生态协同效应
服务器专用万兆单向传输光纤网卡——FM-JL82599ES-TX/RX
关于DDR内存电源的特点及应用介绍