Last active
December 22, 2015 21:48
-
-
Save YujiSoftware/5226330 to your computer and use it in GitHub Desktop.
java version "1.6.0_25-ea-fastdebug"
Java(TM) SE Runtime Environment (build 1.6.0_25-ea-fastdebug-b03)
Java HotSpot(TM) Server VM (build 20.0-b10-fastdebug, mixed mode)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{method} | |
- klass: {other class} | |
- this oop: 0x10252480 | |
- method holder: 'StringJoin' | |
- constants: 0x10252078 constant pool [54] for 'StringJoin' cache=0x10252690 | |
- access: 0xc100008a private static transient | |
- name: 'joinTest' | |
- signature: '([Ljava/lang/String;)Ljava/lang/String;' | |
- max stack: 2 | |
- max locals: 6 | |
- size of params: 1 | |
- method size: 24 | |
- vtable index: -2 | |
- i2i entry: 0x0217b700 | |
- adapter: 0x0213b66c | |
- compiled entry 0x0221ab87 | |
- code size: 51 | |
- code start: 0x10252440 | |
- code end (excl): 0x10252473 | |
- method data: 0x10255718 | |
- checked ex length: 0 | |
- linenumber start: 0x10252473 | |
- localvar length: 0 | |
# | |
# java/lang/String:exact * ( java/lang/String:exact *[int:>=0]:exact * ) | |
# | |
#r000 ecx : parm 0: java/lang/String:exact *[int:>=0]:exact * | |
# -- Old esp -- Framesize: 80 -- | |
#r045 esp+76: return address | |
#r044 esp+72: pad2, in_preserve | |
#r043 esp+68: pad2, in_preserve | |
#r042 esp+64: Fixed slot 0 | |
#r061 esp+60: spill | |
#r060 esp+56: spill | |
#r059 esp+52: spill | |
#r058 esp+48: spill | |
#r057 esp+44: spill | |
#r056 esp+40: spill | |
#r055 esp+36: spill | |
#r054 esp+32: spill | |
#r053 esp+28: spill | |
#r052 esp+24: spill | |
#r051 esp+20: spill | |
#r050 esp+16: spill | |
#r049 esp+12: spill | |
#r048 esp+ 8: outgoing argument | |
#r047 esp+ 4: outgoing argument | |
#r046 esp+ 0: outgoing argument | |
# | |
abababab N1: # B1 <- B46 B44 B29 B42 B45 B43 B54 Freq: 1 | |
abababab | |
000 B1: # B46 B2 <- BLOCK HEAD IS JUNK Freq: 1 | |
000 # stack bang | |
PUSHL EBP | |
SUB ESP,72 # Create frame | |
00e MOV EBX,ECX | |
010 MOV EAX,[ECX + #8] | |
013 NullCheck ECX | |
013 | |
013 B2: # B38 B3 <- B1 Freq: 0.999999 | |
013 TEST EAX,EAX | |
015 Jle B38 P=0.000993 C=26191.000000 | |
015 | |
01b B3: # B44 B4 <- B2 Freq: 0.999006 | |
01b TESTu EAX,EAX | |
01d Jbe,u B44 P=0.000001 C=-1.000000 | |
01d | |
023 B4: # B44 B5 <- B3 Freq: 0.999005 | |
023 MOV ECX,EAX | |
025 DEC ECX | |
026 CMPu ECX,EAX | |
028 Jnb,u B44 P=0.000001 C=-1.000000 | |
028 | |
02e B5: # B9 <- B4 Freq: 0.999004 | |
02e MOV [ESP + #16],EAX | |
032 MOV [ESP + #12],EBX | |
036 MOV EBX,FS:[0x00] | |
03d MOV ECX,[EBX + TLS::thread_ptr_offset()] | |
043 MOV [ESP + #20],ECX | |
047 MOV ECX,[ESP + #12] | |
04b MOV EBP,java/lang/String:exact * | |
050 MOV [ESP + #32],EBP | |
054 XOR EBP,EBP | |
056 JMP,s B9 | |
NOP # 8 bytes pad for loops and calls | |
060 B6: # B7 <- B26 top-of-loop Freq: 983.557 | |
060 MOV EBX,[ESP + #44] | |
064 MOV ECX,[EBX] # int | |
066 MOV EBX,EDX | |
068 MOV [EBX],ECX | |
06a MOV EBX,[ESP + #28] | |
06e LEA ECX,[EBX + #16] | |
071 ADD EDI,#-16 | |
074 SHR EDI,#3 | |
077 MOV [ESP + #0],ECX | |
07a MOV [ESP + #4],EAX | |
07e MOV [ESP + #8],EDI | |
082 CALL_LEAF_NOFP,runtime jlong_disjoint_arraycopy | |
No JVM State Info | |
# | |
087 | |
087 B7: # B28 B8 <- B27 B6 B40 B41 Freq: 984.544 | |
087 | |
087 MOV ECX,[ESP + #32] | |
08b MOV EBP,[ESP + #40] | |
08f MOV [ECX + #8],EBP ! Field java/lang/String.value | |
092 MOV EBP,[ESP + #48] | |
096 INC EBP | |
097 MOV EBX, ECX # CastP2X | |
099 SHR EBX,#9 | |
09c MOV8 [EBX + 0x051aff80],#0 | |
0a3 MEMBAR-release ! (empty encoding) | |
0a3 CMP EBP,[ESP + #16] | |
0a7 Jge B28 # Loop end P=0.000993 C=26164.000000 | |
0a7 | |
0ad B8: # B9 <- B7 Freq: 983.567 | |
0ad MOV EBX,[ESP + #12] | |
0b1 MOV ECX,[ESP + #48] | |
0b5 LEA ECX,[EBX + #4 + ECX << #2] | |
0b5 | |
0b9 B9: # B32 B10 <- B5 B8 Loop: B9-B8 inner stride: not constant Freq: 984.586 | |
0b9 MOV EBX,[ESP + #20] | |
0bd MOV EAX,[EBX + #68] | |
0c0 MOV EBX,[ECX + #12] | |
0c3 MOV [ESP + #24],EBX | |
0c7 LEA EBX,[EAX + #16] | |
0ca MOV ECX,[ESP + #20] | |
0ce CMPu EBX,[ECX + #76] | |
0d1 Jnb,u B32 P=0.000100 C=-1.000000 | |
0d1 | |
0d7 B10: # B11 <- B9 Freq: 984.487 | |
0d7 MOV [ECX + #68],EBX | |
0da PREFETCHNTA [EBX + #192] ! Prefetch into non-temporal cache for write | |
0e1 MOV ECX,precise klass java/lang/StringBuilder: 0x02123c10:Constant:exact * | |
0e6 MOV ECX,[ECX + #104] | |
0e9 MOV [EAX],ECX | |
0eb MOV [EAX + #4],precise klass java/lang/StringBuilder: 0x02123c10:Constant:exact * | |
0f2 XOR ECX.lo,ECX.lo | |
XOR ECX.hi,ECX.hi | |
0f6 MOV [EAX + #8],ECX.lo | |
MOV [EAX + #8]+4,ECX.hi | |
0f6 | |
0fc B11: # B30 B12 <- B33 B10 Freq: 984.586 | |
0fc | |
0fc #checkcastPP of EAX | |
0fc MOV [ESP + #28],EAX | |
100 MOV ECX,[ESP + #20] | |
104 MOV EAX,[ECX + #68] | |
107 LEA ECX,[EAX + #48] | |
10a MOV EDI,[ESP + #20] | |
10e CMPu ECX,[EDI + #76] | |
111 Jnb,u B30 P=0.000100 C=-1.000000 | |
111 | |
117 B12: # B13 <- B11 Freq: 984.487 | |
117 MOV [EDI + #68],ECX | |
11a PREFETCHNTA [ECX + #192] ! Prefetch into non-temporal cache for write | |
121 MOV [EAX],0x00000001 | |
127 PREFETCHNTA [ECX + #256] ! Prefetch into non-temporal cache for write | |
12e MOV [EAX + #4],precise klass [C: 0x0212de28:Constant:exact * | |
135 PREFETCHNTA [ECX + #320] ! Prefetch into non-temporal cache for write | |
13c MOV [EAX + #8],#16 | |
143 PREFETCHNTA [ECX + #384] ! Prefetch into non-temporal cache for write | |
14a MOV [EAX + #12],#0 | |
151 XOR ECX.lo,ECX.lo | |
XOR ECX.hi,ECX.hi | |
155 MOV [EAX + #16],ECX.lo | |
MOV [EAX + #16]+4,ECX.hi | |
15b MOV [EAX + #24],ECX.lo | |
MOV [EAX + #24]+4,ECX.hi | |
161 MOV [EAX + #32],ECX.lo | |
MOV [EAX + #32]+4,ECX.hi | |
167 MOV [EAX + #40],ECX.lo | |
MOV [EAX + #40]+4,ECX.hi | |
16d MOV [ESP + #48],EBP | |
16d | |
171 B13: # B52 B14 <- B31 B12 Freq: 984.586 | |
171 | |
171 #checkcastPP of EAX | |
171 MOV ECX,[ESP + #28] | |
175 MOV [ECX + #12],EAX ! Field java/lang/AbstractStringBuilder.value | |
178 MOV EBX, ECX # CastP2X | |
17a SHR EBX,#9 | |
17d MOV8 [EBX + 0x051aff80],#0 | |
184 MOV EDX,[ESP + #32] | |
188 NOP # 3 bytes pad for loops and calls | |
18b CALL,static java.lang.AbstractStringBuilder::append | |
# java.lang.StringBuilder::append @ bci:2 L[0]=esp + #28 L[1]=_ | |
# StringJoin::joinTest @ bci:31 L[0]=_ L[1]=_ L[2]=esp + #12 L[3]=esp + #16 L[4]=esp + #48 L[5]=esp + #24 | |
# OopMap{[12]=Oop [24]=Oop [28]=Oop off=400} | |
190 | |
190 B14: # B53 B15 <- B13 Freq: 984.566 | |
# Block is sole successor of call | |
190 MOV ECX,[ESP + #28] | |
194 MOV EDX,[ESP + #24] | |
198 NOP # 3 bytes pad for loops and calls | |
19b CALL,static java.lang.AbstractStringBuilder::append | |
# java.lang.StringBuilder::append @ bci:2 L[0]=esp + #28 L[1]=_ | |
# StringJoin::joinTest @ bci:36 L[0]=_ L[1]=_ L[2]=esp + #12 L[3]=esp + #16 L[4]=esp + #48 L[5]=_ | |
# OopMap{[12]=Oop [28]=Oop off=416} | |
1a0 | |
1a0 B15: # B34 B16 <- B14 Freq: 984.546 | |
# Block is sole successor of call | |
1a0 MOV ECX,[ESP + #20] | |
1a4 MOV EBP,[ECX + #68] | |
1a7 LEA EBX,[EBP + #24] | |
1aa CMPu EBX,[ECX + #76] | |
1ad Jnb,u B34 P=0.000100 C=-1.000000 | |
1ad | |
1b3 B16: # B17 <- B15 Freq: 984.448 | |
1b3 MOV [ECX + #68],EBX | |
1b6 PREFETCHNTA [EBX + #192] ! Prefetch into non-temporal cache for write | |
1bd MOV ECX,precise klass java/lang/String: 0x02122388:Constant:exact * | |
1c2 MOV EBX,[ECX + #104] | |
1c5 MOV [EBP],EBX | |
1c8 MOV [EBP + #4],precise klass java/lang/String: 0x02122388:Constant:exact * | |
1cf XOR ECX.lo,ECX.lo | |
XOR ECX.hi,ECX.hi | |
1d3 MOV [EBP + #8],ECX.lo | |
MOV [EBP + #8]+4,ECX.hi | |
1d9 MOV [EBP + #16],ECX.lo | |
MOV [EBP + #16]+4,ECX.hi | |
1d9 | |
1df B17: # B42 B18 <- B35 B16 Freq: 984.546 | |
1df | |
1df #checkcastPP of EBP | |
1df MOV [ESP + #32],EBP | |
1e3 MOV ECX,[ESP + #28] | |
1e7 MOV ECX,[ECX + #8] # int ! Field java/lang/AbstractStringBuilder.count | |
1ea MOV [ESP + #24],ECX | |
1ee TEST ECX,ECX | |
1f0 Jl B42 P=0.000000 C=23830.000000 | |
1f0 | |
1f6 B18: # B45 B19 <- B17 Freq: 984.546 | |
1f6 MOV ECX,[ESP + #28] | |
1fa MOV EBX,[ECX + #12] ! Field java/lang/AbstractStringBuilder.value | |
1fd MOV [ESP + #28],EBX | |
201 MOV EBP,[EBX + #8] | |
204 NullCheck EBX | |
204 | |
204 B19: # B43 B20 <- B18 Freq: 984.545 | |
204 MOV EBX,EBP | |
206 SUB EBX,[ESP + #24] | |
20a TEST EBX,EBX | |
20c Jl B43 P=0.000000 C=23830.000000 | |
20c | |
212 B20: # B36 B21 <- B19 Freq: 984.544 | |
212 MOV EBX,[ESP + #32] | |
216 MOV ECX,[ESP + #24] | |
21a MOV [EBX + #16],ECX ! Field java/lang/String.count | |
21d MOV EBX,ECX | |
21f SHL EBX,#1 | |
221 ADD EBX,#19 | |
224 MOV [ESP + #36],EBX | |
228 MOV EDI,EBX | |
22a AND EDI,#-8 | |
22d CMPu ECX,#524288 | |
233 Jnbe,u B36 P=0.000001 C=-1.000000 | |
233 | |
239 B21: # B36 B22 <- B20 Freq: 984.543 | |
239 MOV EBX,[ESP + #20] | |
23d MOV ECX,[EBX + #68] | |
240 MOV EBX,ECX | |
242 ADD EBX,EDI | |
244 MOV EDX,[ESP + #20] | |
248 CMPu EBX,[EDX + #76] | |
24b Jnb,u B36 P=0.000100 C=-1.000000 | |
24b | |
251 B22: # B23 <- B21 Freq: 984.445 | |
251 MOV [EDX + #68],EBX | |
254 PREFETCHNTA [EBX + #192] ! Prefetch into non-temporal cache for write | |
25b MOV [ECX],0x00000001 | |
261 PREFETCHNTA [EBX + #256] ! Prefetch into non-temporal cache for write | |
268 MOV [ECX + #4],precise klass [C: 0x0212de28:Constant:exact * | |
26f MOV EDX,[ESP + #24] | |
273 MOV [ECX + #8],EDX | |
276 PREFETCHNTA [EBX + #320] ! Prefetch into non-temporal cache for write | |
27d PREFETCHNTA [EBX + #384] ! Prefetch into non-temporal cache for write | |
27d | |
284 B23: # B39 B24 <- B37 B22 Freq: 984.544 | |
284 | |
284 #checkcastPP of ECX | |
284 MOV [ESP + #40],ECX | |
288 CMP EBP,[ESP + #24] | |
28c MOV EBX,[ESP + #24] | |
290 CMOVl EBX,EBP | |
293 MOV ESI,EBX | |
295 LEA EBX,[ECX + #16] | |
298 MOV EAX,EBX | |
29a LEA EBX,[ECX + #12] | |
29d MOV EDX,EBX | |
29f MOV ECX,[ESP + #36] | |
2a3 SHR ECX,#3 | |
2a6 MOV [ESP + #36],ECX | |
2aa ADD ECX,#-2 | |
2ad CMPu EBP,ESI | |
2af Jb,u B39 P=0.000001 C=-1.000000 | |
2af | |
2b5 B24: # B39 B25 <- B23 Freq: 984.543 | |
2b5 MOV EBX,[ESP + #24] | |
2b9 CMPu EBX,ESI | |
2bb Jb,u B39 P=0.000001 C=-1.000000 | |
2bb | |
2c1 B25: # B41 B26 <- B24 Freq: 984.542 | |
2c1 MOV EBX,ESI | |
2c3 TEST EBX,EBX | |
2c5 Jle B41 P=0.000001 C=-1.000000 | |
2c5 | |
2cb B26: # B6 B27 <- B25 Freq: 984.541 | |
2cb MOV EBX,[ESP + #28] | |
2cf LEA EBX,[EBX + #12] | |
2d2 MOV [ESP + #44],EBX | |
2d6 MOV EBX,ESI | |
2d8 CMP EBX,[ESP + #24] | |
2dc Jge B6 P=0.999000 C=-1.000000 | |
2dc | |
2e2 B27: # B7 <- B26 Freq: 0.984541 | |
2e2 SHL EBX,#1 | |
2e4 ADD EBX,#16 | |
2e7 MOV ECX,EBX | |
2e9 SHR ECX,#3 | |
2ec MOV EBP,[ESP + #36] | |
2f0 SUB EBP,ECX | |
2f2 AND EBX,#-7 | |
2f5 MOV EDI,[ESP + #40] | |
2f9 ADD EDI,EBX | |
2fb MOV [EDI + #-4],#0 | |
302 MOV ECX,EBP | |
304 SHL ECX,1 # Convert doublewords to words | |
XOR EAX,EAX | |
REP STOS # store EAX into [EDI++] while ECX-- | |
30a MOV EBX,[ESP + #44] | |
30e MOV [ESP + #0],EBX | |
311 MOV [ESP + #4],EDX | |
315 MOV [ESP + #8],ESI | |
319 CALL_LEAF_NOFP,runtime arrayof_jshort_disjoint_arraycopy | |
No JVM State Info | |
# | |
31e JMP B7 | |
31e | |
323 B28: # B29 <- B7 Freq: 0.977372 | |
323 MOV EAX,ECX | |
323 | |
325 B29: # N1 <- B28 B38 Freq: 0.978365 | |
325 ADD ESP,72 # Destroy frame | |
POPL EBP | |
TEST PollPage,EAX ! Poll Safepoint | |
32f RET | |
32f | |
330 B30: # B50 B31 <- B11 Freq: 0.0984749 | |
330 MOV [ESP + #48],EBP | |
334 MOV ECX,precise klass [C: 0x0212de28:Constant:exact * | |
339 MOV EDX,#16 | |
33e NOP # 1 bytes pad for loops and calls | |
33f CALL,static wrapper for: _new_array_Java | |
# java.lang.AbstractStringBuilder::<init> @ bci:6 L[0]=_ L[1]=_ STK[0]=esp + #28 | |
# java.lang.StringBuilder::<init> @ bci:3 L[0]=_ | |
# StringJoin::joinTest @ bci:27 L[0]=_ L[1]=esp + #32 L[2]=esp + #12 L[3]=esp + #16 L[4]=EBP L[5]=esp + #24 STK[0]=esp + #28 | |
# OopMap{[12]=Oop [24]=Oop [28]=Oop [32]=Oop off=836} | |
344 | |
344 B31: # B13 <- B30 Freq: 0.0984729 | |
# Block is sole successor of call | |
344 JMP B13 | |
344 | |
349 B32: # B49 B33 <- B9 Freq: 0.0984749 | |
349 MOV ECX,precise klass java/lang/StringBuilder: 0x02123c10:Constant:exact * | |
34e NOP # 1 bytes pad for loops and calls | |
34f CALL,static wrapper for: _new_instance_Java | |
# StringJoin::joinTest @ bci:23 L[0]=_ L[1]=esp + #32 L[2]=esp + #12 L[3]=esp + #16 L[4]=EBP L[5]=esp + #24 | |
# OopMap{[12]=Oop [24]=Oop [32]=Oop off=852} | |
354 | |
354 B33: # B11 <- B32 Freq: 0.0984729 | |
# Block is sole successor of call | |
354 JMP B11 | |
354 | |
359 B34: # B48 B35 <- B15 Freq: 0.0984709 | |
359 MOV ECX,precise klass java/lang/String: 0x02122388:Constant:exact * | |
35e NOP # 1 bytes pad for loops and calls | |
35f CALL,static wrapper for: _new_instance_Java | |
# java.lang.StringBuilder::toString @ bci:0 L[0]=esp + #28 | |
# StringJoin::joinTest @ bci:39 L[0]=_ L[1]=_ L[2]=esp + #12 L[3]=esp + #16 L[4]=esp + #48 L[5]=_ | |
# OopMap{[12]=Oop [28]=Oop off=868} | |
364 | |
364 B35: # B17 <- B34 Freq: 0.098469 | |
# Block is sole successor of call | |
364 MOV EBP,EAX | |
366 JMP B17 | |
366 | |
36b B36: # B51 B37 <- B20 B21 Freq: 0.0994683 | |
36b MOV [ESP + #40],EDI | |
36f MOV ECX,precise klass [C: 0x0212de28:Constant:exact * | |
374 MOV EDX,[ESP + #24] | |
378 NOP # 3 bytes pad for loops and calls | |
37b CALL,static wrapper for: _new_array_Java | |
# java.util.Arrays::copyOfRange @ bci:40 L[0]=esp + #28 L[1]=#0 L[2]=_ L[3]=esp + #24 L[4]=_ | |
# java.lang.String::<init> @ bci:65 L[0]=_ L[1]=_ L[2]=_ L[3]=_ STK[0]=esp + #32 | |
# java.lang.StringBuilder::toString @ bci:13 L[0]=_ STK[0]=esp + #32 | |
# StringJoin::joinTest @ bci:39 L[0]=_ L[1]=_ L[2]=esp + #12 L[3]=esp + #16 L[4]=esp + #48 L[5]=_ | |
# OopMap{[12]=Oop [28]=Oop [32]=Oop off=896} | |
380 | |
380 B37: # B23 <- B36 Freq: 0.0994663 | |
# Block is sole successor of call | |
380 MOV ECX,EAX | |
382 MOV EDI,[ESP + #40] | |
386 JMP B23 | |
386 | |
38b B38: # B29 <- B2 Freq: 0.000992706 | |
38b MOV EAX,java/lang/String:exact * | |
390 JMP,s B29 | |
390 | |
392 B39: # B47 B40 <- B23 B24 Freq: 0.00196909 | |
392 MOV EBX,EDX | |
394 MOV [EBX],#0 | |
39a MOV EDI,EAX | |
39c SHL ECX,1 # Convert doublewords to words | |
XOR EAX,EAX | |
REP STOS # store EAX into [EDI++] while ECX-- | |
3a2 MOV ECX,[ESP + #28] | |
3a6 XOR EDX,EDX | |
3a8 MOV EBP,[ESP + #40] | |
3ac MOV [ESP + #0],EBP | |
3af XOR EBP,EBP | |
3b1 MOV [ESP + #4],EBP | |
3b5 MOV [ESP + #8],ESI | |
3b9 NOP # 2 bytes pad for loops and calls | |
3bb CALL,static wrapper for: slow_arraycopy | |
# java.util.Arrays::copyOfRange @ bci:57 L[0]=_ L[1]=_ L[2]=_ L[3]=_ L[4]=esp + #40 | |
# java.lang.String::<init> @ bci:65 L[0]=_ L[1]=_ L[2]=_ L[3]=_ STK[0]=esp + #32 | |
# java.lang.StringBuilder::toString @ bci:13 L[0]=_ STK[0]=esp + #32 | |
# StringJoin::joinTest @ bci:39 L[0]=_ L[1]=_ L[2]=esp + #12 L[3]=esp + #16 L[4]=esp + #48 L[5]=_ | |
# OopMap{[12]=Oop [32]=Oop [40]=Oop off=960} | |
3c0 | |
3c0 B40: # B7 <- B39 Freq: 0.00196905 | |
# Block is sole successor of call | |
3c0 JMP B7 | |
3c0 | |
3c5 B41: # B7 <- B25 Freq: 0.000984542 | |
3c5 MOV [EDX],#0 | |
3cb MOV EDI,EAX | |
3cd SHL ECX,1 # Convert doublewords to words | |
XOR EAX,EAX | |
REP STOS # store EAX into [EDI++] while ECX-- | |
3d3 | |
3d3 JMP B7 | |
3d3 | |
3d8 B42: # N1 <- B17 Freq: 0.000469468 | |
3d8 MOV ECX,#7 | |
3dd MOV EBP,[ESP + #12] | |
3e1 MOV EBX,[ESP + #16] | |
3e5 MOV [ESP + #12],EBX | |
3e9 NOP # 2 bytes pad for loops and calls | |
3eb CALL,static wrapper for: uncommon_trap(reason='unloaded' action='reinterpret' index='7') | |
# java.lang.String::<init> @ bci:21 L[0]=_ L[1]=_ L[2]=_ L[3]=esp + #24 | |
# java.lang.StringBuilder::toString @ bci:13 L[0]=_ STK[0]=esp + #32 | |
# StringJoin::joinTest @ bci:39 L[0]=_ L[1]=_ L[2]=EBP L[3]=esp + #12 L[4]=esp + #48 L[5]=_ | |
# OopMap{ebp=Oop [32]=Oop off=1008} | |
3f0 INT3 ; ShouldNotReachHere | |
3f0 | |
3f1 B43: # N1 <- B19 Freq: 0.000469467 | |
3f1 MOV ECX,#7 | |
3f6 MOV EBP,[ESP + #12] | |
3fa MOV EBX,[ESP + #16] | |
3fe MOV [ESP + #12],EBX | |
402 NOP # 1 bytes pad for loops and calls | |
403 CALL,static wrapper for: uncommon_trap(reason='unloaded' action='reinterpret' index='7') | |
# java.lang.String::<init> @ bci:38 L[0]=_ L[1]=_ L[2]=#0 L[3]=esp + #24 | |
# java.lang.StringBuilder::toString @ bci:13 L[0]=_ STK[0]=esp + #32 | |
# StringJoin::joinTest @ bci:39 L[0]=_ L[1]=_ L[2]=EBP L[3]=esp + #12 L[4]=esp + #48 L[5]=_ | |
# OopMap{ebp=Oop [32]=Oop off=1032} | |
408 INT3 ; ShouldNotReachHere | |
408 | |
409 B44: # N1 <- B4 B3 Freq: 2.01128e-006 | |
409 MOV ECX,#-122 | |
40e MOV EBP,EBX | |
410 MOV [ESP + #12],EAX | |
414 NOP # 3 bytes pad for loops and calls | |
417 CALL,static wrapper for: uncommon_trap(reason='predicate' action='maybe_recompile') | |
# StringJoin::joinTest @ bci:17 L[0]=_ L[1]=#Ptr0x0631a668 L[2]=EBP L[3]=esp + #12 L[4]=#0 L[5]=_ | |
# OopMap{ebp=Oop off=1052} | |
41c INT3 ; ShouldNotReachHere | |
41c | |
41d B45: # N1 <- B18 Freq: 0.000997619 | |
41d MOV ECX,#-10 | |
422 NOP # 1 bytes pad for loops and calls | |
423 CALL,static wrapper for: uncommon_trap(reason='null_check' action='maybe_recompile') | |
# java.lang.String::<init> @ bci:32 L[0]=_ L[1]=_ L[2]=_ L[3]=_ STK[0]=_ STK[1]=#NULL | |
# java.lang.StringBuilder::toString @ bci:13 L[0]=_ STK[0]=_ | |
# StringJoin::joinTest @ bci:39 L[0]=_ L[1]=_ L[2]=_ L[3]=_ L[4]=_ L[5]=_ | |
# OopMap{off=1064} | |
428 INT3 ; ShouldNotReachHere | |
428 | |
429 B46: # N1 <- B1 Freq: 1.01328e-006 | |
429 MOV ECX,#-10 | |
42e NOP # 1 bytes pad for loops and calls | |
42f CALL,static wrapper for: uncommon_trap(reason='null_check' action='maybe_recompile') | |
# StringJoin::joinTest @ bci:6 L[0]=_ L[1]=_ L[2]=_ L[3]=_ L[4]=_ L[5]=_ STK[0]=#NULL | |
# OopMap{off=1076} | |
434 INT3 ; ShouldNotReachHere | |
434 | |
435 B47: # B54 <- B39 Freq: 1.96909e-008 | |
435 # exception oop is in EAX; no code emitted | |
435 MOV ECX,EAX | |
437 JMP,s B54 | |
437 | |
439 B48: # B54 <- B34 Freq: 9.8471e-007 | |
439 # exception oop is in EAX; no code emitted | |
439 MOV ECX,EAX | |
43b JMP,s B54 | |
43b | |
43d B49: # B54 <- B32 Freq: 9.84749e-007 | |
43d # exception oop is in EAX; no code emitted | |
43d MOV ECX,EAX | |
43f JMP,s B54 | |
43f | |
441 B50: # B54 <- B30 Freq: 9.84749e-007 | |
441 # exception oop is in EAX; no code emitted | |
441 MOV ECX,EAX | |
443 JMP,s B54 | |
443 | |
445 B51: # B54 <- B36 Freq: 9.94683e-007 | |
445 # exception oop is in EAX; no code emitted | |
445 MOV ECX,EAX | |
447 JMP,s B54 | |
447 | |
449 B52: # B54 <- B13 Freq: 0.00984585 | |
449 # exception oop is in EAX; no code emitted | |
449 MOV ECX,EAX | |
44b JMP,s B54 | |
44b | |
44d B53: # B54 <- B14 Freq: 0.00984566 | |
44d # exception oop is in EAX; no code emitted | |
44d MOV ECX,EAX | |
44d | |
44f B54: # N1 <- B52 B53 B47 B49 B50 B48 B51 Freq: 0.0196955 | |
44f ADD ESP,72 # Destroy frame | |
POPL EBP | |
453 JMP rethrow_stub | |
453 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class StringJoin{ | |
public static void main(String... args){ | |
String[] list = new String[1000]; | |
for(int i = 0; i < list.length; i++){ | |
list[i] = String.valueOf(i); | |
} | |
for(int i = 0; i < 10000; i++){ | |
System.err.println(joinTest(list)); | |
} | |
} | |
private static String joinTest(String... list){ | |
String str = ""; | |
for (String s : list) { | |
str += s; | |
} | |
return str; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Compiled from "StringJoin.java" | |
public class StringJoin extends java.lang.Object | |
SourceFile: "StringJoin.java" | |
minor version: 0 | |
major version: 50 | |
Constant pool: | |
const #1 = Method #13.#27; // java/lang/Object."<init>":()V | |
const #2 = class #28; // java/lang/String | |
const #3 = Method #2.#29; // java/lang/String.valueOf:(I)Ljava/lang/String; | |
const #4 = Field #30.#31; // java/lang/System.err:Ljava/io/PrintStream; | |
const #5 = Method #12.#32; // StringJoin.joinTest:([Ljava/lang/String;)Ljava/lang/String; | |
const #6 = Method #33.#34; // java/io/PrintStream.println:(Ljava/lang/String;)V | |
const #7 = String #35; // | |
const #8 = class #36; // java/lang/StringBuilder | |
const #9 = Method #8.#27; // java/lang/StringBuilder."<init>":()V | |
const #10 = Method #8.#37; // java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; | |
const #11 = Method #8.#38; // java/lang/StringBuilder.toString:()Ljava/lang/String; | |
const #12 = class #39; // StringJoin | |
const #13 = class #40; // java/lang/Object | |
const #14 = Asciz <init>; | |
const #15 = Asciz ()V; | |
const #16 = Asciz Code; | |
const #17 = Asciz LineNumberTable; | |
const #18 = Asciz main; | |
const #19 = Asciz ([Ljava/lang/String;)V; | |
const #20 = Asciz StackMapTable; | |
const #21 = class #41; // "[Ljava/lang/String;" | |
const #22 = Asciz joinTest; | |
const #23 = Asciz ([Ljava/lang/String;)Ljava/lang/String;; | |
const #24 = class #28; // java/lang/String | |
const #25 = Asciz SourceFile; | |
const #26 = Asciz StringJoin.java; | |
const #27 = NameAndType #14:#15;// "<init>":()V | |
const #28 = Asciz java/lang/String; | |
const #29 = NameAndType #42:#43;// valueOf:(I)Ljava/lang/String; | |
const #30 = class #44; // java/lang/System | |
const #31 = NameAndType #45:#46;// err:Ljava/io/PrintStream; | |
const #32 = NameAndType #22:#23;// joinTest:([Ljava/lang/String;)Ljava/lang/String; | |
const #33 = class #47; // java/io/PrintStream | |
const #34 = NameAndType #48:#49;// println:(Ljava/lang/String;)V | |
const #35 = Asciz ; | |
const #36 = Asciz java/lang/StringBuilder; | |
const #37 = NameAndType #50:#51;// append:(Ljava/lang/String;)Ljava/lang/StringBuilder; | |
const #38 = NameAndType #52:#53;// toString:()Ljava/lang/String; | |
const #39 = Asciz StringJoin; | |
const #40 = Asciz java/lang/Object; | |
const #41 = Asciz [Ljava/lang/String;; | |
const #42 = Asciz valueOf; | |
const #43 = Asciz (I)Ljava/lang/String;; | |
const #44 = Asciz java/lang/System; | |
const #45 = Asciz err; | |
const #46 = Asciz Ljava/io/PrintStream;; | |
const #47 = Asciz java/io/PrintStream; | |
const #48 = Asciz println; | |
const #49 = Asciz (Ljava/lang/String;)V; | |
const #50 = Asciz append; | |
const #51 = Asciz (Ljava/lang/String;)Ljava/lang/StringBuilder;; | |
const #52 = Asciz toString; | |
const #53 = Asciz ()Ljava/lang/String;; | |
{ | |
public StringJoin(); | |
Code: | |
Stack=1, Locals=1, Args_size=1 | |
0: aload_0 | |
1: invokespecial #1; //Method java/lang/Object."<init>":()V | |
4: return | |
LineNumberTable: | |
line 2: 0 | |
public static void main(java.lang.String[]); | |
Code: | |
Stack=3, Locals=3, Args_size=1 | |
0: sipush 1000 | |
3: anewarray #2; //class java/lang/String | |
6: astore_1 | |
7: iconst_0 | |
8: istore_2 | |
9: iload_2 | |
10: aload_1 | |
11: arraylength | |
12: if_icmpge 28 | |
15: aload_1 | |
16: iload_2 | |
17: iload_2 | |
18: invokestatic #3; //Method java/lang/String.valueOf:(I)Ljava/lang/String; | |
21: aastore | |
22: iinc 2, 1 | |
25: goto 9 | |
28: iconst_0 | |
29: istore_2 | |
30: iload_2 | |
31: sipush 10000 | |
34: if_icmpge 53 | |
37: getstatic #4; //Field java/lang/System.err:Ljava/io/PrintStream; | |
40: aload_1 | |
41: invokestatic #5; //Method joinTest:([Ljava/lang/String;)Ljava/lang/String; | |
44: invokevirtual #6; //Method java/io/PrintStream.println:(Ljava/lang/String;)V | |
47: iinc 2, 1 | |
50: goto 30 | |
53: return | |
LineNumberTable: | |
line 4: 0 | |
line 5: 7 | |
line 6: 15 | |
line 5: 22 | |
line 9: 28 | |
line 10: 37 | |
line 9: 47 | |
line 12: 53 | |
StackMapTable: number_of_entries = 4 | |
frame_type = 253 /* append */ | |
offset_delta = 9 | |
locals = [ class "[Ljava/lang/String;", int ] | |
frame_type = 250 /* chop */ | |
offset_delta = 18 | |
frame_type = 252 /* append */ | |
offset_delta = 1 | |
locals = [ int ] | |
frame_type = 250 /* chop */ | |
offset_delta = 22 | |
private static java.lang.String joinTest(java.lang.String[]); | |
Code: | |
Stack=2, Locals=6, Args_size=1 | |
0: ldc #7; //String | |
2: astore_1 | |
3: aload_0 | |
4: astore_2 | |
5: aload_2 | |
6: arraylength | |
7: istore_3 | |
8: iconst_0 | |
9: istore 4 | |
11: iload 4 | |
13: iload_3 | |
14: if_icmpge 49 | |
17: aload_2 | |
18: iload 4 | |
20: aaload | |
21: astore 5 | |
23: new #8; //class java/lang/StringBuilder | |
26: dup | |
27: invokespecial #9; //Method java/lang/StringBuilder."<init>":()V | |
30: aload_1 | |
31: invokevirtual #10; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; | |
34: aload 5 | |
36: invokevirtual #10; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; | |
39: invokevirtual #11; //Method java/lang/StringBuilder.toString:()Ljava/lang/String; | |
42: astore_1 | |
43: iinc 4, 1 | |
46: goto 11 | |
49: aload_1 | |
50: areturn | |
LineNumberTable: | |
line 15: 0 | |
line 16: 3 | |
line 17: 23 | |
line 16: 43 | |
line 19: 49 | |
StackMapTable: number_of_entries = 2 | |
frame_type = 255 /* full_frame */ | |
offset_delta = 11 | |
locals = [ class "[Ljava/lang/String;", class java/lang/String, class "[Ljava/lang/String;", int, int ] | |
stack = [] | |
frame_type = 248 /* chop */ | |
offset_delta = 37 | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment