SlideShare une entreprise Scribd logo
1  sur  45
Télécharger pour lire hors ligne
Performance of Java 8 
and beyond 
Performance van Java 8 en verder 
By Jeroen Borgers 
1
Contents 
1. Introduction 
2. Lambda expressions 
3. Stream API 
4. Parallel execution & cores 
5. Filter map reduce, parallel streams internals 
6. Fork-join framework use 
7. Lambda’s versus inner classes 
8. Tiered compilation 
9. PermGen removal 
10.java.time performance 
11.Accumulators en Adders 
12.Map improvements 
13.Java 9+ improvements 
14.Utilization of GPU's 
15.Value Types 
16.Arrays 2.0 
17.Summary and conclusions 2
Introduction to lambdas and streams 
• Java 8 introduces lambda expressions for functional 
programming 
• With the Stream API iteration can be handled internally by a 
library 
• Tell don’t ask for applying a function on a collection 
• or tell to do that in parallel, on multiple cores 
• question is if this improves your response time 
3
Lambda expressions and streams 
• Example 
4
Lambda expressions and streams 
• Example with method references 
5
Lambda expressions: short notation 
• instance of anonymous inner class of functional interface 
• functional interface has only one abstract method 
• Runnable: void run() 
• Executor: void execute(Runnable r) 
• Iterable<T>: Iterator<T> iterator() 
• new: java.util.function 
• Consumer<T>: void accept(T t) 
• Function<T, R>: R apply(T t) 
• Predicate<T>: boolean test(T t) 
• Annotation: @FunctionalInterface 
6
Anonymous inner class instance example 
7
Inner class has boiler plate code 
8
Lambda expression is concise 
9
Stream pipeline 
Source Intermediate operations 
lazy evaluation 
10 
Terminal operations 
eager evaluation
Stream lazy evaluation 
11
Stream lazy evaluation optimizes with short-circuiting 
- can be big win 
12
Stream executed in parallel 
13
Parallel execution & hardware threads 
• Parallel != concurrent 
• CPU Frequency at max 
• #cores/hardware threads increase 64+ 
• Must be able to utilize those cores 
• need to process data faster: BigData, IoT 
• Runtime.getRuntime().availableProcessors() 
• reports #hardware threads 
• my Mac: 2 cores with 2 hyper threads = 4 
• Can we get a speedup of ~4? 
14
Parallel streams utilize ForkJoinPool 
• Java 8 ForkJoinPool introduces a common pool for any ForkJoinTask 
• one per JVM 
• Used in Array.parallelSort, .parallelSetAll and parallelStream 
• Size defaults to Runtime.getRuntime().availableProcessors() - 1 
• Can be set with: 
• -Djava.util.concurrent.ForkJoinPool.common.parallelism=N 
• Multiple JVM’s on a machine 
• consider lowering the pool size 
• Tasks waiting for I/O 
• consider increasing the pool size 
15
Fork-join framework: divide-and-conquer 
• Divide task recursively in smaller tasks 
• Divide array of 640 elements into 64 
leaf tasks of 10 elements 
• e.g. sum or sort on each level 
• Many ForkJoinTasks processed by 
limited threads, e.g. ForEachTask 
• like ThreadPoolExecutor 
• worse: overhead of creating tasks 
• better: work stealing from queue 
of other threads 
• great for unbalanced tasks! 
16
Performance of Lambda’s versus inner classes 
• Lambdas seem syntactic sugar around creating anonymous class 
• in fact, it is not 
• Inner class 
• Actual class loaded by class loader 
• New object created, allocation, initialization, gc 
• Lambda 
• creates a static method called through helper class 
• Performance is similar 
• Only first time loading inner class in class loader is slower 
17
When to use parallel streams? 
• source.parallelStream().operation(F) 
• F independent 
• computation on element does not rely on or impact other 
• stateless, non-interfering 
• source is efficiently splittable 
• Collections, Arrays, SplittableRandom 
• not I/O based: designed for sequential use 
• computationally expensive 
• ROT: sequential version > 100 μs 
18
Parallel when computationally expensive 
• source.parallelStream().operation(F) 
• ROT: sequential version > 100 μs 
• N * Q > 10 000 
• N = #elements 
• Q = cost per element of F: #operations 
• small function like x -> x * x: N > 10 000 elements 
• moderately large function Q = 100: N > 100 elements 
19
Overhead of parallel execution 
• Startup of power-controlled cores 
• Sequential part of setting up parallel calculation 
• Splittability = ease of partitioning 
• efficient if random access or efficient search: 
• ArrayLists, [Concurrent]HashMaps, arrays 
• inefficient: LinkedLists, BlockingQueues, IO-based 
• Stream BufferedReader.lines() currently for sequential 
use 
• might by improved in future JDK, for highly efficient 
bulk processing of buffered IO 
20
Creating the micro benchmark 
Tiny calculation per element 
21
Creating the micro benchmark 2 
22
Micro benchmark demo 
23
Medium sized calculation benchmark 
• 1000 elements 
• Speedup by using serial lambda's = 0.95884454 
• Speedup of parallel over serial lambda's= 1.2968781 
• Speedup of parallel over oldSchool = 1.2435045 
• 100_000 elements 
• Speedup by using serial lambda's = 0.9760258 
• Speedup of parallel over serial lambda's= 2.1337924 
• Speedup of parallel over oldSchool = 2.0826366 
24
Utilization of cores 
Medium calculation, 1000 and 100_000 elements 
Parallel part 25
26
27
Tiny calculation benchmark 
• 1000 elements 
• Speedup by using serial lambda's = 0.12944984 
• Speedup of parallel over serial lambda's= 0.46804 
• Speedup of parallel over oldSchool = 0.0605877 
• 100_000 elements 
• Speedup by using serial lambda's = 0.10920245 
• Speedup of parallel over serial lambda's= 5.905797 
• Speedup of parallel over oldSchool = 0.64492756 
28
Utilization of cores 
Tiny calculation, 1000 and 100_000 elements 
29
Micro benchmark conclusions 
(for this benchmark, on this computer) 
• For high performance and small functions: use old school loops 
• lambda’s infrastructure takes more overhead than function 
• For high performance and large functions 
• serial 
• if N * Q > 100 000 then parallel 
• I need more cores! 
30
Tiered compilation 
• JIT-compiler came in 2 flavors, now 3 
• -client (C1) 
• quick startup time 
• -server (C2) 
• best performance in long run 
• -XX:+TieredCompilation 
• first C1, then C2 
• only Java 8: TieredCompilation default 
• Java 7: often need to increase code cache 
• -XX:ReservedCodeCacheSize=96M (7) 240M (8) 
31
Permgen removal 
• Upto Java 7: Permgen; Java 8: Metaspace 
• Permgen (wrong name) 
• data not related to classes: String pool 
• Metaspace 
• only class meta data 
• Class objects itself on heap 
• String pool on heap 
• -XX:[Max]MetaspaceSize=N 
• Default max ‘unlimited’ (1 GB) 
• OutOfMemoryError: Metaspace instead of PermGen space 
32
java.time performance 
• Finally a proper library for Date and Time that replaces the 
• Crappy stuff: 
• java.util.Date 
• mutable - defensive copies needed 
• java.util.Calendar 
• 540 bytes to store timestamp, Locale, TZ - heap/gc 
• java.text.SimpleDateFormat 
• not thread safe - so have to re-create 
• Stephen Colebourne spec lead, from Joda time 
33
java.util.concurrent.atomic 
Accumulators and Adders 
34
Map improvements 
• HashMap, LinkedHashMap and 
ConcurrentHashMap 
• collisions on keys: keys end up in same bucket 
• access time O(1) -> O(n) 
• follow LinkedList until key.equals() returns 
true 
• Balanced tree instead of linked list 
• if size > TREEIFY_THRESHOLD (8) 
• worst case access time O(n) -> O(log(n)) 
• keys should implement Comparable 
• branches on hashCode, then compareTo 
35
Java 9+ performance improvements 
36
Sumatra: Utilization of GPU's 
• GPU’s have 100_000’s of stream cores 
• SIMD - single instruction multiple data 
• work offloaded to GPU 
• implemented off-loadable version of parallel().forEach() 
• Use parallel streams and lambdas 
37
Value Types (JEP 169) 
The next big thing! 
• Currently: 
• limited set of primitives, by value: no identity 
• others by reference: identity 
• footprint: 
• heap allocated 
• object headers 
• 1+ pointers pointing to it 
• burden for small objects 
• object identity only serves mutability 
• JVM attempts to figure out if identity is needed 
• escape analysis and object elision can unwrap in cases 
• fragile 
• Object might be used as lock, then needs identity 
38
Integer overhead 
39 
mark word class pointer value 
object pointer 
value
Point example 
40
Point - class versus value type 
• Point object layout 
• @Value Point layout 
41 
mark word class pointer x 
object pointer 
x 
y padding 
y
Arrays 2.0 Improvements 
• array[(long)i] = 5; 
• array[i, j, k] = 7; 
• Arrays.chop(T[] a, int newLen); 
• prevents copying in StringBuilder.toString() 
• arrays become real Java objects 
• indexes of other types than int, long 
• like Map 
• thread-safe access for array slices 
• final/volatile 
42
• Summary and conclusions 
• Lamdas and streams offer possible performance improvement 
• lazy evaluation 
• tiny calcs or small #elements & medium size calc 
• don’t use parallel() 
• consider old school iterations if performance important 
• Many performance improvements in Java 8 
• Use it if you can and get better performance 
• Several performance improvements planned for Java 9+ (10?) 
• Better support for Big Data & number crunching 
43
Want to know more? 
• www.jpinpoint.com / www.profactive.com 
• references, presentations 
• Accelerating Java Applications 
• 3 days technical training 
• 24-25-26 November 2014 
• nl-jug members 10% discount 
• hand-in business card today: 20% discount 
44
Questions? 
45

