## Overview of Features |

| JProfiler's features are ordered into view sections. A view section can be made visible by selecting in JProfiler's sidebar. JProfiler offers the following view sections: Memory profiling Keep track of your objects and find out where the problem spots are. The heap walker Use the drill down capabilities of JProfiler's unique heap walker to find memory leaks. CPU profiling Find out where your CPU time is going and zero in on performance bottlenecks. Thread profiling Check the activity of your threads, resolve deadlocks and get detailed information on your application's monitor usage. VM telemetry information Unfold the statistical history of your application with JProfiler's virtual machine telemetry monitors.

| In order to help you find JProfiler's features which are most important to you, we present a situational overview. There are two types of uses for a profiler which arise from different motivations: Problem solving If you turn to a profiler with a problem in your application, it most likely falls into one of the following three categories: Performance problem To find performance related problem spots in your application, turn to JProfiler's CPU section. Often, performance problems are caused by excessive creation of temporary objects. For that case, the recorded objects views with its view mode set to "garbage collected objects" will show you where efforts to reduce allocations make sense. Excessive memory consumption If your application consumes too much memory, the memory views will show you where the memory consumption comes from. With the reference views in the heap walker you can find out which objects are unnecessarily kept alive in the heap. Memory leak If your application's memory consumption goes up linearly with time, you likely have a memory leak which is show stopper especially for application servers. The "mark current values and show differences" feature in the memory section and the heap walker will help you to find the cause. Deadlock If you experience a deadlock, JProfiler's current monitor graph will help you to find the cause even for complex locking situations. Hard to find bug A often overlooked but highly profitable use of a profiler is that of debugging. Many kinds of bugs are exceptionally hard to find by hand or by using a traditional debugger. Some bugs revolve around complex call stack scenarios (have a look at the CPU section), others around entangled object reference graphs (have a look at the heap walker section), both of which are not easy to keep track of. Particularly JProfiler's thread views are of great help in multi-threaded situations, where race-conditions and deadlocks are hard to track down. Quality assurance During a development process, it's a good idea to regularly run a profiler on your application to assess potential problem spots. Even though an application may prove to be "good enough" in test cases, an awareness for performance and memory bottlenecks enables you adapt your design decisions as the project evolves. In this way you avoid costly re-engineering when real-world needs are not met. Use the information presented in JProfiler's telemetry section to keep an eye on the evolution of your application. The ability to save profiling snapshots enables you to keep track of your project's evolution. The offline profiling capability allows you to perform automated profiling runs on your application.