`
Sam1860
  • 浏览: 100030 次
  • 性别: 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方法反射调用demo

    Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java具有了高度的灵活性,常用于框架开发、插件系统、元编程等...

    Java反射调用方法

    在给定的代码中,`TestRef` 类展示了如何使用Java反射调用方法。首先,我们创建了一个 `Foo` 类,它有一个私有字符串成员变量 `msg` 和三个方法:`setMsg`、`getMsg` 和 `outInfo`。`main` 方法是演示反射调用的入口...

    Java反射性能测试分析

    Java反射机制是Java编程语言中一个强大的特性,它允许程序在运行时动态地访问、检测和修改类、接口、字段和方法等对象。然而,反射操作通常会引入额外的开销,这在性能敏感的应用场景下可能成为一个瓶颈。本文将深入...

    通过反射调用静态方法

    以下是一个简单的示例,演示如何使用反射调用静态方法: ```java public class ClsTool { public static void staticMethod(String arg) { System.out.println("调用了静态方法,参数为:" + arg); } } public ...

    Java反射调用工具类

    测试类通常包含一系列的JUnit测试方法,每个方法对应一个或多个功能的测试。它会模拟不同的输入和条件,确保在各种情况下,反射调用工具类都能正确工作。 在Java反射中,以下是一些重要的知识点: 1. **Class对象*...

    frida反射调用对象中的方法与字段.pdf

    对于任意一个对象,都能够调用它的任意一个方法和属性。这种动态获取信息以及动态调用对象方法的功能称为Java的反射机制。反射机制为Java的操作带来极大的灵活性,可以用来动态创建对象,调用方法,访问属性。 在...

    java反射调用实例代码

    Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个资源“java反射调用实例代码”提供了关于如何使用Java反射API进行各种...

    java动态调用方法

    Java动态调用方法是Java反射机制的一个重要应用,它允许我们在程序运行时,根据需要动态地获取类的信息并调用其方法。这种能力为代码的灵活性和可扩展性提供了强大的支持,尤其在处理不确定的对象类型或者需要在运行...

    反射机制例子及反射方法调用

    在这个例子中,我们可以看到一个简单的反射机制示例,演示了如何通过字符串指定类名,并调用类的方法。首先,我们定义了一个名为WriteClassName的类,该类有一个静态方法printClassName,该方法打印出一条消息...

    关于反射调用方法的一个log

    这篇博文“关于反射调用方法的一个log”可能涉及了如何利用Java反射API来动态地调用类的方法,这在处理不确定的类结构或者在元编程场景中十分常见。 在Java中,`java.lang.reflect`包提供了反射相关的类和接口,如`...

    利用java反射调用实现对字符串的解析,成功调入函数,并且返回值

    在这个场景中,我们关注的是如何利用Java反射调用来解析字符串并执行相关函数,最终获取返回值。下面将详细阐述这个过程。 首先,`ReflectUtils.java` 文件可能包含了一些静态方法,这些方法提供了反射操作的便利...

    JAVA反射机制动态调用 计算器对象的加法,减法函数;JAVA反射机制修改一个学生对象 的私有数据成员

    Java反射机制是Java语言提供的一种强大功能,它允许我们在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个机制在处理不确定类型或者需要灵活操作类的场景中非常有用。在这个...

    java反射基本方法测试

    Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射主要用于在运行时分析类、接口、字段和方法的信息,使得我们可以在不知道对象具体...

    java 反射入门-属性方法调用实例

    Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射主要用于在运行时分析类和对象,包括类的方法、字段、构造器等信息。这篇博文将带你...

    Java 反射详解(包含私有方法属性的调用)

    Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java程序具有了高度的灵活性和动态性,尤其在框架开发、插件系统...

    java反射 java反射 java反射java反射

    Java反射是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。在Java中,反射机制提供了强大的能力,包括在运行时检查类的结构、创建对象实例、调用方法以及访问和修改字段值。...

    Java反射机制,通过对象访问调用类的私有成员或方法

    Java反射机制是Java编程语言中一个强大的特性,它允许程序在运行时动态地获取类的信息并操作类的对象。这一机制的核心在于,Java程序可以获取到关于任何类的内部信息,包括类名、属性、方法、构造器等,并能在运行时...

    反射获取属性调用方法反射获取属性调用方法

    - `TestReflect`可能是一个测试类,用于演示如何使用反射获取属性和调用方法。 以上就是反射获取属性和调用方法的基本概念、实现方式以及相关应用场景。掌握反射技术,能让你在编程中更加灵活,解决许多设计难题。

    Java反射简单小实例

    Java反射机制是Java编程语言的一个强大特性,它允许程序在运行时检查自身,并且能够“看”到类的信息(字段、方法等),甚至可以在运行时调用这些方法或修改这些字段的值。这为开发带来了很大的灵活性,同时也增加了...

    Java反射机制的动态调用计算器的加法,减法函数;修改一个学生对象的私有数据成员

    Java反射机制是Java语言提供的一种强大功能,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在给定的场景中,我们利用反射机制实现了动态调用计算器的加法和减法函数,并修改了学生对象的...

Global site tag (gtag.js) - Google Analytics