`
Sam1860
  • 浏览: 98973 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

一个简单的Java反射方法调用性能测试

    博客分类:
  • Java
阅读更多
本来是由于某个问题想用反射来解决,使用前作个小测试(我的应用都是用JDK1.4.2)。然后顺便把1.5的也测了。看到这个数据,不禁想到Hibernate,Spring这类依赖反射的框架是否更加适合运行在JDK1.4平台上。
补:后来在1.6上测了测,性能提高了不少,1.6真的是值得期待

Java 1.5
<!---->Reflection | Normal
3685|210
3696|210
4086|211
3685|211
3775|210
3696|210

Java 1.4.2
<!---->
<!---->Reflection | Normal

3295|340
3325|370
3295|340
3315|350
3305|340
3285|330


Java 1.6 beta2
<!---->Reflection | Normal
2954|200
2644|581
3005|170
2944|190
2684|170
3014|191

测试代码
<!----> 1 import java.lang.reflect.*;
 2 
 3 class ReflectTest {
 4 
 5    public static void main(String[] args) {
 6       String firstWord = "Hello ";
 7       String secondWord = "everybody.";
 8 
 9       for (int i=0; i<100000; i++) {
10             String bothWords = append2(firstWord, secondWord);
11       }
12       for (int i=0; i<100000; i++) {
13             String bothWords = append(firstWord, secondWord);
14       }
15 
16         long begin = System.currentTimeMillis();
17       for (int i=0; i<1000000; i++) {
18             String bothWords = append(firstWord, secondWord);
19       }
20       System.out.println("Reflection:" + (System.currentTimeMillis() - begin));
21 
22         begin = System.currentTimeMillis();
23       for (int i=0; i<1000000; i++) {
24             String bothWords = append2(firstWord, secondWord);
25       }
26       System.out.println("Normal:" + (System.currentTimeMillis() - begin));
27 
28    }
29 
30    public static String append(String firstWord, String secondWord) {
31       String result = null;
32       Class c = String.class;
33       Class[] parameterTypes = new Class[] {String.class};
34       Method concatMethod;
35       Object[] arguments = new Object[] {secondWord};
36       try {
37         concatMethod = c.getMethod("concat", parameterTypes);
38         result = (String) concatMethod.invoke(firstWord, arguments);
39       } 
40       catch (NoSuchMethodException e) {
41           System.out.println(e);
42       } 
43       catch (IllegalAccessException e) {
44           System.out.println(e);
45       } 
46       catch (InvocationTargetException e) {
47           System.out.println(e);
48       }
49       return result;
50    }
51 
52     public static String append2(String firstWord, String secondWord) {
53       return firstWord.concat(secondWord);
54    }
55 }

分享到:
评论

相关推荐

    Java 反射机制浅析

    对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身...

    Java开发技术大全(500个源代码).

    showMethod.java 演示如何定义一个方法体 showReturn_1.java return语句示例1 showReturn_2.java return语句示例2 showStaicVar.java 演示静态变量的使用 staticBlock.java 演示静态块的使用 staticVar.java ...

    java api最新7.0

    javax.imageio.spi 包含用于 reader、writer、transcoder 和流的插件接口以及一个运行时注册表的 Java Image I/O API 包。 javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I/...

    JAVA面试题最全集

    写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入bbbwlirbbb,输出bbbhhtccc。 3.数据类型之间的转换 如何将数值型字符转换为数字(Integer,Double) 如何将数字...

    JAVA_API1.6文档(中文)

    javax.imageio.spi 包含用于 reader、writer、transcoder 和流的插件接口以及一个运行时注册表的 Java Image I/O API 包。 javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I...

    java 编程入门思考

    2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 ...

    Java初学者入门教学

    15.2.1 一个简单的服务器和客户机程序 15.3 服务多个客户 15.4 数据报 15.5 一个Web应用 15.5.1 服务器应用 15.5.2 NameSender程序片 15.5.3 15.5.3 要注意的问题 15.6 Java与CGI的沟通 15.6.1 CGI数据的编码 15.6.2...

    java联想(中文)

    15.2.1 一个简单的服务器和客户机程序 15.3 服务多个客户 15.4 数据报 15.5 一个Web应用 15.5.1 服务器应用 15.5.2 NameSender程序片 15.5.3 15.5.3 要注意的问题 15.6 Java与CGI的沟通 15.6.1 CGI数据的编码 15.6.2...

    基于Java实现的RPC项目源码+项目说明.zip

    然后body中被序列化的内容,因为是codec层的工作,放在了codec包中,RPCReuqest要调用一个方法,需要知道接口名、方法名、参数、参数类型,因此把这些东西放进RpcRequestBody中即可,后面把它序列化后房价RpcRequest...

    Java 1.6 API 中文 New

    javax.imageio.spi 包含用于 reader、writer、transcoder 和流的插件接口以及一个运行时注册表的 Java Image I/O API 包。 javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I/...

    JAVA_Thinking in Java

    2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 ...

    java里面的lang包源码-reflectasm:高性能Java反射

    是一个非常小的 Java 库,它通过使用代码生成来提供高性能的反射。 生成访问类以设置/获取字段、调用方法或创建新实例。 访问类使用字节码而不是 Java 的反射,因此速度要快得多。 它还可以通过字节码访问原始字段以...

    Thinking in Java简体中文(全)

    2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 ...

    Java2核心技术.part5

    3.1一个简单的Java应用程序 3.2注释 3.3数据类型 3.3.1整型 3.3.2浮点型 3.3.3 char类型 3.3.4 boolean类型 3.4变量 3.4.1初始化变量 3.4.2常量 3.5运算符 3.5.1自增运算符与自减...

    Drift:Java 性能测试工具包

    Drift是一个Java性能测试套件,目的在于简化性能测试和开发的性能自验证。 封装计时器,报表,词表等多种测试kit 不使用反射而采用模板,减小测试噪音 目前提供两种原生的测试app:负载测试和稳定性测试 测试载荷支持...

    Thinking in Java 中文第四版+习题答案

    15.2.1 一个简单的服务器和客户机程序 15.3 服务多个客户 15.4 数据报 15.5 一个Web应用 15.5.1 服务器应用 15.5.2 NameSender程序片 15.5.3 15.5.3 要注意的问题 15.6 Java与CGI的沟通 15.6.1 CGI数据的编码 15.6.2...

    java基础案例与开发详解案例源码全

    2.3.3 开发Java第一个程序21 2.3.4 Java代码中的注释23 2.3.5 常见错误解析24 2.4 Java类库组织结构和文档27 2.5 Java虚拟机简介28 2.6 Java技术两种核心运行机制29 2.7 上机练习30 第3章 3.1 变量32 3.1.1 什么是...

    DWR.xml配置文件说明书(含源码)

    当你在客户端调用Blash.toString(reply)时,后台将采用java.util.date的默认构造方法创建一个实例.然后调用实例的tostring方法.客户端的javascript将返回给reply对象(此时reply是java.util.date的字符串形式) 3.5 The...

Global site tag (gtag.js) - Google Analytics