Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
IPT Readings on Instrumentation, Profiling, and Tracing Seminar presentation by Alessandra Gorla University of Lugano December 7, 2006 Java Bytecode Analysis and Optimization Soot BCEL JABA Overview Introduction Tools Soot - a Java Bytecode Optimization Framework BCEL - Byte Code Engineering Library JABA - JAva Bytecode Analyzer Introduction Java application are usually much slower than C and C++ applications. Possible approaches to solve the problem Bytecode optimizers Significant optimizations. Create new classes Bytecode annotators Create new classes with annotations Bytecode manipulation tools Manipulate bytecode in its original form Java application packagers Compress and/or obfuscate code Java native compilers Compile Java to native executables Soot Bytecode optimizer framework Intraprocedural optimization Whole program optimization Three intermediate representations Baf: streamlined representation of the bytecode Jimple: typed 3-address representation Grimp: Jimple aggregated version Baf Constant pool abstraction Give type to dup and swap instructions Local vars are given explicit names Jimple 3- address code representation (not for jsr) Stack is replaced by additional local vars (prefixed by $) Grimp Much easier to read than Baf of Jimple Has a representation of the new operator Aggregate expressions Optimization framework Optimizations Intraprocedural optimizations Constant propagation and folding Conditional and unconditional branch elimination Copy propagation Dead assignment and unreachable code elimination Expression aggregation Whole program optimization (call graph) Method inlining (Devirtualization of method calls) Experiments BCEL Bytecode manipulation library Written in Java Opensource Offers capabilities to inspect, edit and create Java binary classes Package to represent class Package to dynamically generate and modify classes Code examples, utilities BCEL Class representation BCEL Class editing BCEL - Optimization example Push 0 or 1 to the stack to evaluate boolean expressions Combination of boolean expressions: Keep pushing 0s and 1s to the stack Algorithm to apply: Replace IfInstruction branch target with ifne branch target BCEL - Optimization example if((a == null) || (i < 2)) System.out.println("Ooops"); 5: aload_0 6: ifnull #13 9: iconst_0 10: goto #14 13: iconst_1 14: nop 15: ifne #36 18: iload_1 19: iconst_2 20: if_icmplt #27 23: iconst_0 24: goto #28 27: iconst_1 28: nop 29: ifne #36 32: iconst_0 33: goto #37 36: iconst_1 37: nop 38: ifeq #52 41: getstatic System.out 44: ldc "Ooops" 46: invokevirtual println 52: return 10: aload_0 11: ifnull #19 14: iload_1 15: iconst_2 16: if_icmpge #27 19: getstatic System.out 22: ldc "Ooops" 24: invokevirtual println 27: return JABA Bytecode analyzer library Graphs representation Control Flow Graph Class Control Flow Graph Interclass Control Flow Graph JABA - CFG public void metodo(){ int x = 2; int c = 3; while(x > 0) { c++; x--; } } JABA - ICFG