Just-In-Time Compilation · 2016. 2. 1. · Just-In-Time Compilation Goals: I Tries to fill the...

25
Just-In-Time Compilation Thiemo Bucciarelli Institute for Software Engineering and Programming Languages 18. Januar 2016 T. Bucciarelli 18. Januar 2016 1/25

Transcript of Just-In-Time Compilation · 2016. 2. 1. · Just-In-Time Compilation Goals: I Tries to fill the...

Page 1: Just-In-Time Compilation · 2016. 2. 1. · Just-In-Time Compilation Goals: I Tries to fill the gap between Interpreter and AOT compilers I Efficiency and platform independency

Just-In-Time Compilation

Thiemo Bucciarelli

Institute for Software Engineering and Programming Languages

18. Januar 2016

T. Bucciarelli 18. Januar 2016 1/25

Page 2: Just-In-Time Compilation · 2016. 2. 1. · Just-In-Time Compilation Goals: I Tries to fill the gap between Interpreter and AOT compilers I Efficiency and platform independency

Agenda

Definitions

Just-In-Time Compilation

Comparing JIT, AOT and Interpreters

Profiling

Optimization

The Java Virtual Machine

Conclusion

T. Bucciarelli 18. Januar 2016 2/25

Page 3: Just-In-Time Compilation · 2016. 2. 1. · Just-In-Time Compilation Goals: I Tries to fill the gap between Interpreter and AOT compilers I Efficiency and platform independency

Definitions: Compiler

Definition: CompilerTranslation of source code from one programming language to another.

I Lexical AnalysisSplit the input into atomic units.

I Syntax AnalysisCheck if the syntax is correct (parser).

I Semantic AnalysisE.g. type checking. Typically results in an intermediate representation.

I OptimizationIncrease the effectivity of the code without changing the semantics.

T. Bucciarelli 18. Januar 2016 3/25

Page 4: Just-In-Time Compilation · 2016. 2. 1. · Just-In-Time Compilation Goals: I Tries to fill the gap between Interpreter and AOT compilers I Efficiency and platform independency

Definitions: AOT Compiler

Definition: Ahead-of-Time (AOT) CompilerI Compilation before runtimeI Typically called by the programmerI Often produces native code for direct executionI Mostly platform dependent!

T. Bucciarelli 18. Januar 2016 4/25

Page 5: Just-In-Time Compilation · 2016. 2. 1. · Just-In-Time Compilation Goals: I Tries to fill the gap between Interpreter and AOT compilers I Efficiency and platform independency

Definitions: Interpreters

Definition: InterpreterI Does not create any outputI Processes at runtimeI Directly executes the code on the processor (=interpreting)I Mostly platform independent!

T. Bucciarelli 18. Januar 2016 5/25

Page 6: Just-In-Time Compilation · 2016. 2. 1. · Just-In-Time Compilation Goals: I Tries to fill the gap between Interpreter and AOT compilers I Efficiency and platform independency

Just-In-Time Compilation

Goals:I Tries to fill the gap between Interpreter and AOT compilersI Efficiency and platform independency

Structure:I Performs compilation during runtimeI Trace-based or method-basedI Has to be as fast as possibleI Can use additional information for better optimizationsI Knows the underlying hardware

T. Bucciarelli 18. Januar 2016 6/25

Page 7: Just-In-Time Compilation · 2016. 2. 1. · Just-In-Time Compilation Goals: I Tries to fill the gap between Interpreter and AOT compilers I Efficiency and platform independency

Just-In-Time Compilation

Method-based:I Only analyses the calls, no further analysisI Similar to static AOT compilersI Less efficient, but less overhead

Trace-based:I Analyses what paths (traces) are often used, and to which methods they

belongI Can effectively be combined with an interpreterI Allows targeted optimizationsI More efficient, more overhead

T. Bucciarelli 18. Januar 2016 7/25

Page 8: Just-In-Time Compilation · 2016. 2. 1. · Just-In-Time Compilation Goals: I Tries to fill the gap between Interpreter and AOT compilers I Efficiency and platform independency

Comparing JIT, AOT and Interpreters

AOT-Compilers:

+ Can be arbitrary slow and thus perform time-consuming optimizations

+ No overhead at runtime

− Little platform independence

