通过javap反编译来看锁优化

    public static void main(String[] args) throws InterruptedException {
        StringBuffer sb = new StringBuffer();
        sb.append("a");

    }
    public static String concatString(String s1, String s2, String s3) {
        StringBuffer sb = new StringBuffer();
        sb.append(s1);
        sb.append(s2);
        sb.append(s3);
        return s1+s2+s3;
    }

反编译后:

  public static java.lang.String concatString(java.lang.String, java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    flags: ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=4, args_size=3
         0: new           #2                  // class java/lang/StringBuffer
         3: dup
         4: invokespecial #3                  // Method java/lang/StringBuffer."<init>":()V
         7: astore_3
         8: aload_3
         9: aload_0
        10: invokevirtual #5                  // Method java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
        13: pop
        14: aload_3
        15: aload_1
        16: invokevirtual #5                  // Method java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
        19: pop
        20: aload_3
        21: aload_2
        22: invokevirtual #5                  // Method java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
        25: pop
        26: new           #6                  // class java/lang/StringBuilder
        29: dup
        30: invokespecial #7                  // Method java/lang/StringBuilder."<init>":()V
        33: aload_0
        34: invokevirtual #8                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        37: aload_1
        38: invokevirtual #8                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        41: aload_2
        42: invokevirtual #8                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        45: invokevirtual #9                  // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
        48: areturn
      LineNumberTable:
        line 13: 0
        line 14: 8
        line 15: 14
        line 16: 20
        line 17: 26
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0      49     0    s1   Ljava/lang/String;
            0      49     1    s2   Ljava/lang/String;
            0      49     2    s3   Ljava/lang/String;
            8      41     3    sb   Ljava/lang/StringBuffer;
}
SourceFile: "Main.java"

main中的Stringbuffer由于存在引用逃逸,存在线程安全,所以没有优化为Stringbuilder,而第二段Stringbuffer则优化为StringBuilder。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值