Fully featured low overhead profiler for Java EE and Java SE platforms.
Monitoring and profiling solution for Gradle, Maven, Ant, JUnit and TestNG.
Easy to use performance and memory profiler for .NET framework.

Probe application rules

The following describes rules which define whether a probe class will be applied to particular method.

Probe validation on registration

On probe registration its annotation, callbacks and their parameters are validated. If any violations of the specification are found, the probe is not registered, and thus will not be applied to any methods.

Both loaded and new classes will be instrumented

The probe will be applied to methods of classes which have been loaded at the moment of probe registration, as well as of classes loaded afterwards.

Which methods will be instrumented

The probe's callback(s) are applied to methods that match the probe's method pattern.

If there is a mismatch in number and/or type of parameters of an instrumented method and callback parameters annotated with @Param, the callback will be called anyway, passing null or 0 for missing parameters. Please read about @Param for detail.

If there is a mismatch in return type of an instrumented method and callback parameter annotated with @ReturnValue, the callback will be called anyway, passing null or 0 as the callback parameter value. Please read about @ReturnValue for detail.

If callbacks have parameter annotated with @This not declared as java.lang.Object, the callbacks will be called for instances of corresponding classes only. Please read about @This for detail.

Also, there are special requirements for non-void onReturn() and onExceptionExt() callbacks. Please read the callback descriptions for detail.

Probe unregistration

If probe is unregistered in runtime, all methods which have been instrumented with its callbacks will be returned to their original state.