IPT Readings on Instrumentation, Profiling, and Tracing Seminar presentation by Alessandra Gorla...

19
IPT Readings on Instrumentation, Profiling, and Tracing Seminar presentation by Alessandra Gorla University of Lugano December 7, 2006
  • date post

    20-Dec-2015
  • Category

    Documents

  • view

    217
  • download

    3

Transcript of IPT Readings on Instrumentation, Profiling, and Tracing Seminar presentation by Alessandra Gorla...

IPT Readings on

Instrumentation, Profiling, and Tracing

Seminar presentation byAlessandra Gorla

University of LuganoDecember 7, 2006

Java Bytecode Analysis and Optimization

Java Bytecode Analysis and Optimization

Soot

BCEL

JABA

Soot

BCEL

JABA

OverviewOverview

Introduction Tools

Soot - a Java Bytecode Optimization Framework

BCEL - Byte Code Engineering Library JABA - JAva Bytecode Analyzer

Introduction Tools

Soot - a Java Bytecode Optimization Framework

BCEL - Byte Code Engineering Library JABA - JAva Bytecode Analyzer

IntroductionIntroduction

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

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

SootSoot

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

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

BafBaf

Constant pool abstraction

Give type to dup and swap instructions

Local vars are given explicit names

Constant pool abstraction

Give type to dup and swap instructions

Local vars are given explicit names

JimpleJimple

3- address code representation (not for jsr)

Stack is replaced by additional local vars (prefixed by $)

3- address code representation (not for jsr)

Stack is replaced by additional local vars (prefixed by $)

GrimpGrimp

Much easier to read than Baf of Jimple

Has a representation of the new operator

Aggregate expressions

Much easier to read than Baf of Jimple

Has a representation of the new operator

Aggregate expressions

Optimization frameworkOptimization framework

OptimizationsOptimizations

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)

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)

ExperimentsExperiments

BCELBCEL

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

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 representationBCEL Class representation

BCEL Class editingBCEL Class editing

BCEL - Optimization exampleBCEL - 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

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 exampleBCEL - Optimization example5: aload_06: ifnull #139: iconst_010: goto #1413: iconst_114: nop15: ifne #3618: iload_119: iconst_220: if_icmplt #2723: iconst_024: goto #2827: iconst_128: nop29: ifne #3632: iconst_033: goto #3736: iconst_137: nop38: ifeq #5241: getstatic System.out44: ldc "Ooops"46: invokevirtual println52: return

5: aload_06: ifnull #139: iconst_010: goto #1413: iconst_114: nop15: ifne #3618: iload_119: iconst_220: if_icmplt #2723: iconst_024: goto #2827: iconst_128: nop29: ifne #3632: iconst_033: goto #3736: iconst_137: nop38: ifeq #5241: getstatic System.out44: ldc "Ooops"46: invokevirtual println52: return

if((a == null) || (i < 2))

System.out.println("Ooops");

10: aload_011: ifnull #1914: iload_115: iconst_216: if_icmpge #2719: getstatic System.out22: ldc "Ooops"24: invokevirtual println27: return

JABAJABA

Bytecode analyzer library Graphs representation

Control Flow Graph Class Control Flow Graph Interclass Control Flow Graph

Bytecode analyzer library Graphs representation

Control Flow Graph Class Control Flow Graph Interclass Control Flow Graph

JABA - CFGJABA - CFG

public void metodo(){int x = 2;

int c = 3; while(x > 0) {

c++; x--; } }

JABA - ICFGJABA - ICFG