Time Spent

The profiled code ran for {{TotalTime}}ms. Of this, {{GCOverheadTime}}ms were spent on garbage collection (that's {{GCOverheadTimePercent}}%).

The dynamic optimizer was active for {{SpeshTimePercent}}% of the program's run time.

Executing Code
{{ExecutingTimePercent}}% ({{ExecutingTime}}ms)
Garbage Collection
{{GCTimePercent}}% ({{GCTime}}ms)
Dynamic Optimization
{{SpeshTimePercent}}% ({{SpeshTime}}ms)

Call Frames

In total, {{EntriesWithoutInline}} call frames were entered and exited by the profiled code. Inlining eliminated the need to create {{EntriesInline}} call frames (that's {{InlinePercent}}%).

Interpreted Frames
{{InterpFramesPercent}}% ({{InterpFrames}})
Specialized Frames
{{SpeshFramesPercent}}% ({{SpeshFrames}})
JIT-Compiled Frames
{{JITFramesPercent}}% ({{JITFrames}})

Garbage Collection

The profiled code did {{GCRuns}} garbage collections. There were {{FullGCRuns}} full collections involving the entire heap.

The average nursery collection time was {{NurseryAverage}}ms. The average full collection time was {{FullAverage}}ms. On average, {{AverageParticipants}} threads participated in GC.

Dynamic Optimization

Of {{OptimizedFrames}} specialized or JIT-compiled frames, there were {{DeoptOnes}} deoptimizations (that's {{DeoptOnePercent}}% of all optimized frames).

There was no global deoptimization triggered by the profiled code.

There was one global deoptimization triggered by the profiled code.

There were {{DeoptAlls}} global deoptimization triggered by the profiled code.

There was no On Stack Replacement performed while executing the profiled code (normal if the code lacks long-running loops with many iterations).

There was one On Stack Replacement performed while executing the profiled code.

There were {{OSRs}} On Stack Replacements performed while executing the profiled code.

Name Entries Inclusive Time Exclusive Time Interp / Spesh / JIT
{{routine.Name}}
{{routine.File}}:{{routine.Line}}
{{routine.Entries}}
{{routine.InclusiveTimePercent}}% ({{routine.InclusiveTime}}ms)
{{routine.ExclusiveTimePercent}}% ({{routine.ExclusiveTime}}ms)
OSR

{{Current.name == '' ? '<anon>' : Current.name}}
{{File}}:{{Line}}

Calls (Inlined)
{{Entries}}
{{Entries}} + {{InlineEntries}} ({{InlinePercent}}%)
Interpreted Calls
{{InterpPercent}}% ({{InterpEntries}})
Specialized Calls
{{SpeshPercent}}% ({{SpeshEntries}})
JIT-Compiled Calls
{{JITPercent}}% ({{JITEntries}})
Callees
Name Calls Time In Callee Interp / Spesh / JIT Inlined
{{callee.Name}}
{{callee.File}}:{{callee.Line}}
{{callee.Calls}}
{{callee.TimePercent}}% ({{callee.Time}}ms)
{{callee.InlinedPercent}}%
{{callee.InlinedPercent}}%
This code has no callees.
Name Allocations Allocating Routines
{{alloc.Name}}
{{alloc.Allocations}}
View
Start Time Run Full Time Nursery: Retained / Promoted / Freed
{{gc.StartTime}}ms {{gc.Run}}
{{gc.Time}}ms
{{gc.RetainedKilobytes}}KB / {{gc.PromotedKilobytes}}KB / {{gc.ClearedKilobytes}}KB ... {{gc.Gen2Roots}} gen2 roots

OSR

On Stack Replacement detects routines containing hot loops that are being interpreted, and replaces them with specialized or JIT-compiled code.

Routine On Stack Replacements
{{osr.Name}}
{{osr.File}}:{{osr.Line}}
{{osr.Count}}

No OSR was performed during this profile.

Local Deoptimization

Local deoptimization happens when a guard in specialized or JIT-compiled code fails. Since the code was produced assuming the guard would hold, the VM falls back to running the safe, but slower, interpreted code.

Routine Deoptimizations
{{deopt.Name}}
{{deopt.File}}:{{deopt.Line}}
{{deopt.Count}}

No local deoptimizations occurred during this profile.

Global Deoptimization

Global deoptimization happens when an event occurs that renders all currently type-specialized or JIT-compiled code on the call stack potentially invalid. Mixins - changing the type of an object in place - are a common reason.

Routine Deoptimizations
{{deopt.Name}}
{{deopt.File}}:{{deopt.Line}}
{{deopt.Count}}

No global deoptimizations occurred during this profile.