Contenu connexe

Tendances

Debugging Your Production JVM
Debugging Your Production JVMDebugging Your Production JVM
Debugging Your Production JVMkensipe
 
Machine learning with Apache Spark MLlib | Big Data Hadoop Spark Tutorial | C...
Machine learning with Apache Spark MLlib | Big Data Hadoop Spark Tutorial | C...Machine learning with Apache Spark MLlib | Big Data Hadoop Spark Tutorial | C...
Machine learning with Apache Spark MLlib | Big Data Hadoop Spark Tutorial | C...CloudxLab
 
Ge aviation spark application experience porting analytics into py spark ml p...
Ge aviation spark application experience porting analytics into py spark ml p...Ge aviation spark application experience porting analytics into py spark ml p...
Ge aviation spark application experience porting analytics into py spark ml p...Databricks
 
Weaving Dataflows with Silk - ScalaMatsuri 2014, Tokyo
Weaving Dataflows with Silk - ScalaMatsuri 2014, TokyoWeaving Dataflows with Silk - ScalaMatsuri 2014, Tokyo
Weaving Dataflows with Silk - ScalaMatsuri 2014, TokyoTaro L. Saito
 
Introduction to Scala | Big Data Hadoop Spark Tutorial | CloudxLab
Introduction to Scala | Big Data Hadoop Spark Tutorial | CloudxLabIntroduction to Scala | Big Data Hadoop Spark Tutorial | CloudxLab
Introduction to Scala | Big Data Hadoop Spark Tutorial | CloudxLabCloudxLab
 
Introduction of failsafe
Introduction of failsafeIntroduction of failsafe
Introduction of failsafeSunghyouk Bae
 
Spark schema for free with David Szakallas
Spark schema for free with David SzakallasSpark schema for free with David Szakallas
Spark schema for free with David SzakallasDatabricks
 
JVM @ Taobao - QCon Hangzhou 2011
JVM @ Taobao - QCon Hangzhou 2011JVM @ Taobao - QCon Hangzhou 2011
JVM @ Taobao - QCon Hangzhou 2011Kris Mok
 
CBStreams - Java Streams for ColdFusion (CFML)
CBStreams - Java Streams for ColdFusion (CFML)CBStreams - Java Streams for ColdFusion (CFML)
CBStreams - Java Streams for ColdFusion (CFML)Ortus Solutions, Corp
 
An Introduction to Higher Order Functions in Spark SQL with Herman van Hovell
An Introduction to Higher Order Functions in Spark SQL with Herman van HovellAn Introduction to Higher Order Functions in Spark SQL with Herman van Hovell
An Introduction to Higher Order Functions in Spark SQL with Herman van HovellDatabricks
 
