java反射使用及性能比较
环境准备
package com.lilei.pack09;
public class Logger {
public void show(){
System.out.println("hello world");
}
public int cal(int a,int b){
return a + b;
}
public String multi(String... args){
return args.length+";";
}
}
使用反射
package com.lilei.pack09; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; public class app1 { public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { Class c = Class.forName("com.lilei.pack09.Logger"); Method[] ms = c.getMethods(); Method m_show = c.getMethod("show", null); m_show.invoke(new Logger(), null); Method m_cal = c.getMethod("cal", new Class[]{int.class,int.class}); Object result = m_cal.invoke(new Logger(), 233,2233); new Logger().multi("v","dd","ds"); System.out.println(result); Method m_multi = c.getMethod("multi", new Class[]{String[].class}); result = m_multi.invoke(new Logger(), new Object[]{new String[]{"v","dd","ds"}}); System.out.println(result);
} }
性能比较
常规创建对象调用方法和通过反射进行调用方法
package com.lilei.pack09;
import java.util.Date;
public class app2 {
public static void main(String[] args) {
Logger logger = new Logger();
int result = 0;
System.out.println(new Date());
for (int i = 0; i < 2000000000; i++){
result += logger.cal(i,i);
}
System.out.println(result);
System.out.println(new Date());
}
}
消耗时间:

package com.lilei.pack09; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Date; public class app3 { public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { Logger logger = new Logger(); Method m = logger.getClass().getMethod("cal", new Class[]{int.class,int.class}); int result = 0; System.out.println(new Date());
for (int i = 0; i < 2000000000; i++){
Integer in = (Integer)m.invoke(logger, i,i);
result += in.intValue();
} System.out.println(result);
System.out.println(new Date());
} }
消耗时间:

通过使用反射消耗的时间是通过对象调用方法的40-50倍
java反射使用及性能比较的更多相关文章
- java反射之-性能优化
在最近的计划中,打算看看在不使用google protobuf的情况下,在原有的采用jackson作为json序列化工具的基础上,是否可以实现进一步的性能优化.主要是针对list的情况. 测试的时候选 ...
- 深入分析Java反射(八)-优化反射调用性能
Java反射的API在JavaSE1.7的时候已经基本完善,但是本文编写的时候使用的是Oracle JDK11,因为JDK11对于sun包下的源码也上传了,可以直接通过IDE查看对应的源码和进行Deb ...
- java反射的性能问题
java反射效率到底如何,花了点时间,做了一个简单的测试.供大家参考. 测试背景: 1. 测试简单Bean(int,Integer,String)的set方法2. loop 1亿次3. 测试代码尽可能 ...
- JAVA反射会降低你的程序性能吗?
原文出处 早两天写了<从把三千行代码重构成15行代码谈起>这篇文章,看到评论中有一些同学的回复还是在质疑反射的性能,好像程序用上了反射,就像开上了拖拉机似的.本来我觉得这个话题没有什么好讨 ...
- java基础知识(十一)java反射机制(下)
1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...
- Java反射机制专题
·Java Reflection Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方 ...
- 反射——Java反射机制
反射概述 什么是反射? ① 反射的概念是由Smith在1982年首次提出的,主要指程序可以访问.检测和修改它本身状态或行为的一种能力. ② JAVA反射机制是在运行状态中,对应任意一个类,都能 ...
- [转]java反射机制
原文地址:http://www.cnblogs.com/jqyp/archive/2012/03/29/2423112.html 一.什么是反射机制 简单的来说,反射机制指的是程序在运 ...
- Java 反射练习
已同步更新至个人blog:http://dxjia.cn/2015/08/java-reflect/ 引用baidubaike上对JAVA反射的说明,如下:JAVA反射机制是在运行状态中,对于任意一个 ...
随机推荐
- Flask從入門到入土(三)——Web表單
Flask-WTF擴展可以把處理Web表單的過程變成一種愉悅的體驗.這個擴展對獨立的WTForms包進行了包裝,方便集成到Flask程序中. Flask-WTF及其依賴可使用pip安裝: pip in ...
- Qt msvc 乱码如何解决?
#ifdef Q_OS_WIN #pragma execution_character_set("UTF-8") #endif
- nyoj28 大数阶乘 亿进制优化
思路:刚开始用的十进制模拟手算加法,超时了.然后想到刘汝佳大哥书上面用的亿进制能够加速大数运算,果然180ms过掉了. 亿进制与十进制相同,只不过是把八位看做一位,例如6464654654165,看成 ...
- java网络编程(7)——利用tcp实现文件上传
其实客户端与服务端通讯的道理都是一样的,都是通过输入与输出这两个流,那么实现文件上传也就是同样的,客户端把文件读到文件流,服务端用文件流来接受,然后写到一个文件中,这样子就实现了文件上传,文件拷贝也是 ...
- shell脚本中 杀死可能成为僵尸进程的方法
交互式 Bash Shell 获取进程 pid 在已知进程名(name)的前提下,交互式 Shell 获取进程 pid 有很多种方法,典型的通过 grep 获取 pid 的方法为(这里添加 -v gr ...
- nginx启动停止
nginx -s reload :修改配置后重新加载生效 nginx -s reopen :重新打开日志文件 nginx -t -c /path/to/nginx.conf 测试nginx配置文件是否 ...
- mysql常用基础操作语法(十二)~~常用数值函数【命令行模式】
数值函数是常用函数之一,也是学习mysql必会的,常用的有如下一些: 1.ceil:返回大于某个数的最小整数值: 2.floor:和上一个相反,返回小于某个数的最大整数值: 3.round:返回某个数 ...
- R语言实现SOM(自组织映射)模型(三个函数包+代码)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- SOM自组织映射神经网络模型 的R语言实现 笔 ...
- Django学习-20-信号
Django信号 使得某个操作之前能定制化一些任务 - 内置信号 pre_init # django的model执行其构造方法前,自动触发 post_ ...
- windows共享虚拟机ubuntu目录
1)安装 sudo apt-get install samba 2)配置文件vi /etc/samba/smb.conf 添加如下 3)启动服务 sudo service smbd start 4)w ...