ADDITIVE_VALUE) * MULTIPLIER_VALUE;
field.setInt(timing, value);
}
return timing.m_value;
} catch (Exception ex) {
System.out.println("Error using reflection");
throw ex;
}
}
在上面的例子中 , 测试程序重复调用每种方法 , 使用一个大循环数,从而平均多次调用的时间衡量结果 。平均值中不包括每种方法第一次调用的时间,因此初始化时间不是结果中的一个因素 。下面的图清楚的向我们展示了每种方法字段接入的时间:
图 1:字段接入时间 :
我们可以看出:在前两副图中(Sun JVM),使用反射的执行时间超过使用直接接入的1000倍以上 。通过比较,IBM JVM可能稍好一些,但反射方法仍旧需要比其它方法长700倍以上的时间 。任何JVM上其它两种方法之间时间方面无任何显著差异,但IBM JVM几乎比Sun JVM快一倍 。最有可能的是这种差异反映了Sun Hot Spot JVM的专业优化,它在简单基准方面表现得很糟糕 。反射性能是Sun开发1.4 JVM时关注的一个方面,它在反射方法调用结果中显示 。在这类操作的性能方面,Sun 1.4.1 JVM显示了比1.3.1版本很大的改进 。
如果为为创建使用反射的对象编写了类似的计时测试程序,我们会发现这种情况下的差异不象字段和方法调用情况下那么显著 。使用newInstance()调 用创建一个简单的java.lang.Object实例耗用的时间大约是在Sun 1.3.1 JVM上使用new Object()的12倍,是在IBM 1.4.0 JVM的四倍,只是Sun 1.4.1 JVM上的两部 。使用Array.newInstance(type, size)创建一个数组耗用的时间是任何测试的JVM上使用new type[size]的两倍,随着数组大小的增加 , 差异逐步缩小 。随着jdk6.0的推出,反射机制的性能也有了很大的提升 。期待中….
总结:
Java语言反射提供一种动态链接程序组件的多功能方法 。它允许程序创建和控制任何类的对象(根据安全性限制),无需提前硬编码目标类 。这些特性使得反射 特别适用于创建以非常普通的方式与对象协作的库 。例如,反射经常在持续存储对象为数据库、XML或其它外部格式的框架中使用 。Java reflection 非常有用,它使类和数据结构能按名称动态检索相关信息,并允许在运行着的程序中操作这些信息 。Java 的这一特性非常强大,并且是其它一些常用语言,如 C、C++、Fortran 或者 Pascal 等都不具备的 。
但反射有两个缺点 。第一个是性能问题 。用于字段和方法接入时反射要远慢于直接代码 。性能问题的程度取决于程序中是如何使用反射的 。如果它作为程序运行中相 对很少涉及的部分,缓慢的性能将不会是一个问题 。即使测试中最坏情况下的计时图显示的反射操作只耗用几微秒 。仅反射在性能关键的应用的核心逻辑中使用时性 能问题才变得至关重要 。
许多应用中更严重的一个缺点是使用反射会模糊程序内部实际要发生的事情 。程序人员希望在源代码中看到程序的逻辑 , 反射等绕过了源代码的技术会带来维护问 题 。反射代码比相应的直接代码更复杂,正如性能比较的代码实例中看到的一样 。解决这些问题的最佳方案是保守地使用反射——仅在它可以真正增加灵活性的地方 ——记录其在目标类中的使用 。
一下是对应各个部分的例子:
具体的应用:
1、 模仿instanceof 运算符号
class A {}
public class instance1 {
public static void main(String args[])
{
try {
Class cls = Class.forName("A");
boolean b1
= cls.isInstance(new Integer(37));
System.out.println(b1);
boolean b2 = cls.isInstance(new A());
System.out.println(b2);
}
catch (Throwable e) {
System.err.println(e);
- mysql数据库优化 mysql订单优化
- 使用redis实现分布式锁及其优化 redis分布式性能
- java查询数组中是否包含某一个值 javamongodb数组查询
- mongodb聚合查询优化 mongodb聚合运算需要索引吗
- redis实战电子书 redisjava书籍
- mysql分页性能优化 mysql分页执行很慢
- javaredis集群 javaredis列队
- mysql分页有什么优化 mysql分页功能
- mysql分区表优劣分析 分区优化大数据mysql
- Redis队列排队 redis队列java
