рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЬрд╛рд╡рд╛ рдХреЛрдб рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдПрдХ рд▓реЗрдЦ рдкрдврд╝рд╛ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдВрдпреЛрдЬрдиред рдЗрд╕рдореЗрдВ рд╕рд╡рд╛рд▓ рдпрд╣ рд░рд╣рд╛ рдХрд┐ рдХрдЯ рдХреЗ рддрд╣рдд рдХреЛрдб рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧрдмрд░реНрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рд░рд▓ рдЬреЛрдбрд╝ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХреНрдпреЛрдВ рдЪрд▓рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди + = StringBuilder.append () рдХреЙрд▓ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред
рдореИрдВ рддреБрд░рдВрдд рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд░рдЦрддрд╛ рдерд╛ред
рдлрд┐рд░ рдореЗрд░реЗ рд╕рд╛рд░реЗ рддрд░реНрдХ рдЗрд╕ рддрдереНрдп рдкрд░ рдЙрддрд░ рдЖрдП рдХрд┐ рдЬреЗрд╡реАрдПрдо рдХреЗ рдЕрдВрджрд░ рдпрд╣ рдЕрдХрдердиреАрдп рдЬрд╛рджреВ рд╣реИ, рдФрд░ рдореИрдВрдиреЗ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЧрддрд┐ рдореЗрдВ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рдмреАрдЪ рдорддрднреЗрджреЛрдВ рдХреА рдЕрдЧрд▓реА рдЪрд░реНрдЪрд╛ рдХреЗ рджреМрд░рд╛рди, рдореЗрд░реЗ рджреЛрд╕реНрдд
yegorf1 рдиреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдЬрд╛рджреВ рдХреНрдпреЛрдВ рдФрд░ рдХреИрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред
рдУрд░реЗрдХрд▓ рдЬрд╛рд╡рд╛ рдПрд╕рдИ
рдЕрджреНрдпрддрди: рдкрд░реАрдХреНрд╖рдг 8 рдЬрд╛рд╡рд╛ рдкрд░ рдХрд┐рдП рдЧрдП рдереЗрд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рдмрд╛рдЗрдЯрдХреЛрдб рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреЗрдЦреЗрдВред рддреЛ рд╣рдордиреЗ рдХрд┐рдпрд╛ред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ
рдореЗрдВ рд╕реБрдЭрд╛рд╡ рджрд┐рдП
рдЧрдП рдереЗ рдХрд┐ рддреНрд╡рд░рдг рдЕрдиреБрдХреВрд▓рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ - рд▓рдЧрд╛рддрд╛рд░ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рди рд╕реНрддрд░ рдкрд░ рдПрдХ рд╕рд╛рде рдЪрд┐рдкрдХрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдБ javap рдХреЗ рд╕рд╛рде рд╡рд┐рдШрдЯрд┐рдд bytecode рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ:
public java.lang.String stringAppend(); Code: 0: ldc #2
рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдИ рдЕрдиреБрдХреВрд▓рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдЬреАрдм рд╣реИ, рд╣реИ рдирд╛? рдареАрдХ рд╣реИ, рдЪрд▓реЛ рджреВрд╕рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдмрд╛рдпрдЯреЗрдХреЛрдб рджреЗрдЦреЗрдВред
public java.lang.String stringAppendBuilder(); Code: 0: new #3
рдпрд╣рд╛рдБ рдлрд┐рд░ рд╕реЗ, рдХреЛрдИ рдЕрдиреБрдХреВрд▓рди? рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдЗрдП 8, 14 рдФрд░ 15 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдПрдХ рдЕрдЬреАрдм рдмрд╛рдд рд╡рд╣рд╛рдВ рд╣реЛрддреА рд╣реИ - рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реНрдЯреНрд░рд┐рдВрдЧрдмреБрд▓рд╕реНрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рд╕рдВрджрд░реНрдн рд╕реНрдЯреИрдХ рдкрд░ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдЗрд╕реЗ рд╕реНрдЯреИрдХ рд╕реЗ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдорди рдореЗрдВ рдЖрддрд╛ рд╣реИ:
public java.lang.String stringAppendBuilder(); Code: 0: new #41
рдЕрдирд╛рд╡рд╢реНрдпрдХ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдлреЗрдВрдХрдиреЗ рдкрд░, рд╣рдореЗрдВ рдПрдХ рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧрдПрдкреЗрдВрдб рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 1.5 рдЧреБрдирд╛ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдЕрдиреБрдХреВрд▓рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, "рдЬрд╛рджреВ" рдХрд╛ рджреЛрд╖ рдЕрдзреВрд░рд╛ рдмрд╛рдпреЛрдЯреЗрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рд╣реИ, рдЬреЛ рдХрд╛рдлреА рд╕рд░рд▓ рдЕрдиреБрдХреВрд▓рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
Android ART
рдЕрдкрдбреЗрдЯ: рдХреЛрдб рдХреЛ рдмрд┐рд▓реНрдб рдмрд┐рд▓реНрдбреВрд▓ рдХреЗ рд╕рд╛рде sdk 28 рдХреЗ рддрд╣рдд рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛рддреЛ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рд╕реНрдЯреИрдХ JVM рдХреЗ рд▓рд┐рдП рдмрд╛рдИрдЯреЗрдХреЛрдб рдореЗрдВ рдЬрд╛рд╡рд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдпрд╣рд╛рдВ рд╣рдордиреЗ
ART рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛
, рдЬреЛ Android Open Source Project рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ ред рдпрд╣ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди, рдпрд╛ рдмрд▓реНрдХрд┐, рдореВрд▓ рдХреЛрдб рдореЗрдВ рдмрд╛рдИрдЯреЗрдХреЛрдб рд╕рдВрдХрд▓рдХ, рдУрд░реЗрдХрд▓ рдХреЗ рдПрдХ
рдореБрдХрджрдореЗ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рд╣рдореЗрдВ рдпрд╣ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд░ рдХрд╛рд░рдг рджреЗрддрд╛ рд╣реИ рдХрд┐ рдУрд░реЗрдХрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдЕрдВрддрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдЖрд░рдПрдо рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░рдг, рдпрд╣ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдПрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реИ, рд╕реНрдЯреИрдХ рдирд╣реАрдВред
рдЖрдЗрдП рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рд╕реНрдорд╛рд▓реА (рдПрдЖрд░рдЯреА рдХреЗ рддрд╣рдд рдмрд╛рдЗрдЯрдХреЛрдб рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рд╕реЗ рдПрдХ):
# virtual methods .method public stringAppend()Ljava/lang/String; .registers 4 .prologue .line 6 const-string/jumbo v0, "foo" .line 7 .local v0, "s":Ljava/lang/String; new-instance v1, Ljava/lang/StringBuilder; invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V invoke-virtual {v1, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v1 const-string/jumbo v2, ", bar" invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v1
рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ stringAppendBuilder рдореЗрдВ рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рд╕рдорд╕реНрдпрд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВ - рдорд╢реАрди рдПрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реИ, рдФрд░ рд╡реЗ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдЬрд╛рджреБрдИ рдЪреАрдЬреЛрдВ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:
move-result-object v1
StringAppend рдореЗрдВ рдпрд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - StringBuilder рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА v1 рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд╣реИред рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ рдХрд┐ stringAppend рдЕрдзрд┐рдХ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдпрд╣ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреБрд╖реНрдЯрд┐ рдХреА рдЬрд╛рддреА рд╣реИ - рдкрд░рд┐рдгрд╛рдо рд╕реНрдЯреИрдХ рдЬреЗрд╡реАрдПрдо рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ "рдкреИрдЪ" рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рдорд╛рди рд╣реИ: рд╕реНрдЯреНрд░рд┐рдВрдЧрдмрд░реНрдмреНрд▓реА рд▓рдЧрднрдЧ рдбреЗрдврд╝ рдЧреБрдирд╛ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред