Java 的锁

对象头 Mark Word,用来描述对象的Hash 过期时间 年龄 垃圾回收标记  锁记录 线程ID所有信息 ,32位。

偏向锁:偏向于已经占有此线程的锁,默认启动 -XX:+UseBiasedLocking. 在竞争不激烈下提高性能。

Vector 线程安全,里面会走syncronised{} 性能有所下降 但是加上倾向锁 弥补性能缺口.

自旋锁:存在竞争时候,线程可以很快获取,不需要把线程挂起就可以获得锁,同步块尽量短,自旋成功率就提高了,节省线程 开始 和 释放 的操作时间,提高性能。Spinlocks

Summary: 试偏向锁,轻量级锁,都失败后尝试 自旋锁。失败后 尝试普通锁。

优化方法

  1. 尽量不要用syncronised 方法 可以在具体行家syncronised块 来减少锁持有时间。
  2. 大对象拆分成小对象,提高并行对,降低锁竞争,提高偏向锁和轻量级锁的成功率 eg: ConcurrentHashMap. Collections.syncronisedMap(Map) - > get() put() 有锁,内部分成多个小的Segment<K,V> 而不是一个大的。

锁分离:读锁 和 写锁 分离。

Eg: LinkedBlockingQueue put() 和 take() 互不影响。

无锁:锁是悲观的操作 无锁是乐观的操作。CAS(Compare and Swap), 非阻塞。

Eg: AtomicInteger, getAndSet(int Value) ,拿出来同时也set同步了,里面全是无锁操作 性能很高。

 

 

 

转载于:https://my.oschina.net/Business/blog/983308

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值