锁调优主要从以下五个方面入手
- 减少锁的持有时间
- 减小锁的粒度
- 锁粗化
- 锁分离
- 读写分离
- 操作分离
- 无锁(CAS)
ReentrantLock上了写锁后,持有锁的线程可以继续加读锁,之后再释放写锁,从而完成 从写锁降级为读锁 的锁降级过程。
在读多写少的情况下ReentrantLock可以换为ReentrantReadWriteLock。
但在读操作远大于写操作,导致 写“饥饿” 的问题时可以采用StampedLock,它将读锁分为了悲观读和乐观读。悲观读则和ReentrantReadWriteLock读锁一致,乐观读则采用了CAS操作,即有线程读时其他线程依然可以上写锁。
补充:
synchronized优化机制
- 锁分级
- 锁消除
- 锁粗化
相关参数(理解相关原理即可,实际过程中使用较少)
参数 | 作用 |
-XX:+UseBiasedLocking | 开启偏向锁 |
-XX:BiasedLockingStartupDelay | 启动后多久开启偏向锁 |
-XX:+UseHeavyMonitors | 禁用偏向锁 |
-XX:+DoEscapeAnalysis | 开启逃逸分析 |
-XX:-EliminateLocks | 开启锁消除 |
标签:读锁,开启,XX,调优,线程,偏向 From: https://www.cnblogs.com/shan218/p/17092698.html