Interpreters:

+ Platform independence

± Little overhead at runtime

− Inefficient for repetitive executions

− Little optimization possibilities

JIT-Compilers:

+ Platform independence

+ Highly optimized and efficient code

+ Runtime optimizations

− High overhead at runtime

T. Bucciarelli 18. Januar 2016 8/25

Page 9: Just-In-Time Compilation · 2016. 2. 1. · Just-In-Time Compilation Goals: I Tries to fill the gap between Interpreter and AOT compilers I Efficiency and platform independency

Profiling

I Necessary for the optimizationI Analysis of the execution and collection of informationI A good profiling is crucial for efficient optimizationsI static or dynamicI Has to produce as less overhead as possible (especially for JIT)

Next slides:I How could a profiler be implemented?I What information could be collected?

T. Bucciarelli 18. Januar 2016 9/25

Page 10: Just-In-Time Compilation · 2016. 2. 1. · Just-In-Time Compilation Goals: I Tries to fill the gap between Interpreter and AOT compilers I Efficiency and platform independency

Profiling: How?

Sampling-based :I Statistical approach: Take samples of the execution stateI Less precise, but very efficientI Does not affect memory management muchI Drawback: A method could be completely undetected

Event-based :I Profiler is triggered by certain eventsI Very specified

T. Bucciarelli 18. Januar 2016 10/25

Page 11: Just-In-Time Compilation · 2016. 2. 1. · Just-In-Time Compilation Goals: I Tries to fill the gap between Interpreter and AOT compilers I Efficiency and platform independency

Profiling: How?

Instrumentation:I Injection of profiling codeI Very flexible, better performance than profiling by another thread

T. Bucciarelli 18. Januar 2016 11/25

Page 12: Just-In-Time Compilation · 2016. 2. 1. · Just-In-Time Compilation Goals: I Tries to fill the gap between Interpreter and AOT compilers I Efficiency and platform independency

Profiling: What?

Call graph:I Graph showing the call-dependencies of the methodsI Edges contain the amount of times this call was performed

Execution Trace:I A trace representing the execution, including timestamps.I Most precise profile

T. Bucciarelli 18. Januar 2016 12/25

Page 13: Just-In-Time Compilation · 2016. 2. 1. · Just-In-Time Compilation Goals: I Tries to fill the gap between Interpreter and AOT compilers I Efficiency and platform independency

Optimization

Optimization:I Static or dynamic/adaptiveI JIT compilers can use both types (but not every technique, because of

their overhead)

Examples for static optimization:I Dead code eliminationI Constant folding and propagationI Loop-invariant code motion

Dynamic optimization on the basis of the Java Virtual Machine

T. Bucciarelli 18. Januar 2016 13/25

Page 14: Just-In-Time Compilation · 2016. 2. 1. · Just-In-Time Compilation Goals: I Tries to fill the gap between Interpreter and AOT compilers I Efficiency and platform independency

JVM: Introduction

I Here: HotSpot and JRockitI AOT compilation of Java source-code to Java bytecodeI JRockit uses JIT and HotSpot uses JIT& InterpreterI Bytecode is assembly-like, and easy to process during runtime

T. Bucciarelli 18. Januar 2016 14/25

Page 15: Just-In-Time Compilation · 2016. 2. 1. · Just-In-Time Compilation Goals: I Tries to fill the gap between Interpreter and AOT compilers I Efficiency and platform independency

JVM: Java Bytecode

What Java bytecode looks like

1 Compiled from " t e s t . java "2 p u b l i c c lass t e s t {3 p u b l i c t e s t ( ) ;4 Code :5 0: aload_06 1: invokespec ia l #1 / / Method java / lang / Object . " <

i n i t > " : ( ) V7 4: r e t u r n8

9 p u b l i c s t a t i c vo id main ( java . lang . S t r i n g [ ] ) ;10 Code :11 0: icons t_512 1: i s t o re_113 2: r e t u r n14 }

T. Bucciarelli 18. Januar 2016 15/25

Page 16: Just-In-Time Compilation · 2016. 2. 1. · Just-In-Time Compilation Goals: I Tries to fill the gap between Interpreter and AOT compilers I Efficiency and platform independency

JRockit structure

T. Bucciarelli 18. Januar 2016 16/25

