Java Performance Analysis and Testing 

System performance problems usually appear at inconvenient times – as when a system is due to ship, or at peak load times critical to the business. To be prepared for these situations, you need to understand the factors that affect Java performance, and to be ready with the strategies that will help you to understand and locate performance problems.

This course will teach you these strategies: tools and techniques for pinpointing bottlenecks, tracking performance changes, creating tests for performance regression and analysis, and conducting performance experiments.

The course will cover both the theory and practice of Java performance. In lectures, you’ll learn the theory of profiling, JIT compilation, memory management, NIO and more. In workshop exercises, you’ll apply a variety of tools and methods to analyse and tune applications closely simulating real-world problems, running on virtual and bare metal servers in the cloud.

After practising the techniques of the course on these exercises, you’ll be ready to meet any kind of Java performance problem in your own systems.

For maximum benefit from the course, you should be familiar with the Java language and standard libraries, and be comfortable using the Linux command line. 

Characterizing Performance: We will define typical performance requirements (throughput/latency/scalability), how they are specified (SLAs) and measured. We will discuss correct measurement practices as well as statistical methods useful to defining performance. We will expand on performance experiments validity and testing strategies for reducing scope of investigation (sources of variance and complexity and how to avoid them). Attendees are expected to leave the course with a more scientific attitude to performance testing and a critical attitude to experiments and results.

Enabling Analysis: We will explore the relationship between Java code, HW and OS and examine observable metrics and their meaning in each area. We will focus on JVM memory management and compilation effects both to application threads and runtime threads. Tools use will be demonstrated and practiced and the method of deriving the metrics will be examined with a focus on bias and usability of the data.

Real World Focus: We will carry out full scale application analysis exercises on relevant HW, tackling the complexities which arise naturally in today’s complex, multi-threaded, distributed systems. We will examine some practical monitoring tools for the lab, learn strategies for managing and dissecting large profiles, and outline a process for productive investigations.