Java Bytecode Analysis and Optimization

Download Report

Transcript Java Bytecode Analysis and Optimization

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