漫谈 JVM —— 内存模型、线程、锁

本文探讨了Java内存模型(JMM)的目的及其在统一内存管理中的作用,深入解析了volatile关键字的特性与限制,以及JDK1.6中自旋锁、轻量级锁、偏向锁的设计理念与应用场景,特别强调了在高并发场景如秒杀活动中锁膨胀对性能的影响。

Java 内存模型(JMM),实际上的目的就是为了统一内存管理。这让我想到了,作为一个程序员总是想着有银弹,有一个代码能万能的在所有场景上。经过多次尝试我发现这是不可能的:需求在变,技术在更新,没有什么事万能的。

volatile 关键字保证了可见性、有序性,不能保证原子性,这是一个遗憾。是个事物总是有一些不圆满的。

Java 的线程还是和操作系统挂钩,所以,编程人员,还是要会底层,才能走的更远。

说道锁,JDK 1.6 对于锁的优化还是让人大开眼界。自旋锁、轻量级锁、偏向锁,为了解决重量级锁的性能问题而发明出来的锁,一个比一个厉害。自旋锁解决了上下文切换频繁的问题;轻量级锁解决了加锁性能太低的问题;偏向锁更是在轻量级锁进一步优化。然而别忘了我说的,没有银弹,没有银弹,没有银弹。现实生活中,大多数应用可能没有那么多共享变量,所以这三个锁,性能很好;但是,也有很多应用有很多共享变量,比如秒杀活动。这个时候用这三个锁就很头贴,冲突太多,偏向锁要膨胀到轻量级锁,轻量级锁要膨胀到重量级锁,性能急剧下降,膨胀的时候还有 STW 出现,在秒杀活动中这是十分可怕的。

就说这么多,学了这些内容,发现 JVM 的理念和唯物主义很像,一切从实际出发。

转载于:https://www.cnblogs.com/Piers/p/9952676.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值