This document discusses various tools and techniques for profiling Java applications to analyze performance, including:
- Using profilers like Async Profiler to visualize where time is spent in CPU, memory, and other metrics through flamegraphs and call trees.
- Collecting metrics from applications, systems, and services through agents, then viewing them in tools like Grafana to monitor for issues and set alerts.
- Profiling production, load tests, and benchmarks to understand real-world performance and correlate results.
- Combining profiles from distributed systems through techniques like collecting collapsed profiles then viewing them together.
- Other commercial and open source profiling options are also mentioned.