Flink Forward SF 2017: Dean Wampler - Streaming Deep Learning Scenarios with...
Flink Forward SF 2017: Dean Wampler -  Streaming Deep Learning Scenarios with...Flink Forward SF 2017: Dean Wampler -  Streaming Deep Learning Scenarios with...
Flink Forward SF 2017: Dean Wampler - Streaming Deep Learning Scenarios with...Flink Forward
 
Reactive programming with RxJava
Reactive programming with RxJavaReactive programming with RxJava
Reactive programming with RxJavaJobaer Chowdhury
 
Machine Learning using Apache Spark MLlib
Machine Learning using Apache Spark MLlibMachine Learning using Apache Spark MLlib
Machine Learning using Apache Spark MLlibIMC Institute
 
Solr Troubleshooting - Treemap Approach: Presented by Alexandre Rafolovitch, ...
Solr Troubleshooting - Treemap Approach: Presented by Alexandre Rafolovitch, ...Solr Troubleshooting - Treemap Approach: Presented by Alexandre Rafolovitch, ...
Solr Troubleshooting - Treemap Approach: Presented by Alexandre Rafolovitch, ...Lucidworks
 
Combining Machine Learning Frameworks with Apache Spark
Combining Machine Learning Frameworks with Apache SparkCombining Machine Learning Frameworks with Apache Spark
Combining Machine Learning Frameworks with Apache SparkDatabricks
 
Starr Bloom T.C.P. using Hadoop on Yahoo's M45 Cluster (20100112)
Starr Bloom T.C.P. using Hadoop on Yahoo's M45 Cluster (20100112)Starr Bloom T.C.P. using Hadoop on Yahoo's M45 Cluster (20100112)
Starr Bloom T.C.P. using Hadoop on Yahoo's M45 Cluster (20100112)Dan Starr
 
Martin Odersky - Evolution of Scala
Martin Odersky - Evolution of ScalaMartin Odersky - Evolution of Scala
Martin Odersky - Evolution of ScalaScala Italy
 
Objective-C Is Not Java
Objective-C Is Not JavaObjective-C Is Not Java
Objective-C Is Not JavaChris Adamson
 

Tendances (20)

Apache Storm
Apache StormApache Storm
Apache Storm
 
Debugging Your Production JVM
Debugging Your Production JVMDebugging Your Production JVM
Debugging Your Production JVM
 
Machine learning with Apache Spark MLlib | Big Data Hadoop Spark Tutorial | C...
Machine learning with Apache Spark MLlib | Big Data Hadoop Spark Tutorial | C...Machine learning with Apache Spark MLlib | Big Data Hadoop Spark Tutorial | C...
Machine learning with Apache Spark MLlib | Big Data Hadoop Spark Tutorial | C...
 
Ge aviation spark application experience porting analytics into py spark ml p...
Ge aviation spark application experience porting analytics into py spark ml p...Ge aviation spark application experience porting analytics into py spark ml p...
Ge aviation spark application experience porting analytics into py spark ml p...
 
Weaving Dataflows with Silk - ScalaMatsuri 2014, Tokyo
Weaving Dataflows with Silk - ScalaMatsuri 2014, TokyoWeaving Dataflows with Silk - ScalaMatsuri 2014, Tokyo
Weaving Dataflows with Silk - ScalaMatsuri 2014, Tokyo
 
Introduction to Scala | Big Data Hadoop Spark Tutorial | CloudxLab
Introduction to Scala | Big Data Hadoop Spark Tutorial | CloudxLabIntroduction to Scala | Big Data Hadoop Spark Tutorial | CloudxLab
Introduction to Scala | Big Data Hadoop Spark Tutorial | CloudxLab
 
Introduction of failsafe
Introduction of failsafeIntroduction of failsafe
Introduction of failsafe
 
Spark schema for free with David Szakallas
Spark schema for free with David SzakallasSpark schema for free with David Szakallas
Spark schema for free with David Szakallas
 
JVM @ Taobao - QCon Hangzhou 2011
JVM @ Taobao - QCon Hangzhou 2011JVM @ Taobao - QCon Hangzhou 2011
JVM @ Taobao - QCon Hangzhou 2011
 
CBStreams - Java Streams for ColdFusion (CFML)
CBStreams - Java Streams for ColdFusion (CFML)CBStreams - Java Streams for ColdFusion (CFML)
CBStreams - Java Streams for ColdFusion (CFML)
 
An Introduction to Higher Order Functions in Spark SQL with Herman van Hovell
An Introduction to Higher Order Functions in Spark SQL with Herman van HovellAn Introduction to Higher Order Functions in Spark SQL with Herman van Hovell
An Introduction to Higher Order Functions in Spark SQL with Herman van Hovell
 
Lecture1
Lecture1Lecture1
Lecture1
 
Flink Forward SF 2017: Dean Wampler - Streaming Deep Learning Scenarios with...
Flink Forward SF 2017: Dean Wampler -  Streaming Deep Learning Scenarios with...Flink Forward SF 2017: Dean Wampler -  Streaming Deep Learning Scenarios with...
Flink Forward SF 2017: Dean Wampler - Streaming Deep Learning Scenarios with...
 
Reactive programming with RxJava
Reactive programming with RxJavaReactive programming with RxJava
Reactive programming with RxJava
 
Machine Learning using Apache Spark MLlib
Machine Learning using Apache Spark MLlibMachine Learning using Apache Spark MLlib
Machine Learning using Apache Spark MLlib
 
Solr Troubleshooting - Treemap Approach: Presented by Alexandre Rafolovitch, ...
Solr Troubleshooting - Treemap Approach: Presented by Alexandre Rafolovitch, ...Solr Troubleshooting - Treemap Approach: Presented by Alexandre Rafolovitch, ...
Solr Troubleshooting - Treemap Approach: Presented by Alexandre Rafolovitch, ...
 
Combining Machine Learning Frameworks with Apache Spark
Combining Machine Learning Frameworks with Apache SparkCombining Machine Learning Frameworks with Apache Spark
Combining Machine Learning Frameworks with Apache Spark
 
Starr Bloom T.C.P. using Hadoop on Yahoo's M45 Cluster (20100112)
Starr Bloom T.C.P. using Hadoop on Yahoo's M45 Cluster (20100112)Starr Bloom T.C.P. using Hadoop on Yahoo's M45 Cluster (20100112)
Starr Bloom T.C.P. using Hadoop on Yahoo's M45 Cluster (20100112)
 
