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

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

 2010-03-18 00:00:00 来源:WEB开发网   
核心提示: 现在开始包装,清单 6 生成实际计算开始时间后经过的毫秒数,Java 编程的动态性,第 7 部分: 用 BCEL 设计字节码(8),并作为编排好格式的消息打印出来的代码,这一部分看上去很复杂,如果将 JVM 想象为基于堆栈的处理器,则其中大多数是容易理解的,但是大多数操作实际上只是写出输出消息的

现在开始包装。清单 6 生成实际计算开始时间后经过的毫秒数,并作为编排好格式的消息打印出来的代码。这一部分看上去很复杂,但是大多数操作实际上只是写出输出消息的各个部分。它确实展示了几种我在前面的代码中没有使用的操作类型,包括字段访问(到 java.lang.System.out )和几种不同的指令类型。如果将 JVM 想象为基于堆栈的处理器,则其中大多数是容易理解的,因此我在这里就不再详细说明了。

清单 6. 计算并打印所使用的时间

// print time required for method call 
ilist.append(ifact.createFieldAccess("java.lang.System", "out", 
  new ObjectType("java.io.PrintStream"), Constants.GETSTATIC)); 
ilist.append(InstructionConstants.DUP); 
ilist.append(InstructionConstants.DUP); 
String text = "Call to method " + methgen.getName() + " took "; 
ilist.append(new PUSH(pgen, text)); 
ilist.append(ifact.createInvoke("java.io.PrintStream", "print", 
  Type.VOID, new Type[] { Type.STRING }, Constants.INVOKEVIRTUAL)); 
ilist.append(ifact.createInvoke("java.lang.System", 
  "currentTimeMillis", Type.LONG, Type.NO_ARGS, 
  Constants.INVOKESTATIC)); 
ilist.append(InstructionFactory.createLoad(Type.LONG, slot)); 
ilist.append(InstructionConstants.LSUB); 
ilist.append(ifact.createInvoke("java.io.PrintStream", "print", 
  Type.VOID, new Type[] { Type.LONG }, Constants.INVOKEVIRTUAL)); 
ilist.append(new PUSH(pgen, " ms.")); 
ilist.append(ifact.createInvoke("java.io.PrintStream", "println", 
  Type.VOID, new Type[] { Type.STRING }, Constants.INVOKEVIRTUAL)); 

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

Tags:Java 编程 动态性

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