jvm锁_JVM如何处理锁

jvm锁

当我们谈论最新版本的Sun Hotspot Java虚拟机1.6时,当您尝试从java.util.concurrent.locks.Lock实现获取锁或输入同步块时,JVM将执行以下三种锁类型:
  • 有偏见的 :有时,即使在并发系统中也没有争用,并且在这种情况下,JVM不应从OS借用互斥锁来执行锁定。 Hotspot可以使用其自己的内部数据结构进行操作,以更有效的方式模拟锁定。 例如,如果代码的同步部分没有实时并发执行,则JVM使用CAS操作将所有者线程ID分配给Java代码中用作互斥对象的对象,并在传递CAS时另外存储重入计数。 它是有偏锁 -JVM完成的“最轻”的锁类型。 重入计数将由锁所有者线程更新,就像没有CAS的通常本地变量一样。 如果CAS失败,则意味着另一个线程已经获得了该锁,在这种情况下,JVM 停止了互斥体所有者线程, 线程上下文刷新到主内存中并检查重入计数。 如果为0,则JVM会将锁升级为类型,否则升级为 (我认为主要目的是等待时间,如果锁很薄,则应该很小)。 注意 Hotspot使用与用于缓存标识哈希码相同的字段在互斥对象中存储所有者线程ID。 因此,如果您一次在互斥体上检索身份哈希码,那么即使已被用作偏向锁定,它也无法用于偏向锁定。 有关偏向锁的更多信息,请参见David Dice的博客 。
  • :这是一个简单的自旋锁。 当旋转时间很小时,它有助于节省线程上下文切换的时间。 当一个线程尝试获取占用的互斥锁时,它将旋转一段时间,直到释放锁为止。 旋转次数基于内部JVM分辨率,并且可能取决于不同的因素:JVM收集的有关您的应用程序的统计信息,使用的线程数,CPU等等。 JVM确定精简锁何时变得无效,并将其升级为锁。
  • fat :JVM请求操作系统互斥并使用OS调度程序引擎进行线程驻留和唤醒时,“最强”的锁定类型。 它比以前的类型昂贵得多,因为在这种情况下,每当线程获取并释放锁时,JVM都应直接与OS交互。

参考: JVM如何处理 Slava技术博客上的 JCG合作伙伴提供的锁 。

相关文章 :
  • Erlang与Java内存架构
  • Java Fork / Join进行并行编程
  • Java内存模型-快速概述和注意事项
  • Java中可怕的双重检查锁定习惯用法
  • Java最佳实践–队列之战和链接的ConcurrentHashMap

翻译自: https://www.javacodegeeks.com/2011/05/how-jvm-handle-locks.html

jvm锁

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

excel使用MySQL数据,如何使用mysql完成excel中的数据生成

Excel是数据分析中最常用的工具,本篇文章通过mysql与excel的功能对比介绍如何使用mysql完成excel中的数据生成,数据清洗,预处理,以及最常见的数据分类,数据筛选,分类汇总,以及数据透视等操作。本…

究竟什么是语法糖呢

