Extend the set of JVM trace events generated by the run-time compilers.
- No measurable performance overhead when not enabled.
JEP 167 added infrastructure for detailed tracing of the JVM. It introduced a basic set of useful run-time compiler events but that set doesn't provide any information about which optimizations were used, what the optimizations did, why compilation failed, and so forth.
Define additional events that will add more detail to the workings of the run-time compilers, useful for testing as well as profiling.
Some compilation phase events are already emitted by C2; we will extend C1 to emit them as well, if needed.
Compilation phase events will provide information including a compilation identifier and a representation of the method being compiled, or its relevant characteristics, and be emitted at the end of a phase. If a compilation phase fails then an event describing the failure will emitted. Phases for which we will consider adding events are:
- High-level graph
- Low-level Intermediate Representation
- Machine-independent code
Events about applied optimizations will include a compilation identifier and describe the transformations performed. The events will be emitted when an optimization is completed. Events will be defined for, at least, all high-level optimizations, e.g.,
- Loop unrolling
- Loop peeling
Other events which affect compilation and execution of a compiled method will also be emitted, e.g.,
- Deoptimization events
- Uncommon trap events
- Abnormal events for:
- Node max limit hit
- Maximum recursion depth hit
The white-box testing API can be used to get this information but it has no facility for recording events for later analysis.