Clash of the Lambdas
Abstract
The introduction of lambdas in Java 8 completes the slate of statically-typed, mainstream languages with both object-oriented and functional features. The main motivation for lambdas in Java has been to facilitate stream-based declarative APIs, and, therefore, easier parallelism. In this paper, we evaluate the performance impact of lambda abstraction employed in stream processing, for a variety of high-level languages that run on a virtual machine (C#, F#, Java and Scala) and runtime platforms (JVM on Linux and Windows, .NET CLR for Windows, Mono for Linux). Furthermore, we evaluate the performance gain that two optimizing libraries (ScalaBlitz and LinqOptimizer) can offer for C#, F# and Scala. Our study is based on small-scale throughput-benchmarking, with significant care to isolate different factors, consult experts on the systems involved, and identify causes and opportunities. We find that Java exhibits high implementation maturity, which is a dominant factor in benchmarks. At the same time, optimizing frameworks can be highly effective for common query patterns.
- Publication:
-
arXiv e-prints
- Pub Date:
- June 2014
- DOI:
- 10.48550/arXiv.1406.6631
- arXiv:
- arXiv:1406.6631
- Bibcode:
- 2014arXiv1406.6631B
- Keywords:
-
- Computer Science - Programming Languages
- E-Print:
- In the revised version: 1) we used a fixed heap with 3GB. The GC throughput was improved and results are more balanced, 2) we discussed briefly why we chose not to use targeted JVM flags, 3) we discussed @specialized and miniboxing, 4) we added a new benchmark that tests a streaming operation that avoids automatic boxing of our input data and 5) a subtitle was added