Martin Odersky - Evolution of Scala
Martin Odersky - Evolution of ScalaMartin Odersky - Evolution of Scala
Martin Odersky - Evolution of Scala
 
Objective-C Is Not Java
Objective-C Is Not JavaObjective-C Is Not Java
Objective-C Is Not Java
 

En vedette

Java 8 from perm gen to metaspace
Java 8  from perm gen to metaspaceJava 8  from perm gen to metaspace
Java 8 from perm gen to metaspaceMohammad Faizan
 
High Performance With Java
High Performance With JavaHigh Performance With Java
High Performance With Javamalduarte
 
Creating High Performance Big Data Applications with the Java Persistence API
Creating High Performance Big Data Applications with the Java Persistence APICreating High Performance Big Data Applications with the Java Persistence API
Creating High Performance Big Data Applications with the Java Persistence APIDATAVERSITY
 
High Performance Web Design
High Performance Web DesignHigh Performance Web Design
High Performance Web DesignKoji Ishimoto
 
Java Performance
Java PerformanceJava Performance
Java PerformanceSSA KPI
 
Java Performance & Profiling
Java Performance & ProfilingJava Performance & Profiling
Java Performance & ProfilingIsuru Perera
 
Microservices for performance - GOTO Chicago 2016
Microservices for performance - GOTO Chicago 2016Microservices for performance - GOTO Chicago 2016
Microservices for performance - GOTO Chicago 2016Peter Lawrey
 
Java Performance, Threading and Concurrent Data Structures
Java Performance, Threading and Concurrent Data StructuresJava Performance, Threading and Concurrent Data Structures
Java Performance, Threading and Concurrent Data StructuresHitendra Kumar
 
High performance java ee with j cache and cdi
High performance java ee with j cache and cdiHigh performance java ee with j cache and cdi
High performance java ee with j cache and cdiPayara
 
SSO with the WSO2 Identity Server
SSO with the WSO2 Identity ServerSSO with the WSO2 Identity Server
SSO with the WSO2 Identity ServerWSO2
 
Practical Steps For Building High Performance Teams
Practical Steps For Building High Performance TeamsPractical Steps For Building High Performance Teams
Practical Steps For Building High Performance TeamsElijah Ezendu
 
High-performance Team Development
High-performance Team DevelopmentHigh-performance Team Development
High-performance Team DevelopmentPeter Pfeiffer
 
Leading High Performance Teams
Leading High Performance TeamsLeading High Performance Teams
Leading High Performance TeamsUbersoldat
 
WSO2 Identity Server 5.3.0 - Product Release Webinar
WSO2 Identity Server 5.3.0 - Product Release WebinarWSO2 Identity Server 5.3.0 - Product Release Webinar
WSO2 Identity Server 5.3.0 - Product Release WebinarWSO2
 
High Performance Java EE with JCache and CDI
High Performance Java EE with JCache and CDIHigh Performance Java EE with JCache and CDI
High Performance Java EE with JCache and CDIPayara
 
High Performance Flow Matching Architecture for Openflow Data Plane
High Performance Flow Matching Architecture for Openflow Data PlaneHigh Performance Flow Matching Architecture for Openflow Data Plane
High Performance Flow Matching Architecture for Openflow Data PlaneMahesh Dananjaya
 

En vedette (20)

Java 8 from perm gen to metaspace
Java 8  from perm gen to metaspaceJava 8  from perm gen to metaspace
Java 8 from perm gen to metaspace
 
Java performance
Java performanceJava performance
Java performance
 
High Performance With Java
High Performance With JavaHigh Performance With Java
High Performance With Java
 
Creating High Performance Big Data Applications with the Java Persistence API
Creating High Performance Big Data Applications with the Java Persistence APICreating High Performance Big Data Applications with the Java Persistence API
Creating High Performance Big Data Applications with the Java Persistence API
 
Optimizing Java Performance
Optimizing Java PerformanceOptimizing Java Performance
Optimizing Java Performance
 
High Performance Web Design
High Performance Web DesignHigh Performance Web Design
High Performance Web Design
 
Java Performance
Java PerformanceJava Performance
Java Performance
 
Java Performance & Profiling
Java Performance & ProfilingJava Performance & Profiling
Java Performance & Profiling
 
WSO2 Identity Server
WSO2 Identity ServerWSO2 Identity Server
WSO2 Identity Server
 
Microservices for performance - GOTO Chicago 2016
Microservices for performance - GOTO Chicago 2016Microservices for performance - GOTO Chicago 2016
Microservices for performance - GOTO Chicago 2016
 
Java Performance, Threading and Concurrent Data Structures
Java Performance, Threading and Concurrent Data StructuresJava Performance, Threading and Concurrent Data Structures
Java Performance, Threading and Concurrent Data Structures
 
High performance java ee with j cache and cdi
High performance java ee with j cache and cdiHigh performance java ee with j cache and cdi
High performance java ee with j cache and cdi
 
SSO with the WSO2 Identity Server
SSO with the WSO2 Identity ServerSSO with the WSO2 Identity Server
SSO with the WSO2 Identity Server
 
Practical Steps For Building High Performance Teams
Practical Steps For Building High Performance TeamsPractical Steps For Building High Performance Teams
Practical Steps For Building High Performance Teams
 
High-performance Team Development
High-performance Team DevelopmentHigh-performance Team Development
High-performance Team Development
 
Leading High Performance Teams
Leading High Performance TeamsLeading High Performance Teams
Leading High Performance Teams
 
WSO2 Identity Server 5.3.0 - Product Release Webinar
WSO2 Identity Server 5.3.0 - Product Release WebinarWSO2 Identity Server 5.3.0 - Product Release Webinar
WSO2 Identity Server 5.3.0 - Product Release Webinar
 
High Performance Java EE with JCache and CDI
High Performance Java EE with JCache and CDIHigh Performance Java EE with JCache and CDI
High Performance Java EE with JCache and CDI
 
SAML Smackdown
SAML SmackdownSAML Smackdown
SAML Smackdown
 
High Performance Flow Matching Architecture for Openflow Data Plane
High Performance Flow Matching Architecture for Openflow Data PlaneHigh Performance Flow Matching Architecture for Openflow Data Plane
High Performance Flow Matching Architecture for Openflow Data Plane
 

Similaire à Performance van Java 8 en verder - Jeroen Borgers

