- System requirements
- Profiler architecture
- Running the profiler
- Profiler activation
- Start profiling
- Solving performance problems
- CPU profiling
- Threads
- Deadlock detector
- Memory profiling
- Garbage collection
- Monitor profiling
- Exception profiling
- Probes: monitor events of various kinds
- Events in user interface
- Event inspections
- Built-in probes
- Probe classes
- Monitoring method invocation events
- Probe class annotation @MethodPattern
- Callback onEnter()
- Callback onReturn()
- Callbacks onUncaughtException() and onUncaughtExceptionExt()
- Parameter annotation @Param
- Parameter annotation @Params
- Parameter annotation @This
- Parameter annotation @ClassRef
- Parameter annotation @MethodName
- Parameter annotation @MethodParameterTypes
- Parameter annotation @MethodSignature
- Parameter annotation @OnEnterResult
- Parameter annotation @ReturnValue
- Parameter annotation @ThrownException
- Probe application rules
- Data storage
- Performance Charts
- Inspections: automatic recognition of typical problems
- Automatically trigger actions on event
- Summary, snapshot annotation, automatic deobfuscation
- Time measurement (CPU time, wall time)
- Filters
- Snapshot directory customization
- Export of profiling results to HTML, CSV, XML, plain text
- Profiler Java API
- Profiler HTTP API
- Command line tool to control profiling
- Settings
- FAQ: How to profile in my scenario?
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.