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
deadlock detection 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.