Composable Futures with Akka 2.0
Composable Futures with Akka 2.0Composable Futures with Akka 2.0
Composable Futures with Akka 2.0Mike Slinn
 
Solr Black Belt Pre-conference
Solr Black Belt Pre-conferenceSolr Black Belt Pre-conference
Solr Black Belt Pre-conferenceErik Hatcher
 
Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)Ryan Cuprak
 
Groovy concurrency
Groovy concurrencyGroovy concurrency
Groovy concurrencyAlex Miller
 
A full Machine learning pipeline in Scikit-learn vs in scala-Spark: pros and ...
A full Machine learning pipeline in Scikit-learn vs in scala-Spark: pros and ...A full Machine learning pipeline in Scikit-learn vs in scala-Spark: pros and ...
A full Machine learning pipeline in Scikit-learn vs in scala-Spark: pros and ...Jose Quesada (hiring)
 
A brief tour of modern Java
A brief tour of modern JavaA brief tour of modern Java
A brief tour of modern JavaSina Madani
 
Scala, Play 2.0 & Cloud Foundry
Scala, Play 2.0 & Cloud FoundryScala, Play 2.0 & Cloud Foundry
Scala, Play 2.0 & Cloud FoundryPray Desai
 
Java SE 8 - New Features
Java SE 8 - New FeaturesJava SE 8 - New Features
Java SE 8 - New FeaturesNaveen Hegde
 
JDK8 Functional API
JDK8 Functional APIJDK8 Functional API
JDK8 Functional APIJustin Lin
 
Charles Sharp: Java 8 Streams
Charles Sharp: Java 8 StreamsCharles Sharp: Java 8 Streams
Charles Sharp: Java 8 Streamsjessitron
 
On-boarding with JanusGraph Performance
On-boarding with JanusGraph PerformanceOn-boarding with JanusGraph Performance
On-boarding with JanusGraph PerformanceChin Huang
 
What's new in Java 8
What's new in Java 8What's new in Java 8
What's new in Java 8Kyle Smith
 
Data Summer Conf 2018, “Hands-on with Apache Spark for Beginners (ENG)” — Akm...
Data Summer Conf 2018, “Hands-on with Apache Spark for Beginners (ENG)” — Akm...Data Summer Conf 2018, “Hands-on with Apache Spark for Beginners (ENG)” — Akm...
Data Summer Conf 2018, “Hands-on with Apache Spark for Beginners (ENG)” — Akm...Provectus
 
Spring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard WolffSpring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard WolffJAX London
 
mongodb-aggregation-may-2012
mongodb-aggregation-may-2012mongodb-aggregation-may-2012
mongodb-aggregation-may-2012Chris Westin
 

Similaire à Performance van Java 8 en verder - Jeroen Borgers (20)

Composable Futures with Akka 2.0
Composable Futures with Akka 2.0Composable Futures with Akka 2.0
Composable Futures with Akka 2.0
 
Solr Black Belt Pre-conference
Solr Black Belt Pre-conferenceSolr Black Belt Pre-conference
Solr Black Belt Pre-conference
 
Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)
 
Groovy concurrency
Groovy concurrencyGroovy concurrency
Groovy concurrency
 
A full Machine learning pipeline in Scikit-learn vs in scala-Spark: pros and ...
A full Machine learning pipeline in Scikit-learn vs in scala-Spark: pros and ...A full Machine learning pipeline in Scikit-learn vs in scala-Spark: pros and ...
A full Machine learning pipeline in Scikit-learn vs in scala-Spark: pros and ...
 
A brief tour of modern Java
A brief tour of modern JavaA brief tour of modern Java
A brief tour of modern Java
 
Scala, Play 2.0 & Cloud Foundry
Scala, Play 2.0 & Cloud FoundryScala, Play 2.0 & Cloud Foundry
Scala, Play 2.0 & Cloud Foundry
 
Java SE 8 - New Features
Java SE 8 - New FeaturesJava SE 8 - New Features
Java SE 8 - New Features
 
JDK8 Functional API
JDK8 Functional APIJDK8 Functional API
JDK8 Functional API
 
Charles Sharp: Java 8 Streams
Charles Sharp: Java 8 StreamsCharles Sharp: Java 8 Streams
Charles Sharp: Java 8 Streams
 
Lambdas in Java 8
Lambdas in Java 8Lambdas in Java 8
Lambdas in Java 8
 
On-boarding with JanusGraph Performance
On-boarding with JanusGraph PerformanceOn-boarding with JanusGraph Performance
On-boarding with JanusGraph Performance
 
What's new in Java 8
What's new in Java 8What's new in Java 8
What's new in Java 8
 
Java Memory Analysis: Problems and Solutions
Java Memory Analysis: Problems and SolutionsJava Memory Analysis: Problems and Solutions
Java Memory Analysis: Problems and Solutions
 
Java8
Java8Java8
Java8
 
Data Summer Conf 2018, “Hands-on with Apache Spark for Beginners (ENG)” — Akm...
Data Summer Conf 2018, “Hands-on with Apache Spark for Beginners (ENG)” — Akm...Data Summer Conf 2018, “Hands-on with Apache Spark for Beginners (ENG)” — Akm...
Data Summer Conf 2018, “Hands-on with Apache Spark for Beginners (ENG)” — Akm...
 
Java 8
Java 8Java 8
Java 8
 
CDN algos
CDN algosCDN algos
CDN algos
 
Spring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard WolffSpring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard Wolff
 
mongodb-aggregation-may-2012
mongodb-aggregation-may-2012mongodb-aggregation-may-2012
mongodb-aggregation-may-2012
 

Plus de NLJUG

The future of Web-Scale - Johan Tillema, Rene Boere & Chris Quach
The future of Web-Scale - Johan Tillema, Rene Boere & Chris QuachThe future of Web-Scale - Johan Tillema, Rene Boere & Chris Quach
The future of Web-Scale - Johan Tillema, Rene Boere & Chris QuachNLJUG
 
Speedy perception trumps speedy reception–smart asynchronous interactions - L...
Speedy perception trumps speedy reception–smart asynchronous interactions - L...Speedy perception trumps speedy reception–smart asynchronous interactions - L...
Speedy perception trumps speedy reception–smart asynchronous interactions - L...NLJUG
 
