1)锁消除
概念:JVM在JIT编译(即时编译)时,通过对运行上下文的扫描,去除掉那些不可能发生共享资源竞争的锁,从而节省了线程请求这些锁的时间。
举例:
StringBuffer的append方法是一个同步方法,如果StringBuffer类型的变量是一个局部变量,则该变量就不会被其它线程所使用,即对局部变量的操作是不会发生线程不安全的问题。
在这种情景下,JVM会在JIT编译时自动将append方法上的锁去掉。
2)锁粗化
概念:将多个连续的加锁、解锁操作连接在一起,扩展成一个范围更大的锁,即将加锁的粒度放大。
举例:在for循环里的加锁/解锁操作,一般需要放到for循环外。
3)使用偏向锁和轻量级锁
说明: