This course is targeted at experienced Java developers who want to get the best performance out of their applications. It distils the approaches and techniques used to measure performance, correctly identify performance issues and remove performance bottlenecks.



  • An overview of common performance terms and concepts
  • Approaches to addressing performance problems and improving performance
  • A summary of the most common performance issues in Java

Measuring performance

  • Monitoring vs. Profiling
  • Collecting statistics
  • Visualizing statistics
  • Micro-benchmarking

Platform basics

  • Overview of modern hardware and CPU design
  • Pros/Cons of Batching, Buffering, Caching and Parallelism
  • Overview of common data structures
  • Choosing the best algorithm

The Java Virtual Machine (Memory)

  • Introduction to memory management and object life cycles
  • Overview of major garbage collectors (Serial, CMS, G1GC, Azul)
  • Tools for analysing garbage collection (JHiccup, VisualVM, MAT, etc.)
  • Tuning garbage collection

The Java Virtual Machine (Hotspots)

  • Introducing Hotspots
  • Understanding compilation
  • Common JVM optimisations and how code style can help
  • Concurrency and the impact of common JVM options (UseNuma, UseBiasLocking, EscapeAnalysis, etc.)
  • Tools for identifying slow, expensive methods and thread contention (VisualVM, profilers, etc.)

Platform advanced concepts

  • Platform memory models
  • Avoiding contention
  • Processor affinity and context switching