其实语法糖只是一个概念,大家可能很早就在接触语法糖了,只是一直不知道这个就是语法糖 百科原话:语法糖(Syntactic sugar),是由Peter J. Landin(和图灵一样的天才人物,是他最先发现了Lambda演算,由此而创立了函数式编程…

Spring Batch –使用JavaConfig替换XML作业配置

我最近协助一个客户启动并运行了Spring Batch实现。 该团队决定继续为批处理作业使用基于JavaConfig的配置,而不是传统的基于XML的配置。 随着这越来越成为配置Java应用程序的一种常用方法,我觉得是时候更新Keyhole的Spring Batch系列了 ,向您…

php使用accdb,php如何连接access2007的accdb格式数据库文件?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼header("Content-type: text/html; charsetGBK");/*数据库路径,请自己修改,否则可能运行不正常*/$conn new COM("ADODB.Connection") or die("ADO连接失败!");$connstr "PROVIDER…

Karrigell 入门教程

http://wenku.baidu.com/link?urlPG3sP0mnKt-RPLxEPktTtqTsMlCflOwSTdOEgti21pnFaed1K_MSd4Xx-Z-ZvkgyTvIwWFTB1dEy1eQ9gKyIwIVMeKEiforBbVykW0Y2SM_ 讲karrigell 3.1.1,目录结构和2.x版本不一样了。新版本里面是没有Karrigell.ini 文中提到admin目录下有一个模块…

php autoload用法,php自动加载__autoload()函数用法

autoload在php主版本中是自动加载文件的一个方法了我们可以定义许多的文件在目录然后通过autoload加载了,下面来看看autoload函数用法。在PHP5之后,我们可以通过 __autoload来解决这个问题。 而且在PHP5.1之后,还提供了 spl_autoload_registe…

jaxb xsd生成xml_使用JAXB从XSD生成XML

jaxb xsd生成xml这是最初由JCG合作伙伴 Experiences Unlimited的Mohamed Sanaulla发表的帖子。 Mohamed解释了如何使用JAXB从给定的XSD生成XML 。 (注意:对原始帖子进行了少量编辑以提高可读性) 我们可以使用JAXB使用给定的Schema将Java对象…

oracle 10g客户端连接11g,生产环境oracle10g升级至11g准备工作

主要有以下的步骤 :1.new ORACLE_HOME(11g), old ORACLE_HOME (10g)--这些需要提前提供给客户,作为基本的约定2.install oracle software 11.2.0.2.0 on production--总共有7个DB,时间很紧,所以准备要充分3.apply DB patch additional if nee…

JBoss BPM Travel Agency的微服务迁移故事

不久前,我们启动了一个规模较大的JBoss Travel Agency演示项目,以展示JBoss BPM Suite的一些更有趣的功能。 我们提供了一系列视频 ,不仅向您展示了如何安装它,项目中各种规则和流程工件的含义,还向您介绍了在实际使…

windows快捷操作

命令行启动或关闭VMWare服务: net start VMwareHostdVMAuthdServiceVMUSBArbService"VMware NAT Service"VMnetDHCP#启动VMware虚拟机服务net start VMwareHostdnet start "VMware NAT Service"net start VMnetDHCPcmd#停止VMvare虚拟机服务net…

oracle 打印值,oracle – 在SQL Developer中打印变量的值

我想打印一个特定变量的值在一个匿名块内。我使用Oracle SQL Developer。我尝试使用dbms_output.put_line。但它不工作。我使用的代码如下所示。SET SERVEROUTPUT ONDECLARECTABLE USER_OBJECTS.OBJECT_NAME%TYPE;CCOLUMN ALL_TAB_COLS.COLUMN_NAME%TYPE;V_ALL_COLS VARCHAR2(5…

【leetcode】Combinations (middle)

Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For example,If n 4 and k 2, a solution is: [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ] 思路:有点像0-1背包问题, 对于从1-n的每一个数字都可以选择放入…

oracle 批量读,Oracle批量读取数据和批量绑定

通常我们获取游标数据是用fetch some_cursor into var1, var2 的形式,自 Oracle 8i 起,Oracle 为我们提供了fetch bulkcollect 来批量取游标中的数据,它能在读取游标中大量数据的时候提升效率,采用bulkcollect可以将查询结果一次性…

java压缩_Java压缩

java压缩在最近的项目中,我们不得不做一些我个人从未真正看过的事情。 压缩。 我们需要拍摄几个文件和图像,将它们压缩并提供给FTP使用,是的,总有一天,感觉确实回到了90年代。 除了过去的FTP之行外,它还是一…

我们的世界

看完记得留言说说你的感想 http://lchml.com/our-world/ 转载于:https://www.cnblogs.com/licheng127/p/4239021.html

eslint php,ESlint操作步骤详解

这次给大家带来ESlint操作步骤详解,ESlint操作的注意事项有哪些,下面就是实战案例,一起来看一下。vue-cli脚手架创建的项目默认使用ESlint规则,启动项目的时候因为各种语法报错,不得不先停下了解一下什么是ESlint&…

FileSystemMap:与文件系统交互的自然方法

作为项目的一部分,我目前正在研究创建FileSystemMap 。 我已经开始了一个非常小的GitHub的项目在这里举办的代码。 本质上,此映射实现将允许用户与其文件系统上的目录进行交互,就好像它是java.util.Map 。 映射中的每个条目将是该目录中的文…

动画原理——绘制正弦函数环绕运动椭圆运动

书籍名称&#xff1a;HTML5-Animation-with-JavaScript 书籍源码&#xff1a;https://github.com/lamberta/html5-animation 1.正弦函数。x位置递增&#xff0c;y位置用sin生成。 这段代码是不需要ball.js的。 代码如下&#xff1a; <!doctype html> <html><hea…

oracle优质图书,经典Oracle图书推荐(之四)_oracle

经典的oracle图书:Oracle High Performance Tuning for 9i and 10g by Gavin PowellBook DescriptionThere are three parts to tuning an Oracle database: data modeling, SQL code tuning and physical database configuration.A data model contains tables and relationsh…

expr命令 linux,Shell expr命令进行整数计算的实现

expr 是 evaluate expressions 的缩写&#xff0c;译为“表达式求值”。Shell expr 是一个功能强大&#xff0c;并且比较复杂的命令&#xff0c;它除了可以实现整数计算&#xff0c;还可以结合一些选项对字符串进行处理&#xff0c;例如计算字符串长度、字符串比较、字符串匹配…