锁消除(lock eliminate)
StringBuffer是线程安全的,被synchronized修饰过的,是同步的。我们发现,sb这个引用只会在append方法中使用,不可能被其他线程引用(因为是局部变量,栈私有),因此,sb是不可能共享资源的,JVM会自动消除StringBuffer对象内部的锁。
锁粗化(lock coarsening)
JVM会检测到这样一连串的操作都对同一个对象加锁(while循环内100次执行append,没有锁粗化得话就要执行100次加锁/解锁),此时JVM就会将加锁的范围粗化到这一连串的操作的外部(比如while虚幻体外),使得这一连串操作只需要加一次锁即可。