上海创意型网站建设怎么制作公众号封面图
上海创意型网站建设,怎么制作公众号封面图,wordpress 微网站模板,杭州 seo网站建设 网络服务推荐链接#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD… 推荐链接 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoDB】 总结——》【Elasticsearch】 Java——》synchronized锁升级 一、无锁1、无锁2、匿名偏向 二、偏向锁1、获取锁资源的过程锁升级过程2、为什么要有偏向锁延迟3、为什么偏向锁撤销会导致启动变慢4、偏向锁撤销安全点5、偏向锁重入6、偏向锁会降级到无锁状态吗以及如何降 三、轻量级锁四、重量级锁1、重量级锁会降级到偏向锁或者是轻量级锁吗2、如何竞争锁资源 synchronized在jdk1.6之前一直是重量级锁只要线程获取锁资源失败直接挂起线程用户态切换到内核态效率低所以JDK团队在Jdk1.6将synchronized做了3方面优化锁升级、锁消除、锁膨胀。 锁就是对象Java中所有对象都是锁。
锁描述无锁/匿名偏向无锁没有开启偏向锁偏向锁延迟开启时间内没有线程拿锁匿名偏向开启偏向锁没有线程拿锁没有偏向任何线程偏向锁只有一个线程来拿锁资源没有竞争轻量级锁偏向锁出现竞争时会升级到轻量级锁触发偏向锁撤销以CAS的方式自适应自旋锁去竞争锁资源不会让线程挂起。LockRecord重量级锁直接采用MarkWord指向的ObjectMonitor以传统的方式去竞争锁资源 一、无锁
1、无锁
一般情况下new出来的一个对象是无锁状态。 因为偏向锁有延迟在启动JVM的4s中不存在偏向锁。
2、匿名偏向
如果关闭了偏向锁延迟的设置new出来的对象就是匿名偏向但没有偏向任何线程。
//关闭延迟开启偏向锁
-XX:BiasedLockingStartupDelay0
//4s之后开启偏向锁
-XX:BiasedLockingStartupDelay4//禁止偏向锁
-XX:-UseBiasedLocking
//启用偏向锁
-XX:UseBiasedLocking 二、偏向锁
没有线程的竞争只有一个线程在获取锁资源。
1、获取锁资源的过程锁升级过程
当某一个线程来获取这个锁资源时发现没有线程占用锁资源并且锁是偏向锁使用CAS的方式设置对象的线程ID为当前线程获取到锁资源下次当前线程再次获取锁资源时只需要判断是偏向锁并且对象的线程ID是当前线程ID就直接获得到锁资源。如果对象的线程ID不是当前线程ID也就是说偏向锁状态出现了锁竞争的情况就触发锁升级升级为轻量级锁。
2、为什么要有偏向锁延迟
JVM在启动时需要加载大量的.class文件到内存中这个操作会涉及到synchronized的使用为了避免出现偏向锁撤销导致启动效率变慢所以JVM启动时有一个延迟4s开启偏向锁的操作。
偏向锁是延迟开启的并且在开启偏向锁之后默认不存在无锁状态只存在匿名偏向。
3、为什么偏向锁撤销会导致启动变慢
当偏向锁升级到轻量锁时会触发偏向锁撤销。 1偏向锁撤销需要等到一个安全点STW才可以做偏向锁撤销。 2偏向锁撤销的成本太高消耗资源
4、偏向锁撤销安全点
GC方法返回之前调用某个方法之后抛出异常的位置循环的末尾
5、偏向锁重入
用到了LockRecord只不过内部不会存储hashcode信息等等在偏向锁重入时每次都会压栈一个LockRecord从而实现偏向锁重入。
6、偏向锁会降级到无锁状态吗以及如何降
会。 当偏向锁状态下获取当前对象的hashcode值会因为对象头空间无法存储hashcode导致降级到无锁状态。
三、轻量级锁
如果出现了多个线程的竞争就要升级为轻量级锁有可能直接从无锁变为轻量级锁也有可能从偏向锁升级为轻量级锁会触发偏向锁撤销。 轻量级锁的是基于CAS尝试获取锁资源这里会用到自适应自旋锁JVM会自动的根据上次CAS成功与否决定这次自旋多少次。
如果成功获取到拿着锁资源走如果自旋了一定次数没拿到锁资源锁升级为重量级锁
四、重量级锁
轻量级锁CAS一段次数后没有拿到锁资源升级为重量级锁。线程拿不到锁就挂起。
public static void main(String[] args) throws InterruptedException {Thread.sleep(5000);Object o new Object();System.out.println(ClassLayout.parseInstance(o).toPrintable());new Thread(() - {synchronized (o){//t1 - 偏向锁System.out.println(t1: ClassLayout.parseInstance(o).toPrintable());}}).start();//main - 偏向锁 - 轻量级锁CAS - 重量级锁synchronized (o){System.out.println(main: ClassLayout.parseInstance(o).toPrintable());}
}1、重量级锁会降级到偏向锁或者是轻量级锁吗
不会
2、如何竞争锁资源
直接采用MarkWord指向的ObjectMonitor以传统的方式去竞争锁资源
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/89771.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!