环境准备

  1. package com.lilei.pack09;
  2.  
  3. public class Logger {
  4.  
  5. public void show(){
  6. System.out.println("hello world");
  7. }
  8.  
  9. public int cal(int a,int b){
  10. return a + b;
  11. }
  12.  
  13. public String multi(String... args){
  14.  
  15. return args.length+";";
  16. }
  17.  
  18. }

使用反射

  1. package com.lilei.pack09;
  2.  
  3. import java.lang.reflect.InvocationTargetException;
  4. import java.lang.reflect.Method;
  5.  
  6. public class app1 {
  7.  
  8. public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
  9.  
  10. Class c = Class.forName("com.lilei.pack09.Logger");
  11.  
  12. Method[] ms = c.getMethods();
  13.  
  14. Method m_show = c.getMethod("show", null);
  15.  
  16. m_show.invoke(new Logger(), null);
  17.  
  18. Method m_cal = c.getMethod("cal", new Class[]{int.class,int.class});
  19.  
  20. Object result = m_cal.invoke(new Logger(), 233,2233);
  21.  
  22. new Logger().multi("v","dd","ds");
  23.  
  24. System.out.println(result);
  25.  
  26. Method m_multi = c.getMethod("multi", new Class[]{String[].class});
  27.  
  28. result = m_multi.invoke(new Logger(), new Object[]{new String[]{"v","dd","ds"}});
  29.  
  30. System.out.println(result);
  31. }
  32.  
  33. }

性能比较

常规创建对象调用方法和通过反射进行调用方法

  1. package com.lilei.pack09;
  2.  
  3. import java.util.Date;
  4.  
  5. public class app2 {
  6.  
  7. public static void main(String[] args) {
  8.  
  9. Logger logger = new Logger();
  10.  
  11. int result = 0;
  12.  
  13. System.out.println(new Date());
  14. for (int i = 0; i < 2000000000; i++){
  15. result += logger.cal(i,i);
  16. }
  17.  
  18. System.out.println(result);
  19. System.out.println(new Date());
  20. }
  21.  
  22. }

消耗时间:

  1. package com.lilei.pack09;
  2.  
  3. import java.lang.reflect.InvocationTargetException;
  4. import java.lang.reflect.Method;
  5. import java.util.Date;
  6.  
  7. public class app3 {
  8.  
  9. public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
  10.  
  11. Logger logger = new Logger();
  12.  
  13. Method m = logger.getClass().getMethod("cal", new Class[]{int.class,int.class});
  14.  
  15. int result = 0;
  16.  
  17. System.out.println(new Date());
  18. for (int i = 0; i < 2000000000; i++){
  19. Integer in = (Integer)m.invoke(logger, i,i);
  20. result += in.intValue();
  21. }
  22.  
  23. System.out.println(result);
  24. System.out.println(new Date());
  25. }
  26.  
  27. }

消耗时间:

通过使用反射消耗的时间是通过对象调用方法的40-50倍

java反射使用及性能比较的更多相关文章

  1. java反射之-性能优化

    在最近的计划中,打算看看在不使用google protobuf的情况下,在原有的采用jackson作为json序列化工具的基础上,是否可以实现进一步的性能优化.主要是针对list的情况. 测试的时候选 ...

  2. 深入分析Java反射(八)-优化反射调用性能

    Java反射的API在JavaSE1.7的时候已经基本完善,但是本文编写的时候使用的是Oracle JDK11,因为JDK11对于sun包下的源码也上传了,可以直接通过IDE查看对应的源码和进行Deb ...

  3. java反射的性能问题

    java反射效率到底如何,花了点时间,做了一个简单的测试.供大家参考. 测试背景: 1. 测试简单Bean(int,Integer,String)的set方法2. loop 1亿次3. 测试代码尽可能 ...

  4. JAVA反射会降低你的程序性能吗?

    原文出处 早两天写了<从把三千行代码重构成15行代码谈起>这篇文章,看到评论中有一些同学的回复还是在质疑反射的性能,好像程序用上了反射,就像开上了拖拉机似的.本来我觉得这个话题没有什么好讨 ...

  5. java基础知识(十一)java反射机制(下)

    1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...

  6. Java反射机制专题

    ·Java Reflection Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方 ...

  7. 反射——Java反射机制

    反射概述 什么是反射? ①   反射的概念是由Smith在1982年首次提出的,主要指程序可以访问.检测和修改它本身状态或行为的一种能力. ②   JAVA反射机制是在运行状态中,对应任意一个类,都能 ...

  8. [转]java反射机制

    原文地址:http://www.cnblogs.com/jqyp/archive/2012/03/29/2423112.html 一.什么是反射机制         简单的来说,反射机制指的是程序在运 ...

  9. Java 反射练习

    已同步更新至个人blog:http://dxjia.cn/2015/08/java-reflect/ 引用baidubaike上对JAVA反射的说明,如下:JAVA反射机制是在运行状态中,对于任意一个 ...

随机推荐

  1. 震撼功能:逐浪CMS全面支持PWA移动生成意指未来

    Progressive Web App, 简称 PWA,是提升 Web App 的体验的一种新方法,能给用户原生应用的体验. PWA 能做到原生应用的体验不是靠特指某一项技术,而是经过应用一些新技术进 ...

  2. LOJ6277~6285 数列分块入门

    Portals 分块需注意的问题 数组大小应为,因为最后一个块可能会超出的范围. 当操作的区间在一个块内时,要特判成暴力修改. 要清楚什么时候应该+tag[t] 数列分块入门 1 给出一个长为的数列, ...

  3. WeakHashMap回收时机结合JVM 虚拟机GC的一些理解

    一直很想知道WeakHashMap的使用场景,想来想去只能用在高速缓存中,而且缓存的数据还不是特别重要,因为key(key不存在被引用的时候)随时会被回收 所以研究了一下WeakHashMap的回收时 ...

  4. tcp/ip 卷一 读书笔记(2)物理层和链路层网络

    物理层和链路层网络 术语 链路 是一对相邻结点间的物理线路,中间没有任何其他的交换结点. 数据链路 除了物理线路外,还必须有通信协议来控制这些数据的传输. 帧 数据链路层的协议数据单元(PDU) 串行 ...

  5. JVM笔记1-内存溢出分析问题与解决

    假设我们项目中JVM内存溢出了,大项目中上百万行代码,是很难定位的.因此我们需要借用一个Memory Analyzer工具, 官网地址为:http://www.eclipse.org/download ...

  6. 转:客户端session与服务端session

    会话(Session)跟踪是Web程序中常用的技术,用来 跟踪用户的整个会话 .常用的会话跟踪技术是Cookie与Session. Cookie通过在客户端记录信息确定用户身份 , Session通过 ...

  7. 判断一个jquery对象是否为空

    今天用jquery $获取一个jquery对象.$("#id") 然后用判断这个对象是否存在,id不存在的时候,判断这个是否存在, if($("#id")) 始 ...

  8. R语言︱文本(字符串)处理与正则表达式

    处理文本是每一种计算机语言都应该具备的功能,但不是每一种语言都侧重于处理文本.R语言是统计的语言,处理文本不是它的强项,perl语言这方面的功能比R不知要强多少倍.幸运的是R语言的可扩展能力很强,DN ...

  9. Struts2实现文件上传(三)

    Struts2实现文件上传 配置文件web.xml <?xml version="1.0" encoding="UTF-8"?> <web-a ...

  10. 错误代码: 1111 Invalid use of group function

    1.错误描述 1 queries executed, 0 success, 1 errors, 0 warnings 查询:update t_user_info t inner join t_pro_ ...