How to interpret the output
The output is a simple tab-separated file, ppp_Result.txt
, with one line per method.
The first line contains column headers. The following columns exists:
- MId
- An identifier for the method. In the output, this is almost meaningless.
During loading, all instrumentable methods (i.e. those with real java
code) are assigned an Id. This id is used internally as an index into
the arrays holding the call count and execution time.
- Class
- The class name for the method, in JVM-internal form. It contains
the full path, separated by "/". A "$" in the class name indicates that
it is an inner class.
- Method
- The method name. Class and instance initializers are displayed as "<clinit>" and "<init>".
- Sig
- The method signature, in JVM-internal form. Useful to tell
overloaded methods apart. As an example,
"(Ljava/util/Enumeration;ILjava/lang/String;)V" designates a method
with three arguments: Enumeration (Ljava/util/Enumeration;), integer
(I) and String (Ljava/lang/String;), and result type void (V).
- Calls
- The number of calls to this method.
- Time
- The time spent in this method. The time is given in milliseconds
by default. With the nano and linuxSMPhack options, it is given in
nanoseconds. This is elapsed time, unless the linuxSMPhack option is
used. In that case, it should be CPU time.
In addition to checking for individual methods with high call count or
time, you may want to check total values per package. Currently, you
must use external tools like spreadsheets to compute these values. For
example, i once stumbled across a persistence layer using up 60% of the
total time.
The overall "top ten" packages wrt. called methods and time-consuming methods are written to a separate file ppp_Result_summary.txt
.
Depending on the curcumstances, you may want to exclude the "most
frequently called" packages from profiling (to reduce overhead), or
include only the most time-consuming.