WEB开发网
开发学院软件开发Java Java 编程的动态性,第 7 部分: 用 BCEL 设计字节... 阅读

Java 编程的动态性,第 7 部分: 用 BCEL 设计字节码

 2010-03-18 00:00:00 来源:WEB开发网   
核心提示: 选择一个试验品清单 1 给出了一个用于展示目的示例方法: StringBuilder 类的 buildString 方法,正如我在 第 4 部分所说的,Java 编程的动态性,第 7 部分: 用 BCEL 设计字节码(4),这个方法采用了所有 Java 性能专家告诫您 不要 使用的方式来构建一个

选择一个试验品

清单 1 给出了一个用于展示目的示例方法: StringBuilder 类的 buildString 方法。正如我在 第 4 部分所说的,这个方法采用了所有 Java 性能专家告诫您 不要 使用的方式来构建一个 String —— 它重复地在字符串的未尾附加单个字符以创建更长的字符串。因为字符串是不可变的,所以这种方式意味着每次循环时会构建一个新的字符串,从老的字符串拷贝数据并在最后增加一个字符。总的效果就是用这个方法创建更长的字符串时,它会产生越来越大的开销。

清单 1. 要计时的方法

public class StringBuilder 
{ 
  private String buildString(int length) { 
    String result = ""; 
    for (int i = 0; i < length; i++) { 
      result += (char)(i%26 + 'a'); 
    } 
    return result; 
  } 
   
  public static void main(String[] argv) { 
    StringBuilder inst = new StringBuilder(); 
    for (int i = 0; i < argv.length; i++) { 
      String result = inst.buildString(Integer.parseInt(argv[i])); 
      System.out.println("Constructed string of length " + 
        result.length()); 
    } 
  } 
} 

清单 2 显示了等同于用 BCEL 进行类操作改变的源代码。这里包装器方法只是保存当前时间,然后调用改名后的原方法,并在返回调用原方法的结果之前打印时间报告。

清单 2. 在原方法中加入计时

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:Java 编程 动态性

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