IT袋

当前位置:主页 > 经验教程 > 建站编程 >

java面试题

java面试题:为什么JDK 15要废弃偏向锁?

时间:2023-11-02 18:49:39 来源:IT袋 作者:马勇
导读:java面试题,今天为大家介绍java面试题及为什么JDK的介绍,具体介绍如下: 为什么JDK 15要废弃偏向锁? 要想说清楚这个问题,你得先知道什么是偏向锁,它是在哪里使用的。 这就不

java面试题

今天为大家介绍java面试题及为什么JDK的介绍,具体介绍如下:

为什么JDK 15要废弃偏向锁?

要想说清楚这个问题,你得先知道什么是偏向锁,它是在哪里使用的。

这就不得不提到Synchronized的锁升级过程了。

在JDK 1.6及之前的版本中,Synchronized关键字,它可以让一个对象只能被一个线程使用,这样就可以避免多个线程同时修改同一个对象造成的混乱。

但是,这种方式也有一个缺点,就是每次一个线程要使用一个对象时,都要先检查这个对象是否被别的线程占用了,如果是的话,就要等待别的线程用完才能继续。

这个过程会消耗很多时间和资源,影响程序的效率。

为了解决这个问题,Java在后来的1.7 之后对 Synchronized 的实现做了一些改进,让它可以根据不同的情况,采用不同的方式来控制对象的使用。

具体来说,有四种方式:

无锁状态:这是最简单的一种方式,就是没有任何限制,任何线程都可以随时使用对象。

偏向锁状态:这是一种优化的方式,就是假设一个对象只会被一个线程使用,所以当第一个线程使用对象时,就会把自己的标记放在对象上,表示这个对象属于自己。这样,下次这个线程再使用对象时,就不用检查了,直接就可以用。但是如果有别的线程也想用这个对象,就要先把标记去掉,然后再竞争。

轻量级锁状态:这是一种折中的方式,就是当有多个线程想用同一个对象时,不会立刻让它们等待,而是先让它们在自己的内存里复制一份对象的信息,然后各自修改。最后再比较一下谁修改得最快,谁就可以用对象。这样可以减少等待的时间,提高效率。

重量级锁状态:这是最原始的一种方式,就是当有多个线程想用同一个对象时,只能让其中一个线程用,其他的线程都要等待。这样可以保证对象的安全性,但是会降低效率。

java面试题

在Java中,每个对象都有一个特殊的区域叫做mark word(标记字),它可以记录对象的一些信息。其中有两位或三位是用来表示对象现在处于哪种状态的。具体来说:

如果两位是“01”,表示无锁状态或偏向锁状态。如果第三位是“0”,表示无锁状态;

如果第三位是“1”,表示偏向锁状态。如果两位是“00”,表示轻量级锁状态。

如果两位是“10”,表示重量级锁状态。

java面试题

但是,在Java 15中 ,偏向锁被取消了 ,所以现在只有三种状态:无锁状态、轻量级锁状态和重量级锁状态。

相关阅读

  • 二级域名怎么注册 二级域名注册平台及流程

    二级域名怎么注册 二级域名注册平台及流程

    今天带来的IT技巧小经验二级域名怎么注册和二级域名注册平台及流程的介绍,接下来小编为网友介绍。 什么是二级域名? 按照严格的标准来划分,顶级域名的下一级才是二级域名。其中顶级

  • 服务器配置参数有哪些 公司服务器搭建与配置教程

    服务器配置参数有哪些 公司服务器搭建与配置教程

    全面的为您讲解服务器配置参数有哪些和公司服务器搭建与配置教程方面的介绍,下面为详细的介绍。 如何选择合适自己的服务器?? 一、服务器配置介绍 1.对于1核2G 1M的服务器,主要用来部

  • 网络网站开发公司有哪些 创建自己的网站平台

    网络网站开发公司有哪些 创建自己的网站平台

    跟大家分享网络网站开发公司有哪些和创建自己的网站平台方面的讲解,接下来IT袋小编就来介绍。 互联网现在已经成为了我们生活的一部分。互联网经济为企业提供了一个新的发展渠道。很

  • OSPFv3 LSA类型有哪几种

    OSPFv3 LSA类型有哪几种

    小编带来的是OSPFv3的电脑小知识,接下来就是全面介绍。 在OSPFv3(Open Shortest Path First version 3)协议中,链路状态广告(LSA)是关键的信息传递单元,用于在路由器之间传播网络的链路状态信息