Not had time to digest these results properly but here is the source, bytecode, assembly, and JIT journal from the two variations of using either an array length check or an exception to detect when to reset the index to 0.
Original article is here http://fillumina.wordpress.com/2013/06/07/optimization-by-using-exceptions/
Update 1
My initial thoughts are:
The exception version is JIT'd after 5800 runs and the length check version after 8100 runs.
Additionally with the array length being so small the number of branches taken (length check version) is relatively high at 11% and would be much less with a larger array.
Update 2
Here is the full hotspot.log (909KB) hotspot.log
The exception version compiles to 152 bytes of native code.
The length check version compiles to 184 bytes of native code.
Update 3
Added assembly.
Update 4
Ran the 2 Runnables outside of the PerformanceTools framework using a 5 second warmup and 20 second test run for each Runnable. Logged the execution times using Gil Tene's HdrHistogram. Results at bottom of page.
TL;DR
Recorded latencies [in usec] for runWithException:
#[Mean = 0.025, StdDeviation = 0.032]
#[Max = 108.288, Total count = 162381662]
#[Buckets = 32, SubBuckets = 2048]
Recorded latencies [in usec] for runWithLengthCheck:
#[Mean = 0.025, StdDeviation = 0.067]
#[Max = 129.792, Total count = 162490905]
#[Buckets = 32, SubBuckets = 2048]
#[Mean = 0.025, StdDeviation = 0.032]
#[Max = 108.288, Total count = 162381662]
#[Buckets = 32, SubBuckets = 2048]
Recorded latencies [in usec] for runWithLengthCheck:
#[Mean = 0.025, StdDeviation = 0.067]
#[Max = 129.792, Total count = 162490905]
#[Buckets = 32, SubBuckets = 2048]
Method 1 - catching the exception.
Source
tests.addTest("exception", new Runnable()
{
private char[] array = new char[ARRAY_SIZE];
private int pos;
@Override
public void run()
{
try
{ // spare the check
array[pos] = '*';
pos++;
}
catch (ArrayIndexOutOfBoundsException e)
{
pos = 0;
}
}
});
{
private char[] array = new char[ARRAY_SIZE];
private int pos;
@Override
public void run()
{
try
{ // spare the check
array[pos] = '*';
pos++;
}
catch (ArrayIndexOutOfBoundsException e)
{
pos = 0;
}
}
});
Bytecode:
0: aload_0
1: getfield #21 // Field array:[C
4: aload_0
5: getfield #28 // Field pos:I
8: bipush 42
10: castore
11: aload_0
12: dup
13: getfield #28 // Field pos:I
16: iconst_1
17: iadd
18: putfield #28 // Field pos:I
21: goto 30
24: astore_1
25: aload_0
26: iconst_0
27: putfield #28 // Field pos:I
30: return
Exception table:
from to target type
0 21 24 Class java/lang/ArrayIndexOutOfBoundsException
}
1: getfield #21 // Field array:[C
4: aload_0
5: getfield #28 // Field pos:I
8: bipush 42
10: castore
11: aload_0
12: dup
13: getfield #28 // Field pos:I
16: iconst_1
17: iadd
18: putfield #28 // Field pos:I
21: goto 30
24: astore_1
25: aload_0
26: iconst_0
27: putfield #28 // Field pos:I
30: return
Exception table:
from to target type
0 21 24 Class java/lang/ArrayIndexOutOfBoundsException
}
Assembly (Intel)
# {method} 'run' '()V' in 'com/fillumina/performance/examples/template/TryCatchVsCheckPerformanceTest$1'
# [sp+0x30] (sp of caller)
0x00007f10bf957340: mov r10d,DWORD PTR [rsi+0x8]
0x00007f10bf957344: cmp rax,r10
0x00007f10bf957347: jne 0x00007f10bf92c960 ; {runtime_call}
0x00007f10bf95734d: data32 xchg ax,ax
[Verified Entry Point]
0x00007f10bf957350: mov DWORD PTR [rsp-0x14000],eax
0x00007f10bf957357: push rbp
0x00007f10bf957358: sub rsp,0x20 ;*synchronization entry
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$1::run@-1 (line 36)
0x00007f10bf95735c: mov r11d,DWORD PTR [rsi+0xc] ;*getfield pos
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$1::run@5 (line 36)
0x00007f10bf957360: mov r10d,DWORD PTR [rsi+0x10]
;*getfield array
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$1::run@1 (line 36)
0x00007f10bf957364: mov r9d,DWORD PTR [r10+0xc] ; implicit exception: dispatches to 0x00007f10bf9573a3
0x00007f10bf957368: cmp r11d,r9d
0x00007f10bf95736b: jae 0x00007f10bf95738f ;*castore
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$1::run@10 (line 36)
0x00007f10bf95736d: mov r9d,r11d
0x00007f10bf957370: inc r9d
0x00007f10bf957373: mov DWORD PTR [rsi+0xc],r9d ;*putfield pos
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$1::run@18 (line 37)
0x00007f10bf957377: mov r9d,0x2a
0x00007f10bf95737d: mov WORD PTR [r10+r11*2+0x10],r9w
;*synchronization entry
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$1::run@-1 (line 36)
0x00007f10bf957383: add rsp,0x20
0x00007f10bf957387: pop rbp
0x00007f10bf957388: test DWORD PTR [rip+0x5ccbc72],eax # 0x00007f10c5623000
; {poll_return}
0x00007f10bf95738e: ret
0x00007f10bf95738f: mov DWORD PTR [rsi+0xc],r12d ;*putfield pos
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$1::run@27 (line 41)
0x00007f10bf957393: movabs r10,0x9d88c150 ; {oop(a 'java/lang/ArrayIndexOutOfBoundsException')}
0x00007f10bf95739d: mov DWORD PTR [r10+0x10],r12d
0x00007f10bf9573a1: jmp 0x00007f10bf957383
0x00007f10bf9573a3: mov rbp,rsi
0x00007f10bf9573a6: mov DWORD PTR [rsp],r11d
0x00007f10bf9573aa: mov esi,0xfffffff6
0x00007f10bf9573af: call 0x00007f10bf92df20 ; OopMap{rbp=Oop off=116}
;*castore
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$1::run@10 (line 36)
; {runtime_call}
0x00007f10bf9573b4: call 0x00007f10c4419340 ;*castore
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$1::run@10 (line 36)
; {runtime_call}
0x00007f10bf9573b9: hlt
0x00007f10bf9573ba: hlt
0x00007f10bf9573bb: hlt
0x00007f10bf9573bc: hlt
0x00007f10bf9573bd: hlt
0x00007f10bf9573be: hlt
0x00007f10bf9573bf: hlt
[Exception Handler]
[Stub Code]
0x00007f10bf9573c0: jmp 0x00007f10bf953ea0 ; {no_reloc}
[Deopt Handler Code]
0x00007f10bf9573c5: call 0x00007f10bf9573ca
0x00007f10bf9573ca: sub QWORD PTR [rsp],0x5
0x00007f10bf9573cf: jmp 0x00007f10bf92db00 ; {runtime_call}
0x00007f10bf9573d4: hlt
0x00007f10bf9573d5: hlt
0x00007f10bf9573d6: hlt
0x00007f10bf9573d7: hlt
# [sp+0x30] (sp of caller)
0x00007f10bf957340: mov r10d,DWORD PTR [rsi+0x8]
0x00007f10bf957344: cmp rax,r10
0x00007f10bf957347: jne 0x00007f10bf92c960 ; {runtime_call}
0x00007f10bf95734d: data32 xchg ax,ax
[Verified Entry Point]
0x00007f10bf957350: mov DWORD PTR [rsp-0x14000],eax
0x00007f10bf957357: push rbp
0x00007f10bf957358: sub rsp,0x20 ;*synchronization entry
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$1::run@-1 (line 36)
0x00007f10bf95735c: mov r11d,DWORD PTR [rsi+0xc] ;*getfield pos
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$1::run@5 (line 36)
0x00007f10bf957360: mov r10d,DWORD PTR [rsi+0x10]
;*getfield array
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$1::run@1 (line 36)
0x00007f10bf957364: mov r9d,DWORD PTR [r10+0xc] ; implicit exception: dispatches to 0x00007f10bf9573a3
0x00007f10bf957368: cmp r11d,r9d
0x00007f10bf95736b: jae 0x00007f10bf95738f ;*castore
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$1::run@10 (line 36)
0x00007f10bf95736d: mov r9d,r11d
0x00007f10bf957370: inc r9d
0x00007f10bf957373: mov DWORD PTR [rsi+0xc],r9d ;*putfield pos
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$1::run@18 (line 37)
0x00007f10bf957377: mov r9d,0x2a
0x00007f10bf95737d: mov WORD PTR [r10+r11*2+0x10],r9w
;*synchronization entry
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$1::run@-1 (line 36)
0x00007f10bf957383: add rsp,0x20
0x00007f10bf957387: pop rbp
0x00007f10bf957388: test DWORD PTR [rip+0x5ccbc72],eax # 0x00007f10c5623000
; {poll_return}
0x00007f10bf95738e: ret
0x00007f10bf95738f: mov DWORD PTR [rsi+0xc],r12d ;*putfield pos
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$1::run@27 (line 41)
0x00007f10bf957393: movabs r10,0x9d88c150 ; {oop(a 'java/lang/ArrayIndexOutOfBoundsException')}
0x00007f10bf95739d: mov DWORD PTR [r10+0x10],r12d
0x00007f10bf9573a1: jmp 0x00007f10bf957383
0x00007f10bf9573a3: mov rbp,rsi
0x00007f10bf9573a6: mov DWORD PTR [rsp],r11d
0x00007f10bf9573aa: mov esi,0xfffffff6
0x00007f10bf9573af: call 0x00007f10bf92df20 ; OopMap{rbp=Oop off=116}
;*castore
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$1::run@10 (line 36)
; {runtime_call}
0x00007f10bf9573b4: call 0x00007f10c4419340 ;*castore
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$1::run@10 (line 36)
; {runtime_call}
0x00007f10bf9573b9: hlt
0x00007f10bf9573ba: hlt
0x00007f10bf9573bb: hlt
0x00007f10bf9573bc: hlt
0x00007f10bf9573bd: hlt
0x00007f10bf9573be: hlt
0x00007f10bf9573bf: hlt
[Exception Handler]
[Stub Code]
0x00007f10bf9573c0: jmp 0x00007f10bf953ea0 ; {no_reloc}
[Deopt Handler Code]
0x00007f10bf9573c5: call 0x00007f10bf9573ca
0x00007f10bf9573ca: sub QWORD PTR [rsp],0x5
0x00007f10bf9573cf: jmp 0x00007f10bf92db00 ; {runtime_call}
0x00007f10bf9573d4: hlt
0x00007f10bf9573d5: hlt
0x00007f10bf9573d6: hlt
0x00007f10bf9573d7: hlt
JIT Journal:
<task_queued stamp="0.111" iicount="10000" overflow_traps="654" range_check_traps="-1" bytes="31" hot_count="10000" count="5000" compile_id="7" comment="count" backedge_count="1"/>
<nmethod stamp="0.112" iicount="10021" nul_chk_table_offset="544" bytes="31" scopes_pcs_offset="488" count="5800" dependencies_offset="536" insts_offset="304" relocation_offset="288" compileMillis="1" backedge_count="1" size="560" scopes_data_offset="464" overflow_traps="656" range_check_traps="-1" address="0x00007ff0de940810" nmsize="152" entry="0x00007ff0de940940" compiler="C2" compile_id="7" oops_offset="456" success="1" stub_offset="432"/>
<task stamp="0.111" iicount="10021" overflow_traps="656" range_check_traps="-1" bytes="31" count="5021" compile_id="7" backedge_count="1">
<phase stamp="0.111" nodes="3" name="parse" live="3">
<type id="636" name="void"/>
<klass id="729" flags="0" name="com/fillumina/performance/examples/template/TryCatchVsCheckPerformanceTest$1"/>
<method id="730" iicount="10054" holder="729" bytes="31" flags="1" name="run" return="636"/>
<parse stamp="0.111" uses="10054" method="730">
<observe total="-1" count="-1" trap="range_check"/>
<observe that="has_exception_handlers"/>
<bc bci="10" code="85"/>
<uncommon_trap bci="10" reason="null_check" action="maybe_recompile"/>
<observe count="-1" trap="range_check"/>
<hot_throw reason="range_check" preallocated="1"/>
<bc bci="27" code="181"/>
<uncommon_trap bci="27" reason="null_check" action="maybe_recompile"/>
<parse_done stamp="0.112" nodes="103" memory="34208" live="100"/>
</parse>
<phase_done stamp="0.112" nodes="104" name="parse" live="73"/>
</phase>
<phase stamp="0.112" nodes="104" name="optimizer" live="73">
<phase stamp="0.112" nodes="105" name="idealLoop" live="55">
<phase_done stamp="0.112" nodes="105" name="idealLoop" live="55"/>
</phase>
<phase stamp="0.112" nodes="105" name="ccp" live="55">
<phase_done stamp="0.112" nodes="105" name="ccp" live="55"/>
</phase>
<phase_done stamp="0.112" nodes="108" name="optimizer" live="55"/>
</phase>
<phase stamp="0.112" nodes="108" name="matcher" live="55">
<phase_done stamp="0.112" nodes="43" name="matcher" live="43"/>
</phase>
<observe count="0" trap="range_check" mcount="-1" ccount="-1"/>
<phase stamp="0.112" nodes="53" name="regalloc" live="53">
<regalloc attempts="1" success="1"/>
<phase_done stamp="0.112" nodes="57" name="regalloc" live="55"/>
</phase>
<phase stamp="0.112" nodes="57" name="output" live="55">
<phase_done stamp="0.112" nodes="65" name="output" live="61"/>
</phase>
<code_cache largest_free_block="49910976" adapters="138" free_code_cache="49927424" nmethods="6" total_blobs="190"/>
<task_done stamp="0.112" count="5800" nmsize="152" backedge_count="1" success="1"/>
</task>
<nmethod stamp="0.112" iicount="10021" nul_chk_table_offset="544" bytes="31" scopes_pcs_offset="488" count="5800" dependencies_offset="536" insts_offset="304" relocation_offset="288" compileMillis="1" backedge_count="1" size="560" scopes_data_offset="464" overflow_traps="656" range_check_traps="-1" address="0x00007ff0de940810" nmsize="152" entry="0x00007ff0de940940" compiler="C2" compile_id="7" oops_offset="456" success="1" stub_offset="432"/>
<task stamp="0.111" iicount="10021" overflow_traps="656" range_check_traps="-1" bytes="31" count="5021" compile_id="7" backedge_count="1">
<phase stamp="0.111" nodes="3" name="parse" live="3">
<type id="636" name="void"/>
<klass id="729" flags="0" name="com/fillumina/performance/examples/template/TryCatchVsCheckPerformanceTest$1"/>
<method id="730" iicount="10054" holder="729" bytes="31" flags="1" name="run" return="636"/>
<parse stamp="0.111" uses="10054" method="730">
<observe total="-1" count="-1" trap="range_check"/>
<observe that="has_exception_handlers"/>
<bc bci="10" code="85"/>
<uncommon_trap bci="10" reason="null_check" action="maybe_recompile"/>
<observe count="-1" trap="range_check"/>
<hot_throw reason="range_check" preallocated="1"/>
<bc bci="27" code="181"/>
<uncommon_trap bci="27" reason="null_check" action="maybe_recompile"/>
<parse_done stamp="0.112" nodes="103" memory="34208" live="100"/>
</parse>
<phase_done stamp="0.112" nodes="104" name="parse" live="73"/>
</phase>
<phase stamp="0.112" nodes="104" name="optimizer" live="73">
<phase stamp="0.112" nodes="105" name="idealLoop" live="55">
<phase_done stamp="0.112" nodes="105" name="idealLoop" live="55"/>
</phase>
<phase stamp="0.112" nodes="105" name="ccp" live="55">
<phase_done stamp="0.112" nodes="105" name="ccp" live="55"/>
</phase>
<phase_done stamp="0.112" nodes="108" name="optimizer" live="55"/>
</phase>
<phase stamp="0.112" nodes="108" name="matcher" live="55">
<phase_done stamp="0.112" nodes="43" name="matcher" live="43"/>
</phase>
<observe count="0" trap="range_check" mcount="-1" ccount="-1"/>
<phase stamp="0.112" nodes="53" name="regalloc" live="53">
<regalloc attempts="1" success="1"/>
<phase_done stamp="0.112" nodes="57" name="regalloc" live="55"/>
</phase>
<phase stamp="0.112" nodes="57" name="output" live="55">
<phase_done stamp="0.112" nodes="65" name="output" live="61"/>
</phase>
<code_cache largest_free_block="49910976" adapters="138" free_code_cache="49927424" nmethods="6" total_blobs="190"/>
<task_done stamp="0.112" count="5800" nmsize="152" backedge_count="1" success="1"/>
</task>
Method 2 - checking array length
Source
tests.addTest("if_then", new Runnable()
{
private char[] array = new char[ARRAY_SIZE];
private int pos;
@Override
public void run()
{
if (pos < ARRAY_SIZE)
{
array[pos] = '*';
pos++;
}
else
{
pos = 0;
}
}
});
{
private char[] array = new char[ARRAY_SIZE];
private int pos;
@Override
public void run()
{
if (pos < ARRAY_SIZE)
{
array[pos] = '*';
pos++;
}
else
{
pos = 0;
}
}
});
Bytecode
0: aload_0
1: getfield #28 // Field pos:I
4: bipush 10
6: if_icmpge 33
9: aload_0
10: getfield #21 // Field array:[C
13: aload_0
14: getfield #28 // Field pos:I
17: bipush 42
19: castore
20: aload_0
21: dup
22: getfield #28 // Field pos:I
25: iconst_1
26: iadd
27: putfield #28 // Field pos:I
30: goto 38
33: aload_0
34: iconst_0
35: putfield #28 // Field pos:I
38: return
}
1: getfield #28 // Field pos:I
4: bipush 10
6: if_icmpge 33
9: aload_0
10: getfield #21 // Field array:[C
13: aload_0
14: getfield #28 // Field pos:I
17: bipush 42
19: castore
20: aload_0
21: dup
22: getfield #28 // Field pos:I
25: iconst_1
26: iadd
27: putfield #28 // Field pos:I
30: goto 38
33: aload_0
34: iconst_0
35: putfield #28 // Field pos:I
38: return
}
Assembly (Intel)
# {method} 'run' '()V' in 'com/fillumina/performance/examples/template/TryCatchVsCheckPerformanceTest$2'
# [sp+0x30] (sp of caller)
0x00007f10bf9545a0: mov r10d,DWORD PTR [rsi+0x8]
0x00007f10bf9545a4: cmp rax,r10
0x00007f10bf9545a7: jne 0x00007f10bf92c960 ; {runtime_call}
0x00007f10bf9545ad: data32 xchg ax,ax
[Verified Entry Point]
0x00007f10bf9545b0: mov DWORD PTR [rsp-0x14000],eax
0x00007f10bf9545b7: push rbp
0x00007f10bf9545b8: sub rsp,0x20 ;*synchronization entry
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$2::run@-1 (line 54)
0x00007f10bf9545bc: mov r11d,DWORD PTR [rsi+0xc] ;*getfield pos
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$2::run@1 (line 54)
0x00007f10bf9545c0: cmp r11d,0xa
0x00007f10bf9545c4: jge 0x00007f10bf9545f4 ;*if_icmpge
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$2::run@6 (line 54)
0x00007f10bf9545c6: mov ebp,DWORD PTR [rsi+0x10] ;*getfield array
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$2::run@10 (line 56)
0x00007f10bf9545c9: mov r8d,DWORD PTR [rbp+0xc] ; implicit exception: dispatches to 0x00007f10bf954615
0x00007f10bf9545cd: cmp r11d,r8d
0x00007f10bf9545d0: jae 0x00007f10bf9545fa ;*castore
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$2::run@19 (line 56)
0x00007f10bf9545d2: mov r8d,r11d
0x00007f10bf9545d5: inc r8d
0x00007f10bf9545d8: mov DWORD PTR [rsi+0xc],r8d ;*putfield pos
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$2::run@27 (line 57)
0x00007f10bf9545dc: mov r8d,0x2a
0x00007f10bf9545e2: mov WORD PTR [rbp+r11*2+0x10],r8w
;*getfield pos
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$2::run@1 (line 54)
0x00007f10bf9545e8: add rsp,0x20
0x00007f10bf9545ec: pop rbp
0x00007f10bf9545ed: test DWORD PTR [rip+0x5ccea0d],eax # 0x00007f10c5623000
; {poll_return}
0x00007f10bf9545f3: ret
0x00007f10bf9545f4: mov DWORD PTR [rsi+0xc],r12d ;*putfield pos
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$2::run@35 (line 61)
0x00007f10bf9545f8: jmp 0x00007f10bf9545e8
0x00007f10bf9545fa: mov QWORD PTR [rsp],rsi
0x00007f10bf9545fe: mov DWORD PTR [rsp+0x8],r11d
0x00007f10bf954603: mov esi,0xffffffe4
0x00007f10bf954608: data32 xchg ax,ax
0x00007f10bf95460b: call 0x00007f10bf92df20 ; OopMap{rbp=NarrowOop [0]=Oop off=112}
;*castore
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$2::run@19 (line 56)
; {runtime_call}
0x00007f10bf954610: call 0x00007f10c4419340 ; {runtime_call}
0x00007f10bf954615: mov esi,0xfffffff6
0x00007f10bf95461a: mov ebp,r11d
0x00007f10bf95461d: xchg ax,ax
0x00007f10bf95461f: call 0x00007f10bf92df20 ; OopMap{off=132}
;*castore
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$2::run@19 (line 56)
; {runtime_call}
0x00007f10bf954624: call 0x00007f10c4419340 ;*castore
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$2::run@19 (line 56)
; {runtime_call}
0x00007f10bf954629: hlt
0x00007f10bf95462a: hlt
0x00007f10bf95462b: hlt
0x00007f10bf95462c: hlt
0x00007f10bf95462d: hlt
0x00007f10bf95462e: hlt
0x00007f10bf95462f: hlt
0x00007f10bf954630: hlt
0x00007f10bf954631: hlt
0x00007f10bf954632: hlt
0x00007f10bf954633: hlt
0x00007f10bf954634: hlt
0x00007f10bf954635: hlt
0x00007f10bf954636: hlt
0x00007f10bf954637: hlt
0x00007f10bf954638: hlt
0x00007f10bf954639: hlt
0x00007f10bf95463a: hlt
0x00007f10bf95463b: hlt
0x00007f10bf95463c: hlt
0x00007f10bf95463d: hlt
0x00007f10bf95463e: hlt
0x00007f10bf95463f: hlt
[Exception Handler]
[Stub Code]
0x00007f10bf954640: jmp 0x00007f10bf953ea0 ; {no_reloc}
[Deopt Handler Code]
0x00007f10bf954645: call 0x00007f10bf95464a
0x00007f10bf95464a: sub QWORD PTR [rsp],0x5
0x00007f10bf95464f: jmp 0x00007f10bf92db00 ; {runtime_call}
0x00007f10bf954654: hlt
0x00007f10bf954655: hlt
0x00007f10bf954656: hlt
0x00007f10bf954657: hlt
# [sp+0x30] (sp of caller)
0x00007f10bf9545a0: mov r10d,DWORD PTR [rsi+0x8]
0x00007f10bf9545a4: cmp rax,r10
0x00007f10bf9545a7: jne 0x00007f10bf92c960 ; {runtime_call}
0x00007f10bf9545ad: data32 xchg ax,ax
[Verified Entry Point]
0x00007f10bf9545b0: mov DWORD PTR [rsp-0x14000],eax
0x00007f10bf9545b7: push rbp
0x00007f10bf9545b8: sub rsp,0x20 ;*synchronization entry
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$2::run@-1 (line 54)
0x00007f10bf9545bc: mov r11d,DWORD PTR [rsi+0xc] ;*getfield pos
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$2::run@1 (line 54)
0x00007f10bf9545c0: cmp r11d,0xa
0x00007f10bf9545c4: jge 0x00007f10bf9545f4 ;*if_icmpge
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$2::run@6 (line 54)
0x00007f10bf9545c6: mov ebp,DWORD PTR [rsi+0x10] ;*getfield array
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$2::run@10 (line 56)
0x00007f10bf9545c9: mov r8d,DWORD PTR [rbp+0xc] ; implicit exception: dispatches to 0x00007f10bf954615
0x00007f10bf9545cd: cmp r11d,r8d
0x00007f10bf9545d0: jae 0x00007f10bf9545fa ;*castore
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$2::run@19 (line 56)
0x00007f10bf9545d2: mov r8d,r11d
0x00007f10bf9545d5: inc r8d
0x00007f10bf9545d8: mov DWORD PTR [rsi+0xc],r8d ;*putfield pos
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$2::run@27 (line 57)
0x00007f10bf9545dc: mov r8d,0x2a
0x00007f10bf9545e2: mov WORD PTR [rbp+r11*2+0x10],r8w
;*getfield pos
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$2::run@1 (line 54)
0x00007f10bf9545e8: add rsp,0x20
0x00007f10bf9545ec: pop rbp
0x00007f10bf9545ed: test DWORD PTR [rip+0x5ccea0d],eax # 0x00007f10c5623000
; {poll_return}
0x00007f10bf9545f3: ret
0x00007f10bf9545f4: mov DWORD PTR [rsi+0xc],r12d ;*putfield pos
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$2::run@35 (line 61)
0x00007f10bf9545f8: jmp 0x00007f10bf9545e8
0x00007f10bf9545fa: mov QWORD PTR [rsp],rsi
0x00007f10bf9545fe: mov DWORD PTR [rsp+0x8],r11d
0x00007f10bf954603: mov esi,0xffffffe4
0x00007f10bf954608: data32 xchg ax,ax
0x00007f10bf95460b: call 0x00007f10bf92df20 ; OopMap{rbp=NarrowOop [0]=Oop off=112}
;*castore
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$2::run@19 (line 56)
; {runtime_call}
0x00007f10bf954610: call 0x00007f10c4419340 ; {runtime_call}
0x00007f10bf954615: mov esi,0xfffffff6
0x00007f10bf95461a: mov ebp,r11d
0x00007f10bf95461d: xchg ax,ax
0x00007f10bf95461f: call 0x00007f10bf92df20 ; OopMap{off=132}
;*castore
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$2::run@19 (line 56)
; {runtime_call}
0x00007f10bf954624: call 0x00007f10c4419340 ;*castore
; - com.fillumina.performance.examples.template.TryCatchVsCheckPerformanceTest$2::run@19 (line 56)
; {runtime_call}
0x00007f10bf954629: hlt
0x00007f10bf95462a: hlt
0x00007f10bf95462b: hlt
0x00007f10bf95462c: hlt
0x00007f10bf95462d: hlt
0x00007f10bf95462e: hlt
0x00007f10bf95462f: hlt
0x00007f10bf954630: hlt
0x00007f10bf954631: hlt
0x00007f10bf954632: hlt
0x00007f10bf954633: hlt
0x00007f10bf954634: hlt
0x00007f10bf954635: hlt
0x00007f10bf954636: hlt
0x00007f10bf954637: hlt
0x00007f10bf954638: hlt
0x00007f10bf954639: hlt
0x00007f10bf95463a: hlt
0x00007f10bf95463b: hlt
0x00007f10bf95463c: hlt
0x00007f10bf95463d: hlt
0x00007f10bf95463e: hlt
0x00007f10bf95463f: hlt
[Exception Handler]
[Stub Code]
0x00007f10bf954640: jmp 0x00007f10bf953ea0 ; {no_reloc}
[Deopt Handler Code]
0x00007f10bf954645: call 0x00007f10bf95464a
0x00007f10bf95464a: sub QWORD PTR [rsp],0x5
0x00007f10bf95464f: jmp 0x00007f10bf92db00 ; {runtime_call}
0x00007f10bf954654: hlt
0x00007f10bf954655: hlt
0x00007f10bf954656: hlt
0x00007f10bf954657: hlt
JIT Journal
<task_queued stamp="0.111" iicount="10000" bytes="39" hot_count="10000" count="5000" compile_id="8" comment="count" backedge_count="1"/>
<nmethod stamp="0.113" iicount="10800" nul_chk_table_offset="640" bytes="39" scopes_pcs_offset="568" count="8100" dependencies_offset="632" insts_offset="336" relocation_offset="288" compileMillis="2" backedge_count="1" size="656" scopes_data_offset="528" address="0x00007ff0de93fd50" nmsize="184" entry="0x00007ff0de93fea0" compiler="C2" compile_id="8" oops_offset="520" success="1" stub_offset="496"/>
<task stamp="0.112" iicount="10800" bytes="39" count="5800" compile_id="8" backedge_count="1">
<phase stamp="0.112" nodes="3" name="parse" live="3">
<type id="636" name="void"/>
<klass id="729" flags="0" name="com/fillumina/performance/examples/template/TryCatchVsCheckPerformanceTest$2"/>
<method id="730" iicount="10820" holder="729" bytes="39" flags="1" name="run" return="636"/>
<parse stamp="0.112" uses="10820" method="730">
<bc bci="6" code="162"/>
<branch cnt="7601" not_taken="6910" taken="691" prob="0.0909091" target_bci="33"/>
<bc bci="19" code="85"/>
<uncommon_trap bci="19" reason="null_check" action="maybe_recompile"/>
<uncommon_trap bci="19" reason="range_check" action="make_not_entrant" comment="range_check"/>
<parse_done stamp="0.112" nodes="89" memory="31440" live="86"/>
</parse>
<phase_done stamp="0.112" nodes="90" name="parse" live="60"/>
</phase>
<phase stamp="0.112" nodes="90" name="optimizer" live="60">
<phase stamp="0.112" nodes="90" name="ccp" live="60">
<phase_done stamp="0.112" nodes="90" name="ccp" live="60"/>
</phase>
<phase stamp="0.112" nodes="90" name="idealLoop" live="60">
<phase_done stamp="0.112" nodes="90" name="idealLoop" live="60"/>
</phase>
<phase_done stamp="0.112" nodes="93" name="optimizer" live="60"/>
</phase>
<phase stamp="0.112" nodes="93" name="matcher" live="60">
<phase_done stamp="0.112" nodes="50" name="matcher" live="50"/>
</phase>
<phase stamp="0.112" nodes="63" name="regalloc" live="63">
<regalloc attempts="1" success="1"/>
<phase_done stamp="0.113" nodes="68" name="regalloc" live="66"/>
</phase>
<phase stamp="0.113" nodes="68" name="output" live="66">
<phase_done stamp="0.113" nodes="79" name="output" live="74"/>
</phase>
<code_cache largest_free_block="49910976" adapters="138" free_code_cache="49926720" nmethods="7" total_blobs="191"/>
<task_done stamp="0.113" count="8100" nmsize="184" backedge_count="1" success="1"/>
</task>
<nmethod stamp="0.113" iicount="10800" nul_chk_table_offset="640" bytes="39" scopes_pcs_offset="568" count="8100" dependencies_offset="632" insts_offset="336" relocation_offset="288" compileMillis="2" backedge_count="1" size="656" scopes_data_offset="528" address="0x00007ff0de93fd50" nmsize="184" entry="0x00007ff0de93fea0" compiler="C2" compile_id="8" oops_offset="520" success="1" stub_offset="496"/>
<task stamp="0.112" iicount="10800" bytes="39" count="5800" compile_id="8" backedge_count="1">
<phase stamp="0.112" nodes="3" name="parse" live="3">
<type id="636" name="void"/>
<klass id="729" flags="0" name="com/fillumina/performance/examples/template/TryCatchVsCheckPerformanceTest$2"/>
<method id="730" iicount="10820" holder="729" bytes="39" flags="1" name="run" return="636"/>
<parse stamp="0.112" uses="10820" method="730">
<bc bci="6" code="162"/>
<branch cnt="7601" not_taken="6910" taken="691" prob="0.0909091" target_bci="33"/>
<bc bci="19" code="85"/>
<uncommon_trap bci="19" reason="null_check" action="maybe_recompile"/>
<uncommon_trap bci="19" reason="range_check" action="make_not_entrant" comment="range_check"/>
<parse_done stamp="0.112" nodes="89" memory="31440" live="86"/>
</parse>
<phase_done stamp="0.112" nodes="90" name="parse" live="60"/>
</phase>
<phase stamp="0.112" nodes="90" name="optimizer" live="60">
<phase stamp="0.112" nodes="90" name="ccp" live="60">
<phase_done stamp="0.112" nodes="90" name="ccp" live="60"/>
</phase>
<phase stamp="0.112" nodes="90" name="idealLoop" live="60">
<phase_done stamp="0.112" nodes="90" name="idealLoop" live="60"/>
</phase>
<phase_done stamp="0.112" nodes="93" name="optimizer" live="60"/>
</phase>
<phase stamp="0.112" nodes="93" name="matcher" live="60">
<phase_done stamp="0.112" nodes="50" name="matcher" live="50"/>
</phase>
<phase stamp="0.112" nodes="63" name="regalloc" live="63">
<regalloc attempts="1" success="1"/>
<phase_done stamp="0.113" nodes="68" name="regalloc" live="66"/>
</phase>
<phase stamp="0.113" nodes="68" name="output" live="66">
<phase_done stamp="0.113" nodes="79" name="output" live="74"/>
</phase>
<code_cache largest_free_block="49910976" adapters="138" free_code_cache="49926720" nmethods="7" total_blobs="191"/>
<task_done stamp="0.113" count="8100" nmsize="184" backedge_count="1" success="1"/>
</task>
Output produced using JITWatch (https://github.com/AdoptOpenJDK/jitwatch)
Results of benchmarking the 2 Runnables and logging results using Gil Tene's HdrHistogram:
Recorded latencies [in usec] for RunWithException:
Value Percentile TotalCount 1/(1-Percentile)
0.019 0.000000000000 957912 1.00
0.022 0.100000000000 16449014 1.11
0.023 0.200000000000 48623937 1.25
0.024 0.300000000000 57867462 1.43
0.025 0.400000000000 91209671 1.67
0.025 0.500000000000 91209671 2.00
0.025 0.550000000000 91209671 2.22
0.026 0.600000000000 137727518 2.50
0.026 0.650000000000 137727518 2.86
0.026 0.700000000000 137727518 3.33
0.026 0.750000000000 137727518 4.00
0.026 0.775000000000 137727518 4.44
0.026 0.800000000000 137727518 5.00
0.026 0.825000000000 137727518 5.71
0.027 0.850000000000 159966079 6.67
0.027 0.875000000000 159966079 8.00
0.027 0.887500000000 159966079 8.89
0.027 0.900000000000 159966079 10.00
0.027 0.912500000000 159966079 11.43
0.027 0.925000000000 159966079 13.33
0.027 0.937500000000 159966079 16.00
0.027 0.943750000000 159966079 17.78
0.027 0.950000000000 159966079 20.00
0.027 0.956250000000 159966079 22.86
0.027 0.962500000000 159966079 26.67
0.027 0.968750000000 159966079 32.00
0.027 0.971875000000 159966079 35.56
0.027 0.975000000000 159966079 40.00
0.027 0.978125000000 159966079 45.71
0.027 0.981250000000 159966079 53.33
0.027 0.984375000000 159966079 64.00
0.028 0.985937500000 162149174 71.11
0.028 0.987500000000 162149174 80.00
0.028 0.989062500000 162149174 91.43
0.028 0.990625000000 162149174 106.67
0.028 0.992187500000 162149174 128.00
0.028 0.992968750000 162149174 142.22
0.028 0.993750000000 162149174 160.00
0.028 0.994531250000 162149174 182.86
0.028 0.995312500000 162149174 213.33
0.028 0.996093750000 162149174 256.00
0.028 0.996484375000 162149174 284.44
0.028 0.996875000000 162149174 320.00
0.028 0.997265625000 162149174 365.71
0.028 0.997656250000 162149174 426.67
0.028 0.998046875000 162149174 512.00
0.028 0.998242187500 162149174 568.89
0.028 0.998437500000 162149174 640.00
0.029 0.998632812500 162172496 731.43
0.030 0.998828125000 162207799 853.33
0.031 0.999023437500 162231452 1024.00
0.032 0.999121093750 162249444 1137.78
0.033 0.999218750000 162266184 1280.00
0.034 0.999316406250 162282174 1462.86
0.035 0.999414062500 162296978 1706.67
0.036 0.999511718750 162309521 2048.00
0.037 0.999560546875 162320396 2275.56
0.037 0.999609375000 162320396 2560.00
0.038 0.999658203125 162329322 2925.71
0.039 0.999707031250 162335178 3413.33
0.041 0.999755859375 162345137 4096.00
0.042 0.999780273438 162349996 4551.11
0.042 0.999804687500 162349996 5120.00
0.043 0.999829101563 162354684 5851.43
0.044 0.999853515625 162358005 6826.67
0.045 0.999877929688 162363481 8192.00
0.046 0.999890136719 162365498 9102.22
0.047 0.999902343750 162366754 10240.00
0.049 0.999914550781 162368188 11702.86
0.057 0.999926757813 162369853 13653.33
0.064 0.999938964844 162371844 16384.00
0.075 0.999945068359 162372747 18204.44
0.134 0.999951171875 162373739 20480.00
2.369 0.999957275391 162374725 23405.71
2.809 0.999963378906 162375791 27306.67
2.823 0.999969482422 162376793 32768.00
2.831 0.999972534180 162377305 36408.89
2.839 0.999975585938 162377812 40960.00
2.845 0.999978637695 162378222 46811.43
2.853 0.999981689453 162378765 54613.33
2.861 0.999984741211 162379240 65536.00
2.867 0.999986267090 162379488 72817.78
2.871 0.999987792969 162379696 81920.00
2.877 0.999989318848 162380043 93622.86
2.881 0.999990844727 162380244 109226.67
2.887 0.999992370605 162380472 131072.00
2.889 0.999993133545 162380556 145635.56
2.893 0.999993896484 162380717 163840.00
3.075 0.999994659424 162380795 187245.71
3.317 0.999995422363 162380919 218453.33
3.541 0.999996185303 162381043 262144.00
3.855 0.999996566772 162381107 291271.11
4.019 0.999996948242 162381167 327680.00
4.295 0.999997329712 162381230 374491.43
4.411 0.999997711182 162381293 436906.67
4.495 0.999998092651 162381354 524288.00
4.539 0.999998283386 162381389 582542.22
4.595 0.999998474121 162381418 655360.00
4.671 0.999998664856 162381447 748982.86
4.747 0.999998855591 162381479 873813.33
4.971 0.999999046326 162381508 1048576.00
5.207 0.999999141693 162381523 1165084.44
5.383 0.999999237061 162381539 1310720.00
5.479 0.999999332428 162381554 1497965.71
5.795 0.999999427795 162381571 1747626.67
6.115 0.999999523163 162381585 2097152.00
6.735 0.999999570847 162381593 2330168.89
7.143 0.999999618530 162381601 2621440.00
7.403 0.999999666214 162381608 2995931.43
8.231 0.999999713898 162381616 3495253.33
8.831 0.999999761581 162381624 4194304.00
14.535 0.999999785423 162381628 4660337.78
16.119 0.999999809265 162381632 5242880.00
16.735 0.999999833107 162381635 5991862.86
17.567 0.999999856949 162381639 6990506.67
26.399 0.999999880791 162381643 8388608.00
27.663 0.999999892712 162381645 9320675.55
29.055 0.999999904633 162381647 10485760.00
35.903 0.999999916553 162381649 11983725.71
50.879 0.999999928474 162381651 13981013.34
60.063 0.999999940395 162381653 16777216.00
68.991 0.999999946356 162381654 18641351.10
73.983 0.999999952316 162381655 20971519.98
89.023 0.999999958277 162381656 23967451.45
91.135 0.999999964237 162381657 27962026.68
100.479 0.999999970198 162381658 33554432.00
100.479 0.999999973178 162381658 37282702.28
100.991 0.999999976158 162381659 41943039.96
100.991 0.999999979138 162381659 47934902.91
101.439 0.999999982119 162381660 55924053.19
101.439 0.999999985099 162381660 67108864.00
101.439 0.999999986589 162381660 74565404.57
106.111 0.999999988079 162381661 83886080.31
106.111 0.999999989569 162381661 95869805.31
106.111 0.999999991059 162381661 111848106.39
106.111 0.999999992549 162381661 134217728.00
106.111 0.999999993294 162381661 149130807.90
108.351 0.999999994040 162381662 167772160.63
108.351 1.000000000000 162381662
#[Mean = 0.025, StdDeviation = 0.032]
#[Max = 108.288, Total count = 162381662]
#[Buckets = 32, SubBuckets = 2048]
Recorded latencies [in usec] for runWithLengthCheck:
Value Percentile TotalCount 1/(1-Percentile)
0.018 0.000000000000 2 1.00
0.022 0.100000000000 16503395 1.11
0.023 0.200000000000 48415739 1.25
0.024 0.300000000000 57646841 1.43
0.025 0.400000000000 90757538 1.67
0.025 0.500000000000 90757538 2.00
0.025 0.550000000000 90757538 2.22
0.026 0.600000000000 136828932 2.50
0.026 0.650000000000 136828932 2.86
0.026 0.700000000000 136828932 3.33
0.026 0.750000000000 136828932 4.00
0.026 0.775000000000 136828932 4.44
0.026 0.800000000000 136828932 5.00
0.026 0.825000000000 136828932 5.71
0.027 0.850000000000 158961924 6.67
0.027 0.875000000000 158961924 8.00
0.027 0.887500000000 158961924 8.89
0.027 0.900000000000 158961924 10.00
0.027 0.912500000000 158961924 11.43
0.027 0.925000000000 158961924 13.33
0.027 0.937500000000 158961924 16.00
0.027 0.943750000000 158961924 17.78
0.027 0.950000000000 158961924 20.00
0.027 0.956250000000 158961924 22.86
0.027 0.962500000000 158961924 26.67
0.027 0.968750000000 158961924 32.00
0.027 0.971875000000 158961924 35.56
0.027 0.975000000000 158961924 40.00
0.027 0.978125000000 158961924 45.71
0.028 0.981250000000 161407764 53.33
0.028 0.984375000000 161407764 64.00
0.028 0.985937500000 161407764 71.11
0.028 0.987500000000 161407764 80.00
0.028 0.989062500000 161407764 91.43
0.028 0.990625000000 161407764 106.67
0.028 0.992187500000 161407764 128.00
0.028 0.992968750000 161407764 142.22
0.029 0.993750000000 161521648 160.00
0.030 0.994531250000 161662514 182.86
0.031 0.995312500000 161777012 213.33
0.032 0.996093750000 161873838 256.00
0.033 0.996484375000 161959276 284.44
0.034 0.996875000000 162042071 320.00
0.035 0.997265625000 162119675 365.71
0.035 0.997656250000 162119675 426.67
0.036 0.998046875000 162188276 512.00
0.037 0.998242187500 162246452 568.89
0.037 0.998437500000 162246452 640.00
0.038 0.998632812500 162295292 731.43
0.039 0.998828125000 162328823 853.33
0.040 0.999023437500 162355354 1024.00
0.040 0.999121093750 162355354 1137.78
0.041 0.999218750000 162381512 1280.00
0.041 0.999316406250 162381512 1462.86
0.042 0.999414062500 162404156 1706.67
0.043 0.999511718750 162423926 2048.00
0.043 0.999560546875 162423926 2275.56
0.044 0.999609375000 162439142 2560.00
0.044 0.999658203125 162439142 2925.71
0.045 0.999707031250 162452687 3413.33
0.045 0.999755859375 162452687 4096.00
0.046 0.999780273438 162459662 4551.11
0.046 0.999804687500 162459662 5120.00
0.047 0.999829101563 162463921 5851.43
0.049 0.999853515625 162468743 6826.67
0.051 0.999877929688 162471093 8192.00
0.055 0.999890136719 162473555 9102.22
0.058 0.999902343750 162475399 10240.00
0.062 0.999914550781 162477287 11702.86
0.071 0.999926757813 162479114 13653.33
0.099 0.999938964844 162480997 16384.00
0.126 0.999945068359 162481992 18204.44
0.281 0.999951171875 162482986 20480.00
2.773 0.999957275391 162483966 23405.71
2.811 0.999963378906 162484965 27306.67
2.825 0.999969482422 162485954 32768.00
2.835 0.999972534180 162486499 36408.89
2.843 0.999975585938 162487015 40960.00
2.851 0.999978637695 162487525 46811.43
2.859 0.999981689453 162487987 54613.33
2.869 0.999984741211 162488463 65536.00
2.875 0.999986267090 162488802 72817.78
2.879 0.999987792969 162489020 81920.00
2.883 0.999989318848 162489226 93622.86
2.889 0.999990844727 162489481 109226.67
2.933 0.999992370605 162489667 131072.00
3.293 0.999993133545 162489790 145635.56
3.427 0.999993896484 162489914 163840.00
4.021 0.999994659424 162490038 187245.71
4.475 0.999995422363 162490163 218453.33
4.831 0.999996185303 162490286 262144.00
4.975 0.999996566772 162490348 291271.11
5.207 0.999996948242 162490410 327680.00
5.535 0.999997329712 162490472 374491.43
5.835 0.999997711182 162490534 436906.67
6.315 0.999998092651 162490596 524288.00
6.507 0.999998283386 162490628 582542.22
6.807 0.999998474121 162490658 655360.00
7.499 0.999998664856 162490689 748982.86
8.927 0.999998855591 162490720 873813.33
10.551 0.999999046326 162490751 1048576.00
13.415 0.999999141693 162490766 1165084.44
18.527 0.999999237061 162490782 1310720.00
27.055 0.999999332428 162490797 1497965.71
34.207 0.999999427795 162490813 1747626.67
42.079 0.999999523163 162490828 2097152.00
57.503 0.999999570847 162490836 2330168.89
68.351 0.999999618530 162490844 2621440.00
70.143 0.999999666214 162490851 2995931.43
79.679 0.999999713898 162490859 3495253.33
81.535 0.999999761581 162490867 4194304.00
86.847 0.999999785423 162490871 4660337.78
101.375 0.999999809265 162490876 5242880.00
102.143 0.999999833107 162490878 5991862.86
104.063 0.999999856949 162490882 6990506.67
104.895 0.999999880791 162490886 8388608.00
105.087 0.999999892712 162490889 9320675.55
105.151 0.999999904633 162490890 10485760.00
106.687 0.999999916553 162490892 11983725.71
108.607 0.999999928474 162490894 13981013.34
108.991 0.999999940395 162490896 16777216.00
109.439 0.999999946356 162490897 18641351.10
109.503 0.999999952316 162490898 20971519.98
115.711 0.999999958277 162490899 23967451.45
120.319 0.999999964237 162490900 27962026.68
120.959 0.999999970198 162490901 33554432.00
120.959 0.999999973178 162490901 37282702.28
121.343 0.999999976158 162490902 41943039.96
121.343 0.999999979138 162490902 47934902.91
121.791 0.999999982119 162490903 55924053.19
121.791 0.999999985099 162490903 67108864.00
121.791 0.999999986589 162490903 74565404.57
121.919 0.999999988079 162490904 83886080.31
121.919 0.999999989569 162490904 95869805.31
121.919 0.999999991059 162490904 111848106.39
121.919 0.999999992549 162490904 134217728.00
121.919 0.999999993294 162490904 149130807.90
129.855 0.999999994040 162490905 167772160.63
129.855 1.000000000000 162490905
#[Mean = 0.025, StdDeviation = 0.067]
#[Max = 129.792, Total count = 162490905]
#[Buckets = 32, SubBuckets = 2048]
Value Percentile TotalCount 1/(1-Percentile)
0.019 0.000000000000 957912 1.00
0.022 0.100000000000 16449014 1.11
0.023 0.200000000000 48623937 1.25
0.024 0.300000000000 57867462 1.43
0.025 0.400000000000 91209671 1.67
0.025 0.500000000000 91209671 2.00
0.025 0.550000000000 91209671 2.22
0.026 0.600000000000 137727518 2.50
0.026 0.650000000000 137727518 2.86
0.026 0.700000000000 137727518 3.33
0.026 0.750000000000 137727518 4.00
0.026 0.775000000000 137727518 4.44
0.026 0.800000000000 137727518 5.00
0.026 0.825000000000 137727518 5.71
0.027 0.850000000000 159966079 6.67
0.027 0.875000000000 159966079 8.00
0.027 0.887500000000 159966079 8.89
0.027 0.900000000000 159966079 10.00
0.027 0.912500000000 159966079 11.43
0.027 0.925000000000 159966079 13.33
0.027 0.937500000000 159966079 16.00
0.027 0.943750000000 159966079 17.78
0.027 0.950000000000 159966079 20.00
0.027 0.956250000000 159966079 22.86
0.027 0.962500000000 159966079 26.67
0.027 0.968750000000 159966079 32.00
0.027 0.971875000000 159966079 35.56
0.027 0.975000000000 159966079 40.00
0.027 0.978125000000 159966079 45.71
0.027 0.981250000000 159966079 53.33
0.027 0.984375000000 159966079 64.00
0.028 0.985937500000 162149174 71.11
0.028 0.987500000000 162149174 80.00
0.028 0.989062500000 162149174 91.43
0.028 0.990625000000 162149174 106.67
0.028 0.992187500000 162149174 128.00
0.028 0.992968750000 162149174 142.22
0.028 0.993750000000 162149174 160.00
0.028 0.994531250000 162149174 182.86
0.028 0.995312500000 162149174 213.33
0.028 0.996093750000 162149174 256.00
0.028 0.996484375000 162149174 284.44
0.028 0.996875000000 162149174 320.00
0.028 0.997265625000 162149174 365.71
0.028 0.997656250000 162149174 426.67
0.028 0.998046875000 162149174 512.00
0.028 0.998242187500 162149174 568.89
0.028 0.998437500000 162149174 640.00
0.029 0.998632812500 162172496 731.43
0.030 0.998828125000 162207799 853.33
0.031 0.999023437500 162231452 1024.00
0.032 0.999121093750 162249444 1137.78
0.033 0.999218750000 162266184 1280.00
0.034 0.999316406250 162282174 1462.86
0.035 0.999414062500 162296978 1706.67
0.036 0.999511718750 162309521 2048.00
0.037 0.999560546875 162320396 2275.56
0.037 0.999609375000 162320396 2560.00
0.038 0.999658203125 162329322 2925.71
0.039 0.999707031250 162335178 3413.33
0.041 0.999755859375 162345137 4096.00
0.042 0.999780273438 162349996 4551.11
0.042 0.999804687500 162349996 5120.00
0.043 0.999829101563 162354684 5851.43
0.044 0.999853515625 162358005 6826.67
0.045 0.999877929688 162363481 8192.00
0.046 0.999890136719 162365498 9102.22
0.047 0.999902343750 162366754 10240.00
0.049 0.999914550781 162368188 11702.86
0.057 0.999926757813 162369853 13653.33
0.064 0.999938964844 162371844 16384.00
0.075 0.999945068359 162372747 18204.44
0.134 0.999951171875 162373739 20480.00
2.369 0.999957275391 162374725 23405.71
2.809 0.999963378906 162375791 27306.67
2.823 0.999969482422 162376793 32768.00
2.831 0.999972534180 162377305 36408.89
2.839 0.999975585938 162377812 40960.00
2.845 0.999978637695 162378222 46811.43
2.853 0.999981689453 162378765 54613.33
2.861 0.999984741211 162379240 65536.00
2.867 0.999986267090 162379488 72817.78
2.871 0.999987792969 162379696 81920.00
2.877 0.999989318848 162380043 93622.86
2.881 0.999990844727 162380244 109226.67
2.887 0.999992370605 162380472 131072.00
2.889 0.999993133545 162380556 145635.56
2.893 0.999993896484 162380717 163840.00
3.075 0.999994659424 162380795 187245.71
3.317 0.999995422363 162380919 218453.33
3.541 0.999996185303 162381043 262144.00
3.855 0.999996566772 162381107 291271.11
4.019 0.999996948242 162381167 327680.00
4.295 0.999997329712 162381230 374491.43
4.411 0.999997711182 162381293 436906.67
4.495 0.999998092651 162381354 524288.00
4.539 0.999998283386 162381389 582542.22
4.595 0.999998474121 162381418 655360.00
4.671 0.999998664856 162381447 748982.86
4.747 0.999998855591 162381479 873813.33
4.971 0.999999046326 162381508 1048576.00
5.207 0.999999141693 162381523 1165084.44
5.383 0.999999237061 162381539 1310720.00
5.479 0.999999332428 162381554 1497965.71
5.795 0.999999427795 162381571 1747626.67
6.115 0.999999523163 162381585 2097152.00
6.735 0.999999570847 162381593 2330168.89
7.143 0.999999618530 162381601 2621440.00
7.403 0.999999666214 162381608 2995931.43
8.231 0.999999713898 162381616 3495253.33
8.831 0.999999761581 162381624 4194304.00
14.535 0.999999785423 162381628 4660337.78
16.119 0.999999809265 162381632 5242880.00
16.735 0.999999833107 162381635 5991862.86
17.567 0.999999856949 162381639 6990506.67
26.399 0.999999880791 162381643 8388608.00
27.663 0.999999892712 162381645 9320675.55
29.055 0.999999904633 162381647 10485760.00
35.903 0.999999916553 162381649 11983725.71
50.879 0.999999928474 162381651 13981013.34
60.063 0.999999940395 162381653 16777216.00
68.991 0.999999946356 162381654 18641351.10
73.983 0.999999952316 162381655 20971519.98
89.023 0.999999958277 162381656 23967451.45
91.135 0.999999964237 162381657 27962026.68
100.479 0.999999970198 162381658 33554432.00
100.479 0.999999973178 162381658 37282702.28
100.991 0.999999976158 162381659 41943039.96
100.991 0.999999979138 162381659 47934902.91
101.439 0.999999982119 162381660 55924053.19
101.439 0.999999985099 162381660 67108864.00
101.439 0.999999986589 162381660 74565404.57
106.111 0.999999988079 162381661 83886080.31
106.111 0.999999989569 162381661 95869805.31
106.111 0.999999991059 162381661 111848106.39
106.111 0.999999992549 162381661 134217728.00
106.111 0.999999993294 162381661 149130807.90
108.351 0.999999994040 162381662 167772160.63
108.351 1.000000000000 162381662
#[Mean = 0.025, StdDeviation = 0.032]
#[Max = 108.288, Total count = 162381662]
#[Buckets = 32, SubBuckets = 2048]
Recorded latencies [in usec] for runWithLengthCheck:
Value Percentile TotalCount 1/(1-Percentile)
0.018 0.000000000000 2 1.00
0.022 0.100000000000 16503395 1.11
0.023 0.200000000000 48415739 1.25
0.024 0.300000000000 57646841 1.43
0.025 0.400000000000 90757538 1.67
0.025 0.500000000000 90757538 2.00
0.025 0.550000000000 90757538 2.22
0.026 0.600000000000 136828932 2.50
0.026 0.650000000000 136828932 2.86
0.026 0.700000000000 136828932 3.33
0.026 0.750000000000 136828932 4.00
0.026 0.775000000000 136828932 4.44
0.026 0.800000000000 136828932 5.00
0.026 0.825000000000 136828932 5.71
0.027 0.850000000000 158961924 6.67
0.027 0.875000000000 158961924 8.00
0.027 0.887500000000 158961924 8.89
0.027 0.900000000000 158961924 10.00
0.027 0.912500000000 158961924 11.43
0.027 0.925000000000 158961924 13.33
0.027 0.937500000000 158961924 16.00
0.027 0.943750000000 158961924 17.78
0.027 0.950000000000 158961924 20.00
0.027 0.956250000000 158961924 22.86
0.027 0.962500000000 158961924 26.67
0.027 0.968750000000 158961924 32.00
0.027 0.971875000000 158961924 35.56
0.027 0.975000000000 158961924 40.00
0.027 0.978125000000 158961924 45.71
0.028 0.981250000000 161407764 53.33
0.028 0.984375000000 161407764 64.00
0.028 0.985937500000 161407764 71.11
0.028 0.987500000000 161407764 80.00
0.028 0.989062500000 161407764 91.43
0.028 0.990625000000 161407764 106.67
0.028 0.992187500000 161407764 128.00
0.028 0.992968750000 161407764 142.22
0.029 0.993750000000 161521648 160.00
0.030 0.994531250000 161662514 182.86
0.031 0.995312500000 161777012 213.33
0.032 0.996093750000 161873838 256.00
0.033 0.996484375000 161959276 284.44
0.034 0.996875000000 162042071 320.00
0.035 0.997265625000 162119675 365.71
0.035 0.997656250000 162119675 426.67
0.036 0.998046875000 162188276 512.00
0.037 0.998242187500 162246452 568.89
0.037 0.998437500000 162246452 640.00
0.038 0.998632812500 162295292 731.43
0.039 0.998828125000 162328823 853.33
0.040 0.999023437500 162355354 1024.00
0.040 0.999121093750 162355354 1137.78
0.041 0.999218750000 162381512 1280.00
0.041 0.999316406250 162381512 1462.86
0.042 0.999414062500 162404156 1706.67
0.043 0.999511718750 162423926 2048.00
0.043 0.999560546875 162423926 2275.56
0.044 0.999609375000 162439142 2560.00
0.044 0.999658203125 162439142 2925.71
0.045 0.999707031250 162452687 3413.33
0.045 0.999755859375 162452687 4096.00
0.046 0.999780273438 162459662 4551.11
0.046 0.999804687500 162459662 5120.00
0.047 0.999829101563 162463921 5851.43
0.049 0.999853515625 162468743 6826.67
0.051 0.999877929688 162471093 8192.00
0.055 0.999890136719 162473555 9102.22
0.058 0.999902343750 162475399 10240.00
0.062 0.999914550781 162477287 11702.86
0.071 0.999926757813 162479114 13653.33
0.099 0.999938964844 162480997 16384.00
0.126 0.999945068359 162481992 18204.44
0.281 0.999951171875 162482986 20480.00
2.773 0.999957275391 162483966 23405.71
2.811 0.999963378906 162484965 27306.67
2.825 0.999969482422 162485954 32768.00
2.835 0.999972534180 162486499 36408.89
2.843 0.999975585938 162487015 40960.00
2.851 0.999978637695 162487525 46811.43
2.859 0.999981689453 162487987 54613.33
2.869 0.999984741211 162488463 65536.00
2.875 0.999986267090 162488802 72817.78
2.879 0.999987792969 162489020 81920.00
2.883 0.999989318848 162489226 93622.86
2.889 0.999990844727 162489481 109226.67
2.933 0.999992370605 162489667 131072.00
3.293 0.999993133545 162489790 145635.56
3.427 0.999993896484 162489914 163840.00
4.021 0.999994659424 162490038 187245.71
4.475 0.999995422363 162490163 218453.33
4.831 0.999996185303 162490286 262144.00
4.975 0.999996566772 162490348 291271.11
5.207 0.999996948242 162490410 327680.00
5.535 0.999997329712 162490472 374491.43
5.835 0.999997711182 162490534 436906.67
6.315 0.999998092651 162490596 524288.00
6.507 0.999998283386 162490628 582542.22
6.807 0.999998474121 162490658 655360.00
7.499 0.999998664856 162490689 748982.86
8.927 0.999998855591 162490720 873813.33
10.551 0.999999046326 162490751 1048576.00
13.415 0.999999141693 162490766 1165084.44
18.527 0.999999237061 162490782 1310720.00
27.055 0.999999332428 162490797 1497965.71
34.207 0.999999427795 162490813 1747626.67
42.079 0.999999523163 162490828 2097152.00
57.503 0.999999570847 162490836 2330168.89
68.351 0.999999618530 162490844 2621440.00
70.143 0.999999666214 162490851 2995931.43
79.679 0.999999713898 162490859 3495253.33
81.535 0.999999761581 162490867 4194304.00
86.847 0.999999785423 162490871 4660337.78
101.375 0.999999809265 162490876 5242880.00
102.143 0.999999833107 162490878 5991862.86
104.063 0.999999856949 162490882 6990506.67
104.895 0.999999880791 162490886 8388608.00
105.087 0.999999892712 162490889 9320675.55
105.151 0.999999904633 162490890 10485760.00
106.687 0.999999916553 162490892 11983725.71
108.607 0.999999928474 162490894 13981013.34
108.991 0.999999940395 162490896 16777216.00
109.439 0.999999946356 162490897 18641351.10
109.503 0.999999952316 162490898 20971519.98
115.711 0.999999958277 162490899 23967451.45
120.319 0.999999964237 162490900 27962026.68
120.959 0.999999970198 162490901 33554432.00
120.959 0.999999973178 162490901 37282702.28
121.343 0.999999976158 162490902 41943039.96
121.343 0.999999979138 162490902 47934902.91
121.791 0.999999982119 162490903 55924053.19
121.791 0.999999985099 162490903 67108864.00
121.791 0.999999986589 162490903 74565404.57
121.919 0.999999988079 162490904 83886080.31
121.919 0.999999989569 162490904 95869805.31
121.919 0.999999991059 162490904 111848106.39
121.919 0.999999992549 162490904 134217728.00
121.919 0.999999993294 162490904 149130807.90
129.855 0.999999994040 162490905 167772160.63
129.855 1.000000000000 162490905
#[Mean = 0.025, StdDeviation = 0.067]
#[Max = 129.792, Total count = 162490905]
#[Buckets = 32, SubBuckets = 2048]