An apparatus and method are provided for the dynamic instrumentation of
code to minimize system perturbation during tracing of the execution of
the code. With the apparatus and method, "hot spots" in the execution of
the code are dynamically determined during tracing of the execution of
the code. These "hot spots" are dynamically instrumented, i.e. an event
hook is inserted, to cause control to be passed to a handler that
determines a caller of the "hot spot" method. The method that called the
"hot spot" method, or "caller" method, is identified from a call stack
and is dynamically instrumented for an appropriate metric so that the
next time the calling method is executed, the dynamically inserted hooks
are executed. The execution of the hooks in the caller method is
continued for a predetermined period, e.g., number of invocations, to get
an understanding of the caller method's characteristics. A list of
callers of instrumented methods is maintained and used to determine one
or more calling methods of the instrumented caller method. One or more of
these calling methods may be instrumented and the hooks inserted in the
instrumented caller method (called by the one or more calling methods),
are removed. In this way, the call graph of the hot spots of a program
execution is "walked up" and characterized over time.