Decoding the airspace above you with Java and $7 hardware - Bert Jan Schrijver
Decoding the airspace above you with Java and $7 hardware - Bert Jan SchrijverDecoding the airspace above you with Java and $7 hardware - Bert Jan Schrijver
Decoding the airspace above you with Java and $7 hardware - Bert Jan SchrijverNLJUG
 
Using Docker to Develop, Test and Run Maven Projects - Wouter Danes
Using Docker to Develop, Test and Run Maven Projects - Wouter DanesUsing Docker to Develop, Test and Run Maven Projects - Wouter Danes
Using Docker to Develop, Test and Run Maven Projects - Wouter DanesNLJUG
 
Kill the mutants and test your tests - Roy van Rijn
Kill the mutants and test your tests - Roy van RijnKill the mutants and test your tests - Roy van Rijn
Kill the mutants and test your tests - Roy van RijnNLJUG
 
Real-time user interfaces - sosm gewoon makkelijker - Allard Buijze
Real-time user interfaces - sosm gewoon makkelijker - Allard BuijzeReal-time user interfaces - sosm gewoon makkelijker - Allard Buijze
Real-time user interfaces - sosm gewoon makkelijker - Allard BuijzeNLJUG
 
The end of traditional enterprise IT - ING's journey to the next generation I...
The end of traditional enterprise IT - ING's journey to the next generation I...The end of traditional enterprise IT - ING's journey to the next generation I...
The end of traditional enterprise IT - ING's journey to the next generation I...NLJUG
 
Introduction to Reactive with Play and Akka - Markus Jura
Introduction to Reactive with Play and Akka - Markus JuraIntroduction to Reactive with Play and Akka - Markus Jura
Introduction to Reactive with Play and Akka - Markus JuraNLJUG
 
Web-scale op basis van Hadoop en Akka Reactive Streams - Johan Tillema, Rene ...
Web-scale op basis van Hadoop en Akka Reactive Streams - Johan Tillema, Rene ...Web-scale op basis van Hadoop en Akka Reactive Streams - Johan Tillema, Rene ...
Web-scale op basis van Hadoop en Akka Reactive Streams - Johan Tillema, Rene ...NLJUG
 
Workshop angular dart presentatie - Atos
Workshop angular dart presentatie - AtosWorkshop angular dart presentatie - Atos
Workshop angular dart presentatie - AtosNLJUG
 
Workshop spring boot presentatie - Atos
Workshop spring boot presentatie - AtosWorkshop spring boot presentatie - Atos
Workshop spring boot presentatie - AtosNLJUG
 
Cultivating the jenkins job jungle with groovy - Patrick van Dissel
Cultivating the jenkins job jungle with groovy - Patrick van DisselCultivating the jenkins job jungle with groovy - Patrick van Dissel
Cultivating the jenkins job jungle with groovy - Patrick van DisselNLJUG
 
Rethink your architecture - Marten Deinum
Rethink your architecture - Marten DeinumRethink your architecture - Marten Deinum
Rethink your architecture - Marten DeinumNLJUG
 
Evolutionary Algorithms: the key to solving complex Java puzzles! - Bas knopper
Evolutionary Algorithms: the key to solving complex Java puzzles! - Bas knopperEvolutionary Algorithms: the key to solving complex Java puzzles! - Bas knopper
Evolutionary Algorithms: the key to solving complex Java puzzles! - Bas knopperNLJUG
 
Modularity and Domain Driven Design; a killer Combination? - Tom de Wolf & St...
Modularity and Domain Driven Design; a killer Combination? - Tom de Wolf & St...Modularity and Domain Driven Design; a killer Combination? - Tom de Wolf & St...
Modularity and Domain Driven Design; a killer Combination? - Tom de Wolf & St...NLJUG
 
Apache Wicket: 10 jaar en verder - Martijn Dashorst
Apache Wicket: 10 jaar en verder - Martijn DashorstApache Wicket: 10 jaar en verder - Martijn Dashorst
Apache Wicket: 10 jaar en verder - Martijn DashorstNLJUG
 
Opening - Bert Ertman
Opening - Bert ErtmanOpening - Bert Ertman
Opening - Bert ErtmanNLJUG
 
Returning the right results - Jettro Coenradie
Returning the right results - Jettro CoenradieReturning the right results - Jettro Coenradie
Returning the right results - Jettro CoenradieNLJUG
 
Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn
Reactive programming met Java 8 en Java EE 7 - Martijn BlankestijnReactive programming met Java 8 en Java EE 7 - Martijn Blankestijn
Reactive programming met Java 8 en Java EE 7 - Martijn BlankestijnNLJUG
 
Event-sourced architectures with Akka - Sander Mak
Event-sourced architectures with Akka - Sander MakEvent-sourced architectures with Akka - Sander Mak
Event-sourced architectures with Akka - Sander MakNLJUG
 

Plus de NLJUG (20)

The future of Web-Scale - Johan Tillema, Rene Boere & Chris Quach
The future of Web-Scale - Johan Tillema, Rene Boere & Chris QuachThe future of Web-Scale - Johan Tillema, Rene Boere & Chris Quach
The future of Web-Scale - Johan Tillema, Rene Boere & Chris Quach
 
Speedy perception trumps speedy reception–smart asynchronous interactions - L...
Speedy perception trumps speedy reception–smart asynchronous interactions - L...Speedy perception trumps speedy reception–smart asynchronous interactions - L...
Speedy perception trumps speedy reception–smart asynchronous interactions - L...
 
Decoding the airspace above you with Java and $7 hardware - Bert Jan Schrijver
Decoding the airspace above you with Java and $7 hardware - Bert Jan SchrijverDecoding the airspace above you with Java and $7 hardware - Bert Jan Schrijver
Decoding the airspace above you with Java and $7 hardware - Bert Jan Schrijver
 
Using Docker to Develop, Test and Run Maven Projects - Wouter Danes
Using Docker to Develop, Test and Run Maven Projects - Wouter DanesUsing Docker to Develop, Test and Run Maven Projects - Wouter Danes
Using Docker to Develop, Test and Run Maven Projects - Wouter Danes
 
Kill the mutants and test your tests - Roy van Rijn
Kill the mutants and test your tests - Roy van RijnKill the mutants and test your tests - Roy van Rijn
Kill the mutants and test your tests - Roy van Rijn
 
