Eliminating Abstraction Overhead of Java Stream Pipelines using Ahead-of-Time Program Optimization
summary
Streamliner is an ahead-of-time optimizer that inlines Java Stream pipelines by using a precise must-points-to pointer analysis, aggressive inlining, stack allocation of objects, and bytecode cleanup implemented with ASM. The prototype transforms pipelines into imperative-style loops, matches performance of hand-written loops for 10 of 11 benchmarks, and succeeds on 77% of pipelines sampled from 28 real projects, with failures and conditions documented for future work.
AI-written summary · about
chapters (12)
- 0:00Intro
- 0:12Motivation
- 2:31Mitigating abstraction overhead
- 3:21Key observation
- 3:34Streamliner approach
- 4:19pre-analysis Goal: Identify pipelines and collection source types
- 4:52main analysis
- 6:49transformation
- 8:55Cleanup
- 10:12RQ1 - Performance evaluation
- 11:15RQ2 - Optimization of general programs Does the analysis work for larger programs?
- 11:56Conclusion
related talks
10mJava streams performance and optimization
47mStreams – Below the Surface
16mCompile-Time Java Stream Fusion via mapMulti
47mWhen Greed Is Good: Understanding Java Stream Performance
19mCompile-Time Java Stream Fusion via mapMulti
42mStreams in the Wild
46mThinking in Streams
51mIf Streams Are So Great, Let’s Use Them Everywhere... Right??