Page 17: Just-In-Time Compilation · 2016. 2. 1. · Just-In-Time Compilation Goals: I Tries to fill the gap between Interpreter and AOT compilers I Efficiency and platform independency

JVM: HotSpot Optimizations

Hotspot Detection:I Selective optimization: Only optimize parts of the codeI Assumption: the execution mostly resides in a small part of the code

(80/20 rule)I For 80% of the code , interpreting is probably more efficient than

compilingI Detect hot spots and focus on these for compilation and optimization

T. Bucciarelli 18. Januar 2016 17/25

Page 18: Just-In-Time Compilation · 2016. 2. 1. · Just-In-Time Compilation Goals: I Tries to fill the gap between Interpreter and AOT compilers I Efficiency and platform independency

JVM: HotSpot Optimizations

Method Inlining:I Method invokations are time consumingI Copy the code of frequently invokated methods inside their

caller-methodsI Reduces overhead, allows more optimization

Problems:I Recursive calls (infinite inlining, the optimizer has to set a maximum for

the inlining of recursive calls)I Overriding (see next slide)

T. Bucciarelli 18. Januar 2016 18/25

Page 19: Just-In-Time Compilation · 2016. 2. 1. · Just-In-Time Compilation Goals: I Tries to fill the gap between Interpreter and AOT compilers I Efficiency and platform independency

JVM: HotSpot Optimizations

Dynamic deoptimization:I Not every method can be inlinedI If a method is not final, it could possibly be overridden at runtimeI HotSpot speculatively inline methods which are not final (but not

overridden at this moment)I In certain cases, the inlining has to be undone, this is called dynamic

deoptimization

T. Bucciarelli 18. Januar 2016 19/25

Page 20: Just-In-Time Compilation · 2016. 2. 1. · Just-In-Time Compilation Goals: I Tries to fill the gap between Interpreter and AOT compilers I Efficiency and platform independency

JVM: Hotspot Optimizations

Range check elimination:I Java requires strict array bounding checksI Reading, changing and overwriting a value would need two checksI the JVM can check if it is possible for the index value to change between

operationsI Reduces the range check amount

T. Bucciarelli 18. Januar 2016 20/25

Page 21: Just-In-Time Compilation · 2016. 2. 1. · Just-In-Time Compilation Goals: I Tries to fill the gap between Interpreter and AOT compilers I Efficiency and platform independency

JVM: When to use JIT?

I As stated in HotSpot Detection, interpreting is in some cases better thanJIT

I But: How to decide whether a method should be JIT-compiled orinterpreted?

I HotSpot uses heuristic approaches

T. Bucciarelli 18. Januar 2016 21/25

Page 22: Just-In-Time Compilation · 2016. 2. 1. · Just-In-Time Compilation Goals: I Tries to fill the gap between Interpreter and AOT compilers I Efficiency and platform independency

JVM: When to use JIT?

The simple heuristicsI Often executed methods should be compiledI Large methods should also be compiled, even when they are rarely

executedI Decision is based on the amount of executions and size of the methods

T. Bucciarelli 18. Januar 2016 22/25

Page 23: Just-In-Time Compilation · 2016. 2. 1. · Just-In-Time Compilation Goals: I Tries to fill the gap between Interpreter and AOT compilers I Efficiency and platform independency

Example

Example for a simple decision graph:

don’t compile

compile

JIT_MIN_SIZE

JIT_MIN_TIMES

amount of executions

met

hod

size

T. Bucciarelli 18. Januar 2016 23/25

Page 24: Just-In-Time Compilation · 2016. 2. 1. · Just-In-Time Compilation Goals: I Tries to fill the gap between Interpreter and AOT compilers I Efficiency and platform independency

Conclusion

I JIT compilation gives compilers the ability to be highly platformindependent

I Optimizations mostly based on assumptions, which could also havenegative effects

I Important decisions: Optimize? JIT or interpret?

T. Bucciarelli 18. Januar 2016 24/25

Page 25: Just-In-Time Compilation · 2016. 2. 1. · Just-In-Time Compilation Goals: I Tries to fill the gap between Interpreter and AOT compilers I Efficiency and platform independency

Questions?

Thank you for your attention.Questions?

T. Bucciarelli 18. Januar 2016 25/25