Real-time user interfaces - sosm gewoon makkelijker - Allard Buijze
Real-time user interfaces - sosm gewoon makkelijker - Allard BuijzeReal-time user interfaces - sosm gewoon makkelijker - Allard Buijze
Real-time user interfaces - sosm gewoon makkelijker - Allard Buijze
 
The end of traditional enterprise IT - ING's journey to the next generation I...
The end of traditional enterprise IT - ING's journey to the next generation I...The end of traditional enterprise IT - ING's journey to the next generation I...
The end of traditional enterprise IT - ING's journey to the next generation I...
 
Introduction to Reactive with Play and Akka - Markus Jura
Introduction to Reactive with Play and Akka - Markus JuraIntroduction to Reactive with Play and Akka - Markus Jura
Introduction to Reactive with Play and Akka - Markus Jura
 
Web-scale op basis van Hadoop en Akka Reactive Streams - Johan Tillema, Rene ...
Web-scale op basis van Hadoop en Akka Reactive Streams - Johan Tillema, Rene ...Web-scale op basis van Hadoop en Akka Reactive Streams - Johan Tillema, Rene ...
Web-scale op basis van Hadoop en Akka Reactive Streams - Johan Tillema, Rene ...
 
Workshop angular dart presentatie - Atos
Workshop angular dart presentatie - AtosWorkshop angular dart presentatie - Atos
Workshop angular dart presentatie - Atos
 
Workshop spring boot presentatie - Atos
Workshop spring boot presentatie - AtosWorkshop spring boot presentatie - Atos
Workshop spring boot presentatie - Atos
 
Cultivating the jenkins job jungle with groovy - Patrick van Dissel
Cultivating the jenkins job jungle with groovy - Patrick van DisselCultivating the jenkins job jungle with groovy - Patrick van Dissel
Cultivating the jenkins job jungle with groovy - Patrick van Dissel
 
Rethink your architecture - Marten Deinum
Rethink your architecture - Marten DeinumRethink your architecture - Marten Deinum
Rethink your architecture - Marten Deinum
 
Evolutionary Algorithms: the key to solving complex Java puzzles! - Bas knopper
Evolutionary Algorithms: the key to solving complex Java puzzles! - Bas knopperEvolutionary Algorithms: the key to solving complex Java puzzles! - Bas knopper
Evolutionary Algorithms: the key to solving complex Java puzzles! - Bas knopper
 
Modularity and Domain Driven Design; a killer Combination? - Tom de Wolf & St...
Modularity and Domain Driven Design; a killer Combination? - Tom de Wolf & St...Modularity and Domain Driven Design; a killer Combination? - Tom de Wolf & St...
Modularity and Domain Driven Design; a killer Combination? - Tom de Wolf & St...
 
Apache Wicket: 10 jaar en verder - Martijn Dashorst
Apache Wicket: 10 jaar en verder - Martijn DashorstApache Wicket: 10 jaar en verder - Martijn Dashorst
Apache Wicket: 10 jaar en verder - Martijn Dashorst
 
Opening - Bert Ertman
Opening - Bert ErtmanOpening - Bert Ertman
Opening - Bert Ertman
 
Returning the right results - Jettro Coenradie
Returning the right results - Jettro CoenradieReturning the right results - Jettro Coenradie
Returning the right results - Jettro Coenradie
 
Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn
Reactive programming met Java 8 en Java EE 7 - Martijn BlankestijnReactive programming met Java 8 en Java EE 7 - Martijn Blankestijn
Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn
 
Event-sourced architectures with Akka - Sander Mak
Event-sourced architectures with Akka - Sander MakEvent-sourced architectures with Akka - Sander Mak
Event-sourced architectures with Akka - Sander Mak
 

Dernier

Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 

Dernier (20)

Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 

