In part 2, we will discuss advanced techniques you can use to deeply investigate an app’s execution. Most developers are exposed to debugging and logging (discussed in part 1), but not many know how to find all the “secrets” of an execution’s process by using profiling techniques, investigating threads, and analyzing the memory consumption. Knowing these techniques is essential and sometimes is the only way to solve certain puzzles.

In chapter 6, you’ll learn how to analyze CPU and memory consumption. In chapter 7, we’ll discuss using a profiler to identify latency problems. In chapters 8 and 9, we’ll do a deep dive into multithreaded architectures using profilers, and in chapter 10, we will discuss thread dumps. We end part 2 with chapter 11, where you’ll learn how to identify memory consumption issues using heap dumps.