当前位置:首页 > 娱乐 >

锁住是什么意思网络用语(网络语锁表示什么意思啊)

来源:原点资讯(www.yd166.com)时间:2024-06-17 21:03:55作者:YD166手机阅读>>


来解释一下

  • age_bits 就是我们说的分代回收的标识,占用4字节
  • lock_bits 是锁的标志位,占用2个字节
  • biased_lock_bits 是是否偏向锁的标识,占用1个字节
  • max_hash_bits 是针对无锁计算的hashcode 占用字节数量,如果是32位虚拟机,就是 32 - 4 - 2 -1 = 25 byte,如果是64 位虚拟机,64 - 4 - 2 - 1 = 57 byte,但是会有 25 字节未使用,所以64位的 hashcode 占用 31 byte
  • hash_bits 是针对 64 位虚拟机来说,如果最大字节数大于 31,则取31,否则取真实的字节数
  • cms_bits 我觉得应该是不是64位虚拟机就占用 0 byte,是64位就占用 1byte
  • epoch_bits 就是 epoch 所占用的字节大小,2字节。

Synchronized锁

synchronized用的锁记录是存在Java对象头里的。

JVM基于进入和退出 Monitor 对象来实现方法同步和代码块同步。代码块同步是使用 monitorenter 和 monitorexit 指令实现的,monitorenter 指令是在编译后插入到同步代码块的开始位置,而 monitorexit 是插入到方法结束处和异常处。任何对象都有一个 monitor 与之关联,当且一个 monitor 被持有后,它将处于锁定状态。

根据虚拟机规范的要求,在执行 monitorenter 指令时,首先要去尝试获取对象的锁,如果这个对象没被锁定,或者当前线程已经拥有了那个对象的锁,把锁的计数器加1,相应地,在执行 monitorexit 指令时会将锁计数器减1,当计数器被减到0时,锁就释放了。如果获取对象锁失败了,那当前线程就要阻塞等待,直到对象锁被另一个线程释放为止。

Monitor

Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的,监视器锁本质又是依赖于底层的操作系统的 Mutex Lock(互斥锁)来实现的。而操作系统实现线程之间的切换需要从用户态转换到核心态,这个成本非常高,状态之间的转换需要相对比较长的时间,这就是为什么 Synchronized 效率低的原因。因此,这种依赖于操作系统 Mutex Lock 所实现的锁我们称之为重量级锁。

Java SE 1.6为了减少获得锁和释放锁带来的性能消耗,引入了偏向锁和轻量级锁:锁一共有4种状态,级别从低到高依次是:无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态。锁可以升级但不能降级。

所以锁的状态总共有四种:无锁状态、偏向锁、轻量级锁和重量级锁。随着锁的竞争,锁可以从偏向锁升级到轻量级锁,再升级的重量级锁(但是锁的升级是单向的,也就是说只能从低到高升级,不会出现锁的降级)。JDK 1.6中默认是开启偏向锁和轻量级锁的,我们也可以通过-XX:-UseBiasedLocking=false来禁用偏向锁。

锁的分类及其解释

先来个大体的流程图来感受一下这个过程,然后下面我们再分开来说

锁住是什么意思网络用语,网络语锁表示什么意思啊(9)

无锁

无锁状态,无锁即没有对资源进行锁定,所有的线程都可以对同一个资源进行访问,但是只有一个线程能够成功修改资源。

锁住是什么意思网络用语,网络语锁表示什么意思啊(10)

无锁的特点就是在循环内进行修改操作,线程会不断的尝试修改共享资源,直到能够成功修改资源并退出,在此过程中没有出现冲突的发生,这很像我们在之前文章中介绍的 CAS 实现,CAS 的原理和应用就是无锁的实现。无锁无法全面代替有锁,但无锁在某些场合下的性能是非常高的。

偏向锁

HotSpot 的作者经过研究发现,大多数情况下,锁不仅不存在多线程竞争,还存在锁由同一线程多次获得的情况,偏向锁就是在这种情况下出现的,它的出现是为了解决只有在一个线程执行同步时提高性能。

锁住是什么意思网络用语,网络语锁表示什么意思啊(11)

可以从对象头的分配中看到,偏向锁要比无锁多了线程ID 和 epoch,下面我们就来描述一下偏向锁的获取过程