Performance van Java 8 en verder - Jeroen Borgers

  • 1. Performance of Java 8 and beyond Performance van Java 8 en verder By Jeroen Borgers 1
  • 2. Contents 1. Introduction 2. Lambda expressions 3. Stream API 4. Parallel execution & cores 5. Filter map reduce, parallel streams internals 6. Fork-join framework use 7. Lambda’s versus inner classes 8. Tiered compilation 9. PermGen removal 10.java.time performance 11.Accumulators en Adders 12.Map improvements 13.Java 9+ improvements 14.Utilization of GPU's 15.Value Types 16.Arrays 2.0 17.Summary and conclusions 2
  • 3. Introduction to lambdas and streams • Java 8 introduces lambda expressions for functional programming • With the Stream API iteration can be handled internally by a library • Tell don’t ask for applying a function on a collection • or tell to do that in parallel, on multiple cores • question is if this improves your response time 3
  • 4. Lambda expressions and streams • Example 4
  • 5. Lambda expressions and streams • Example with method references 5
  • 6. Lambda expressions: short notation • instance of anonymous inner class of functional interface • functional interface has only one abstract method • Runnable: void run() • Executor: void execute(Runnable r) • Iterable<T>: Iterator<T> iterator() • new: java.util.function • Consumer<T>: void accept(T t) • Function<T, R>: R apply(T t) • Predicate<T>: boolean test(T t) • Annotation: @FunctionalInterface 6
  • 7. Anonymous inner class instance example 7
  • 8. Inner class has boiler plate code 8
  • 10. Stream pipeline Source Intermediate operations lazy evaluation 10 Terminal operations eager evaluation
  • 12. Stream lazy evaluation optimizes with short-circuiting - can be big win 12
  • 13. Stream executed in parallel 13
  • 14. Parallel execution & hardware threads • Parallel != concurrent • CPU Frequency at max • #cores/hardware threads increase 64+ • Must be able to utilize those cores • need to process data faster: BigData, IoT • Runtime.getRuntime().availableProcessors() • reports #hardware threads • my Mac: 2 cores with 2 hyper threads = 4 • Can we get a speedup of ~4? 14
  • 15. Parallel streams utilize ForkJoinPool • Java 8 ForkJoinPool introduces a common pool for any ForkJoinTask • one per JVM • Used in Array.parallelSort, .parallelSetAll and parallelStream • Size defaults to Runtime.getRuntime().availableProcessors() - 1 • Can be set with: • -Djava.util.concurrent.ForkJoinPool.common.parallelism=N • Multiple JVM’s on a machine • consider lowering the pool size • Tasks waiting for I/O • consider increasing the pool size 15
  • 16. Fork-join framework: divide-and-conquer • Divide task recursively in smaller tasks • Divide array of 640 elements into 64 leaf tasks of 10 elements • e.g. sum or sort on each level • Many ForkJoinTasks processed by limited threads, e.g. ForEachTask • like ThreadPoolExecutor • worse: overhead of creating tasks • better: work stealing from queue of other threads • great for unbalanced tasks! 16
  • 17. Performance of Lambda’s versus inner classes • Lambdas seem syntactic sugar around creating anonymous class • in fact, it is not • Inner class • Actual class loaded by class loader • New object created, allocation, initialization, gc • Lambda • creates a static method called through helper class • Performance is similar • Only first time loading inner class in class loader is slower 17
  • 18. When to use parallel streams? • source.parallelStream().operation(F) • F independent • computation on element does not rely on or impact other • stateless, non-interfering • source is efficiently splittable • Collections, Arrays, SplittableRandom • not I/O based: designed for sequential use • computationally expensive • ROT: sequential version > 100 μs 18
  • 19. Parallel when computationally expensive • source.parallelStream().operation(F) • ROT: sequential version > 100 μs • N * Q > 10 000 • N = #elements • Q = cost per element of F: #operations • small function like x -> x * x: N > 10 000 elements • moderately large function Q = 100: N > 100 elements 19
  • 20. Overhead of parallel execution • Startup of power-controlled cores • Sequential part of setting up parallel calculation • Splittability = ease of partitioning • efficient if random access or efficient search: • ArrayLists, [Concurrent]HashMaps, arrays • inefficient: LinkedLists, BlockingQueues, IO-based • Stream BufferedReader.lines() currently for sequential use • might by improved in future JDK, for highly efficient bulk processing of buffered IO 20
  • 21. Creating the micro benchmark Tiny calculation per element 21
  • 22. Creating the micro benchmark 2 22
  • 24. Medium sized calculation benchmark • 1000 elements • Speedup by using serial lambda's = 0.95884454 • Speedup of parallel over serial lambda's= 1.2968781 • Speedup of parallel over oldSchool = 1.2435045 • 100_000 elements • Speedup by using serial lambda's = 0.9760258 • Speedup of parallel over serial lambda's= 2.1337924 • Speedup of parallel over oldSchool = 2.0826366 24
  • 25. Utilization of cores Medium calculation, 1000 and 100_000 elements Parallel part 25
  • 26. 26
  • 27. 27
  • 28. Tiny calculation benchmark • 1000 elements • Speedup by using serial lambda's = 0.12944984 • Speedup of parallel over serial lambda's= 0.46804 • Speedup of parallel over oldSchool = 0.0605877 • 100_000 elements • Speedup by using serial lambda's = 0.10920245 • Speedup of parallel over serial lambda's= 5.905797 • Speedup of parallel over oldSchool = 0.64492756 28
  • 29. Utilization of cores Tiny calculation, 1000 and 100_000 elements 29
  • 30. Micro benchmark conclusions (for this benchmark, on this computer) • For high performance and small functions: use old school loops • lambda’s infrastructure takes more overhead than function • For high performance and large functions • serial • if N * Q > 100 000 then parallel • I need more cores! 30
  • 31. Tiered compilation • JIT-compiler came in 2 flavors, now 3 • -client (C1) • quick startup time • -server (C2) • best performance in long run • -XX:+TieredCompilation • first C1, then C2 • only Java 8: TieredCompilation default • Java 7: often need to increase code cache • -XX:ReservedCodeCacheSize=96M (7) 240M (8) 31
  • 32. Permgen removal • Upto Java 7: Permgen; Java 8: Metaspace • Permgen (wrong name) • data not related to classes: String pool • Metaspace • only class meta data • Class objects itself on heap • String pool on heap • -XX:[Max]MetaspaceSize=N • Default max ‘unlimited’ (1 GB) • OutOfMemoryError: Metaspace instead of PermGen space 32
  • 33. java.time performance • Finally a proper library for Date and Time that replaces the • Crappy stuff: • java.util.Date • mutable - defensive copies needed • java.util.Calendar • 540 bytes to store timestamp, Locale, TZ - heap/gc • java.text.SimpleDateFormat • not thread safe - so have to re-create • Stephen Colebourne spec lead, from Joda time 33
  • 35. Map improvements • HashMap, LinkedHashMap and ConcurrentHashMap • collisions on keys: keys end up in same bucket • access time O(1) -> O(n) • follow LinkedList until key.equals() returns true • Balanced tree instead of linked list • if size > TREEIFY_THRESHOLD (8) • worst case access time O(n) -> O(log(n)) • keys should implement Comparable • branches on hashCode, then compareTo 35
  • 36. Java 9+ performance improvements 36
  • 37. Sumatra: Utilization of GPU's • GPU’s have 100_000’s of stream cores • SIMD - single instruction multiple data • work offloaded to GPU • implemented off-loadable version of parallel().forEach() • Use parallel streams and lambdas 37
  • 38. Value Types (JEP 169) The next big thing! • Currently: • limited set of primitives, by value: no identity • others by reference: identity • footprint: • heap allocated • object headers • 1+ pointers pointing to it • burden for small objects • object identity only serves mutability • JVM attempts to figure out if identity is needed • escape analysis and object elision can unwrap in cases • fragile • Object might be used as lock, then needs identity 38
  • 39. Integer overhead 39 mark word class pointer value object pointer value
  • 41. Point - class versus value type • Point object layout • @Value Point layout 41 mark word class pointer x object pointer x y padding y
  • 42. Arrays 2.0 Improvements • array[(long)i] = 5; • array[i, j, k] = 7; • Arrays.chop(T[] a, int newLen); • prevents copying in StringBuilder.toString() • arrays become real Java objects • indexes of other types than int, long • like Map • thread-safe access for array slices • final/volatile 42
  • 43. • Summary and conclusions • Lamdas and streams offer possible performance improvement • lazy evaluation • tiny calcs or small #elements & medium size calc • don’t use parallel() • consider old school iterations if performance important • Many performance improvements in Java 8 • Use it if you can and get better performance • Several performance improvements planned for Java 9+ (10?) • Better support for Big Data & number crunching 43
  • 44. Want to know more? • www.jpinpoint.com / www.profactive.com • references, presentations • Accelerating Java Applications • 3 days technical training • 24-25-26 November 2014 • nl-jug members 10% discount • hand-in business card today: 20% discount 44