黑马JVM总结(三十七)

(1)synchronized-轻量级锁-无竞争

黑马JVM总结(三十七)_第1张图片

黑马JVM总结(三十七)_第2张图片

(2)synchronized-轻量级锁-锁膨胀

黑马JVM总结(三十七)_第3张图片

黑马JVM总结(三十七)_第4张图片

重量级锁就是我们前面介绍过的Monitor enter

(3)synchronized-重量级锁-自旋

黑马JVM总结(三十七)_第5张图片

黑马JVM总结(三十七)_第6张图片

黑马JVM总结(三十七)_第7张图片

(4)synchronized-偏向锁

黑马JVM总结(三十七)_第8张图片

 

轻量级锁会有锁重入的情况,当调用完method1后在 调用method2它会,在一次CAS修改mark为线程1锁记录地址,自己跟自己还要执行这个就没有必要了

黑马JVM总结(三十七)_第9张图片

进一步优化,利用偏向锁

单个线程偏向锁工作挺好,但是另外有线程进行竞争了,偏向锁就会被撤销,撤销之后会升级为轻量级锁

(5)synchronized-其他优化

ConcurrentHashMap数组的链表头上加锁,锁住的是链表头,原来是HashTable锁住的是整个HashTable,读写操作完全忽视了,锁住链表头加锁的粒度就变小了,每次锁住一个链表,其他链表的读写操作不会受到影响 

黑马JVM总结(三十七)_第10张图片

黑马JVM总结(三十七)_第11张图片

黑马JVM总结(三十七)_第12张图片

读的读原始数据内容,写的话复制一份在一个新数组上进行写,读操作不需要操作的,只要同步写

你可能感兴趣的:(JVM虚拟机,jvm)