рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдВрдпреЛрдЬрди, рдпрд╛ рдкреИрдЪ рдмрд╛рдпрдЯреЗрдХреЛрдб

рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЬрд╛рд╡рд╛ рдХреЛрдб рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рдкрдврд╝рд╛ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдВрдпреЛрдЬрдиред рдЗрд╕рдореЗрдВ рд╕рд╡рд╛рд▓ рдпрд╣ рд░рд╣рд╛ рдХрд┐ рдХрдЯ рдХреЗ рддрд╣рдд рдХреЛрдб рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧрдмрд░реНрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рд░рд▓ рдЬреЛрдбрд╝ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХреНрдпреЛрдВ рдЪрд▓рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди + = StringBuilder.append () рдХреЙрд▓ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВ рддреБрд░рдВрдд рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд░рдЦрддрд╛ рдерд╛ред

// ~20 000 000    public String stringAppend() { String s = "foo"; s += ", bar"; s += ", baz"; s += ", qux"; s += ", bar"; s += ", bar"; s += ", bar"; s += ", bar"; s += ", bar"; s += ", bar"; s += ", baz"; s += ", qux"; s += ", baz"; s += ", qux"; s += ", baz"; s += ", qux"; s += ", baz"; s += ", qux"; s += ", baz"; s += ", qux"; s += ", baz"; s += ", qux"; return s; } // ~7 000 000    public String stringAppendBuilder() { StringBuilder sb = new StringBuilder(); sb.append("foo"); sb.append(", bar"); sb.append(", bar"); sb.append(", baz"); sb.append(", qux"); sb.append(", baz"); sb.append(", qux"); sb.append(", baz"); sb.append(", qux"); sb.append(", baz"); sb.append(", qux"); sb.append(", baz"); sb.append(", qux"); sb.append(", baz"); sb.append(", qux"); sb.append(", baz"); sb.append(", qux"); sb.append(", baz"); sb.append(", qux"); sb.append(", baz"); sb.append(", qux"); sb.append(", baz"); sb.append(", qux"); return sb.toString(); } 

рдлрд┐рд░ рдореЗрд░реЗ рд╕рд╛рд░реЗ рддрд░реНрдХ рдЗрд╕ рддрдереНрдп рдкрд░ рдЙрддрд░ рдЖрдП рдХрд┐ рдЬреЗрд╡реАрдПрдо рдХреЗ рдЕрдВрджрд░ рдпрд╣ рдЕрдХрдердиреАрдп рдЬрд╛рджреВ рд╣реИ, рдФрд░ рдореИрдВрдиреЗ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЧрддрд┐ рдореЗрдВ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рдмреАрдЪ рдорддрднреЗрджреЛрдВ рдХреА рдЕрдЧрд▓реА рдЪрд░реНрдЪрд╛ рдХреЗ рджреМрд░рд╛рди, рдореЗрд░реЗ рджреЛрд╕реНрдд yegorf1 рдиреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдЬрд╛рджреВ рдХреНрдпреЛрдВ рдФрд░ рдХреИрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред

рдУрд░реЗрдХрд▓ рдЬрд╛рд╡рд╛ рдПрд╕рдИ


рдЕрджреНрдпрддрди: рдкрд░реАрдХреНрд╖рдг 8 рдЬрд╛рд╡рд╛ рдкрд░ рдХрд┐рдП рдЧрдП рдереЗ
рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рдмрд╛рдЗрдЯрдХреЛрдб рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреЗрдЦреЗрдВред рддреЛ рд╣рдордиреЗ рдХрд┐рдпрд╛ред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реБрдЭрд╛рд╡ рджрд┐рдП рдЧрдП рдереЗ рдХрд┐ рддреНрд╡рд░рдг рдЕрдиреБрдХреВрд▓рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ - рд▓рдЧрд╛рддрд╛рд░ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рди рд╕реНрддрд░ рдкрд░ рдПрдХ рд╕рд╛рде рдЪрд┐рдкрдХрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдБ javap рдХреЗ рд╕рд╛рде рд╡рд┐рдШрдЯрд┐рдд bytecode рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ:

  public java.lang.String stringAppend(); Code: 0: ldc #2 // String foo 2: astore_1 3: new #3 // class java/lang/StringBuilder 6: dup 7: invokespecial #4 // Method java/lang/StringBuilder."<init>":()V 10: aload_1 11: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 14: ldc #6 // String , bar 16: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 

рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдИ рдЕрдиреБрдХреВрд▓рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдЬреАрдм рд╣реИ, рд╣реИ рдирд╛? рдареАрдХ рд╣реИ, рдЪрд▓реЛ рджреВрд╕рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдмрд╛рдпрдЯреЗрдХреЛрдб рджреЗрдЦреЗрдВред

  public java.lang.String stringAppendBuilder(); Code: 0: new #3 // class java/lang/StringBuilder 3: dup 4: invokespecial #4 // Method java/lang/StringBuilder."<init>":()V 7: astore_1 8: aload_1 9: ldc #2 // String foo 11: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 14: pop 15: aload_1 16: ldc #6 // String , bar 18: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 

рдпрд╣рд╛рдБ рдлрд┐рд░ рд╕реЗ, рдХреЛрдИ рдЕрдиреБрдХреВрд▓рди? рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдЗрдП 8, 14 рдФрд░ 15 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдПрдХ рдЕрдЬреАрдм рдмрд╛рдд рд╡рд╣рд╛рдВ рд╣реЛрддреА рд╣реИ - рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реНрдЯреНрд░рд┐рдВрдЧрдмреБрд▓рд╕реНрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рд╕рдВрджрд░реНрдн рд╕реНрдЯреИрдХ рдкрд░ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдЗрд╕реЗ рд╕реНрдЯреИрдХ рд╕реЗ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдорди рдореЗрдВ рдЖрддрд╛ рд╣реИ:

  public java.lang.String stringAppendBuilder(); Code: 0: new #41 // class java/lang/StringBuilder 3: dup 4: invokespecial #4 // Method java/lang/StringBuilder."<init>":()V 7: astore_1 8: aload_1 9: ldc #2 // String foo 11: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 14: ldc #6 // String , bar 16: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 

рдЕрдирд╛рд╡рд╢реНрдпрдХ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдлреЗрдВрдХрдиреЗ рдкрд░, рд╣рдореЗрдВ рдПрдХ рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧрдПрдкреЗрдВрдб рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 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 //... .method public stringAppendBuilder()Ljava/lang/String; .registers 3 .prologue .line 13 new-instance v0, Ljava/lang/StringBuilder; invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V .line 14 .local v0, "sb":Ljava/lang/StringBuilder; const-string/jumbo v1, "foo" invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; .line 15 const-string/jumbo v1, ", bar" invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; //... 

рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ stringAppendBuilder рдореЗрдВ рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рд╕рдорд╕реНрдпрд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВ - рдорд╢реАрди рдПрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реИ, рдФрд░ рд╡реЗ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдЬрд╛рджреБрдИ рдЪреАрдЬреЛрдВ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

 move-result-object v1 

StringAppend рдореЗрдВ рдпрд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - StringBuilder рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА v1 рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд╣реИред рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ рдХрд┐ stringAppend рдЕрдзрд┐рдХ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдпрд╣ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреБрд╖реНрдЯрд┐ рдХреА рдЬрд╛рддреА рд╣реИ - рдкрд░рд┐рдгрд╛рдо рд╕реНрдЯреИрдХ рдЬреЗрд╡реАрдПрдо рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ "рдкреИрдЪ" рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рдорд╛рди рд╣реИ: рд╕реНрдЯреНрд░рд┐рдВрдЧрдмрд░реНрдмреНрд▓реА рд▓рдЧрднрдЧ рдбреЗрдврд╝ рдЧреБрдирд╛ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

Source: https://habr.com/ru/post/hi416479/


All Articles