Course Description
This unique course is presented and written by the well-known O’Reilly book Author Benjamin Evans, and adapted from the brand new O’Reilly book of the same name. This 2-day course is designed for intermediate, advanced and expert Java developers who want to learn the detailed how and why of Java performance and how to diagnose and correct performance problems in a systematic and scientific way.
Covering JVM internals, bytecode, classloading, garbage collection analysis and tuning as well as JIT compilation, application profiling and language-level techniques; this course also contains hands-on labs and a wealth of directly-applicable knowledge that will allow engineers to gain deep insight into their performance problems and how to fix them.
Learning Objectives
* To diagnose and fix Java application performance problems
* To understand the underlying architecture of the JVM and some internals
* To understand the causes of common performance problems
* To avoid common misconceptions and traps when performance tuning Java applications
* To gain a basic familiarity with common Java performance tools
Target Audience
Ideally suited for more senior Java developers / architects (with 4+ years of experience). Not suitable for beginners (those with less than 2 years’ experience). Also suitable for Scala (and other JVM language) developers.
Course Pre-requisites
* Proficiency in Java development
* A working knowledge of the Java runtime environment
Course Content
Day 1:
Introduction / Setting the scene
– An overview of JVM structure and subsystems
– Objects at runtime (oops, conceptual views of GC and JIT)
– Lab: Introduction to jmap
Benchmarking
– Why JVM performance analysis is potentially complex
– A simple system model and simple analysis techniques
– Tools and system benchmarking
– Pitfalls and best practices
– Lab: Hands-on introduction to tools
Garbage Collection
– Review of Hotspot’s heap
– Basic concepts (allocation, evacuating, exact, compacting)
– Parallel collectors
– CMS
– G1GC
GC Tuning & Tools
– Trade-offs between collectors
– GC Parameters
– GC Logging
– GC Tools (VisualGC, GCViewer, Censum)
– GC Tuning
– Lab: Spotting GC problems from tools
Day 2:
Language-level performance techniques
– Java collections
– Immutable objects
– Atomic access
– sun.misc.Unsafe
– Persistent collections
– Lab: Immutable objects
JIT compilation
– Overview of JVM bytecode & classloading
– JIT compilation (low-level strategies used by HS)
– PrintCompilation & LogCompilation
– JITWatch
– HSDIS
– Lab: Hands-on with JITWatch
Profiling (and Microbenchmarking)
– Large-scale profiling
– Microbenchmarking caveats
– JMH
– Lab: JMH Hands-on
The Future: Java 9 and beyond
– Modules and their impact
– New performance enhancements
– AOTC
– Valhalla, Panama, GPU compute