WEB开发网
开发学院软件开发Java Java 编程的动态性,第 2部分: 引入反射 阅读

Java 编程的动态性,第 2部分: 引入反射

 2010-03-18 00:00:00 来源:WEB开发网   
核心提示: 反射性能反射是一种强大的工具,但也存在一些不足,Java 编程的动态性,第 2部分: 引入反射(8),一个主要的缺点是对性能有影响,使用反射基本上是一种解释操作, accessReflection 使用可通过反射接入的另一对象的字段,在每种情况下,您可以告诉JVM您希望做什么并且它满足您的要求,

反射性能

反射是一种强大的工具,但也存在一些不足。一个主要的缺点是对性能有影响。使用反射基本上是一种解释操作,您可以告诉JVM您希望做什么并且它满足您的要求。这类操作总是慢于只直接执行相同的操作。为了阐述使用反射的性能成本,我为本文准备了一组基准程序。

清单7是字段接入性能测试的一个摘用,包括基本的测试方法。每种方法测试字段接入的一种形式 -- accessSame 与同一对象的成员字段协作, accessOther 使用可直接接入的另一对象的字段, accessReflection 使用可通过反射接入的另一对象的字段。在每种情况下,方法执行相同的计算 -- 循环中简单的加/乘顺序。

清单 7:字段接入性能测试代码

public int accessSame(int loops) { 
  m_value = 0; 
  for (int index = 0; index < loops; index++) { 
    m_value = (m_value + ADDITIVE_VALUE) * 
      MULTIPLIER_VALUE; 
  } 
  return m_value; 
} 
public int accessReference(int loops) { 
  TimingClass timing = new TimingClass(); 
  for (int index = 0; index < loops; index++) { 
    timing.m_value = (timing.m_value + ADDITIVE_VALUE) * 
      MULTIPLIER_VALUE; 
  } 
  return timing.m_value; 
} 
public int accessReflection(int loops) throws Exception { 
  TimingClass timing = new TimingClass(); 
  try { 
    Field field = TimingClass.class. 
      getDeclaredField("m_value"); 
    for (int index = 0; index < loops; index++) { 
      int value = (field.getInt(timing) + 
        ADDITIVE_VALUE) * MULTIPLIER_VALUE; 
      field.setInt(timing, value); 
    } 
    return timing.m_value; 
  } catch (Exception ex) { 
    System.out.println("Error using reflection"); 
    throw ex; 
  } 
} 

上一页  3 4 5 6 7 8 9 10  下一页

Tags:Java 编程 动态性

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接