Note: you are watching revision 4 of this wiki entry.
(
view plain diff
)
[b][u]compiler tactics:[/u][/b]
[list]
[li]delayed compilation[/li]
[li]tiered compilation[/li]
[li][url=http://java.sun.com/developer/technicalArticles/Networking/HotSpot/onstack.html]on-stack replacement[/url][/li]
[li]delayed re-optimization[/li]
[li][url=http://en.wikipedia.org/wiki/Dependency_graph]program dependence[/url] graph representation[/li]
[li][url=http://en.wikipedia.org/wiki/Static_single_assignment_form]static single assignment representation[/url][/li]
[/list]
[b][u]proof-based techniques:[/u][/b]
[list]
[li]exact [url=http://en.wikipedia.org/wiki/Type_inference]type inference[/url][/li]
[li]memory value inference[/li]
[li]memory value tracking[/li]
[li][url=http://en.wikipedia.org/wiki/Constant_propagation]constant folding[/url][/li]
[li]reassociation[/li]
[li]operator [url=http://en.wikipedia.org/wiki/Strength_reduction]strength reduction[/url][/li]
[li]null check elimination[/li]
[li]type test strength reduction[/li]
[li]type test elimination[/li]
[li]algebraic simplification[/li]
[li][url=http://en.wikipedia.org/wiki/Common_subexpression_elimination]common subexpression elimination[/url][/li]
[li]integer range typing[/li]
[/list]
[b][u]flow-sensitive rewrites:[/u][/b]
[list]
[li]conditional [url=http://en.wikipedia.org/wiki/Constant_propagation]constant propagation[/url][/li]
[li]dominating test detection[/li]
[li]flow-carried type narrowing[/li]
[li][url=http://en.wikipedia.org/wiki/Dead_code_elimination]dead code elimination[/url][/li]
[/list]
[b][u]language-specific techniques:[/u][/b]
[list]
[li]class hierarchy analysis[/li]
[li]devirtualization[/li]
[li]symbolic constant propagation[/li]
[li]autobox elimination[/li]
[li]escape analysis[/li]
[li]scalar replacement[/li]
[li]lock elision[/li]
[li]lock fusion[/li]
[li]de-reflection[/li]
[/list]
[b][u]speculative (profile-based) techniques:[/u][/b]
[list]
[li]optimistic nullness assertions[/li]
[li]optimistic type assertions[/li]
[li]optimistic type strengthening[/li]
[li]optimistic array length strengthening[/li]
[li]untaken branch pruning[/li]
[li]optimistic N-morphic inlining[/li]
[li]branch frequency prediction[/li]
[li]call frequency prediction[/li]
[/list]
[b][u]memory and placement transformation:[/u][/b]
[list]
[li]expression hoisting[/li]
[li]expression sinking[/li]
[li]redundant store elimination[/li]
[li]adjacent store fusion[/li]
[li]card-mark elimination[/li]
[li]merge-point splitting[/li]
[/list]
[b][u]loop transformations:[/u][/b]
[list]
[li][url=http://en.wikipedia.org/wiki/Loop_unrolling]loop unrolling[/url][/li]
[li][url=http://en.wikipedia.org/wiki/Loop_splitting]loop peeling[/url][/li]
[li]safepoint elimination[/li]
[li]iteration range splitting[/li]
[li][url=https://wikis.oracle.com/display/HotSpotInternals/RangeCheckElimination]range check elimination[/url][/li]
[li]loop vectorization[/li]
[/list]
[b][u]global code shaping:[/u][/b]
[list]
[li]inlining (graph integration)[/li]
[li]global code motion[/li]
[li]heat-based code layout[/li]
[li]switch balancing[/li]
[li]throw inlining[/li]
[/list]
[b][u][url=http://en.wikipedia.org/wiki/Control_flow_graph]control flow graph[/url] transformation:[/u][/b]
[list]
[li]local [url=http://en.wikipedia.org/wiki/Instruction_scheduling]code scheduling[/url][/li]
[li]local code bundling[/li]
[li][url=http://en.wikipedia.org/wiki/Delay_slot]delay slot[/url] filling[/li]
[li]graph-coloring [url=http://en.wikipedia.org/wiki/Register_allocation]register allocation[/url][/li]
[li]linear scan [url=http://en.wikipedia.org/wiki/Register_allocation]register allocation[/url][/li]
[li]live range splitting[/li]
[li]copy coalescing[/li]
[li]constant splitting[/li]
[li]copy removal[/li]
[li]address mode matching[/li]
[li]instruction [url=http://en.wikipedia.org/wiki/Peephole_optimization]peepholing[/url][/li]
[li][url=http://en.wikipedia.org/wiki/Data-flow_analysis]DFA[/url]-based [url=http://en.wikipedia.org/wiki/Code_generation_%28compiler%29]code generator[/url][/li]
[/list]
[h3]Addional resources[h3][url=https://wikis.oracle.com/display/HotSpotInternals/PerformanceTechniques]Oracle's guidance page[/url]
List on the HotSpot wiki: [url=https://wikis.oracle.com/display/HotSpotInternals/PerformanceTacticIndex]here[/url]
compiler tactics:proof-based techniques:flow-sensitive rewrites:language-specific techniques:- class hierarchy analysis
- devirtualization
- symbolic constant propagation
- autobox elimination
- escape analysis
- scalar replacement
- lock elision
- lock fusion
- de-reflection
speculative (profile-based) techniques:- optimistic nullness assertions
- optimistic type assertions
- optimistic type strengthening
- optimistic array length strengthening
- untaken branch pruning
- optimistic N-morphic inlining
- branch frequency prediction
- call frequency prediction
memory and placement transformation:- expression hoisting
- expression sinking
- redundant store elimination
- adjacent store fusion
- card-mark elimination
- merge-point splitting
loop transformations:global code shaping:- inlining (graph integration)
- global code motion
- heat-based code layout
- switch balancing
- throw inlining
control flow graph transformation:
This wiki entry has had 4 revisions with contributions from 2 members.
(
more info)