参看《实战JAVA高并发程序设计》P146
java虚拟机对锁进行优化:
类型 | 依赖操作 | 参数
—— | —— | ——
锁偏向 | 无 | 开启偏向锁:-XX:+UseBiasedLocking
锁消除 | 逃逸分析 | -XX:+EliminateLocks
逃逸分析 | 无 | (-server)-XX:DoEscapeAnalysis
锁偏向
锁偏向是对针对加锁操作的优化手段,核心思想是:如果一个线程获得了锁,那么锁就进入偏向状态,当该线程再次请求锁时,无需再进行任何同步操作。这样就节省了大量有关锁申请的操作。
但是锁偏向并不总是能提高锁的性能,对于几乎没有锁竞争的场合,锁偏向会有比较好的优化效果。而对于竞争激烈的场合,特别是每次都由不同线程请求相同的锁时,还不如不适用偏向锁。
锁消除
锁消除时一种更彻底地锁优化。JVM在JIT编译时,通过对运行上下文的扫描,去除不可能存在共享资源竞争的锁。而锁消除所依赖的一项关键技术就是逃逸分析
逃逸分析
逃逸分析是程序优化技术,所谓逃逸分析,就是观察一个变量是否会跳出某个作用域。