偏向锁获取过程

  1. 首先线程访问同步代码块,会通过检查对象头 Mark Word 的锁标志位判断目前锁的状态,如果是 01,说明就是无锁或者偏向锁,然后再根据是否偏向锁 的标示判断是无锁还是偏向锁,如果是无锁情况下,执行下一步
  2. 线程使用 CAS 操作来尝试对对象加锁,如果使用 CAS 替换 ThreadID 成功,就说明是第一次上锁,那么当前线程就会获得对象的偏向锁,此时会在对象头的 Mark Word 中记录当前线程 ID 和获取锁的时间 epoch 等信息,然后执行同步代码块。

全局安全点(Safe Point):全局安全点的理解会涉及到 C 语言底层的一些知识,这里简单理解 SafePoint 是 Java 代码中的一个线程可能暂停执行的位置。

等到下一次线程在进入和退出同步代码块时就不需要进行 CAS 操作进行加锁和解锁,只需要简单判断一下对象头的 Mark Word 中是否存储着指向当前线程的线程ID,判断的标志当然是根据锁的标志位来判断的。如果用流程图来表示的话就是下面这样

锁住是什么意思网络用语,网络语锁表示什么意思啊(12)

栏目热文

锁了网络用语什么意思(锁网络用语什么意思)

锁了网络用语什么意思(锁网络用语什么意思)

看到网络上有一个不好的风向,特别是一些大V、学者张口闭口“U型锁”,“二极管”来暗讽网友,且不说他在针对谁,但是总觉得这...

2024-06-17 21:01:54查看全文 >>

开锁网络用语(网上说开锁的梗)

开锁网络用语(网上说开锁的梗)

解锁科技热词科普流行用语14个网络热词新鲜出炉一起来看!科技热词网络流行语来源:网信广东、网络传播杂志,...

2024-06-17 21:39:02查看全文 >>

什么是锁(什么是锁含义)

什么是锁(什么是锁含义)

古老的智慧和玄机——“锁”孟祥瑞 中国锁具文化从距今5000多年前的仰韶文化时期,我国先民创造了装在木结构框架建筑上的木...

2024-06-17 21:01:38查看全文 >>

锁了是什么意思网络用语(网络语锁表示什么意思啊)

锁了是什么意思网络用语(网络语锁表示什么意思啊)

锁了是什么梗?“锁了”是一个网络用语,最近很多的小伙伴们都不太清楚是什么意思,不过经常的看到有人说锁了,谁和谁锁了,这对...

2024-06-17 21:10:43查看全文 >>

门被锁了怎么办没钥匙怎么打开(门被钥匙锁了怎么在里面打开)

门被锁了怎么办没钥匙怎么打开(门被钥匙锁了怎么在里面打开)

学会这招,即使钥匙忘在家里把门关了,也不请开锁公司了!大家好,我是雷哥教电脑,这期视频我跟大家分享一下:钥匙忘在家里,门...

2024-06-17 21:09:57查看全文 >>

锁什么意思网络词(我被锁了什么意思网络用语)

锁什么意思网络词(我被锁了什么意思网络用语)

今天这个单词与你已知的一个旧词——lock,锁,有关。lock这个单词既可以当动词,又可以当名词,今天的新词是——rel...

2024-06-17 21:30:48查看全文 >>

优秀推文范例100字(优秀推文模板素材)

优秀推文范例100字(优秀推文模板素材)

我曾有段初恋在菜市场开始,那时他是陪伴母亲购买食材的优等生,我则是以回收废品为生的小姑娘。为了这段感情,我默默地追求了他...

2024-06-17 21:43:03查看全文 >>

推文是什么社交软件(推文和媒体在哪个社交软件上有)

推文是什么社交软件(推文和媒体在哪个社交软件上有)

小说推文是指通过社交媒体、论坛、博客等平台推广小说,以吸引更多读者关注和阅读。作为小白,你可以遵循以下建议来推广小说:1...

2024-06-17 21:45:06查看全文 >>

推文文案怎么写范例(推文文案开头套用模板)

推文文案怎么写范例(推文文案开头套用模板)

云天收夏色,木叶动秋声。哈喽小伙伴们大家好啊,本周日就是立秋了,作为二十四节气中第十三个节气,秋季的第一个节气,他的到来...

2024-06-17 21:03:36查看全文 >>

推文范文(新手怎么写推文)

推文范文(新手怎么写推文)

文|星晖编|陈梅希‍‍推文号正在占领互联网。在微博,它们化身黑话加密的投稿bot;在小红书,它们成了标题耸人听闻的图文笔...

2024-06-17 21:21:37查看全文 >>

文档排行