首页 > 锁的优化

锁的优化

锁粗化

  虚拟机遇到一连串连续的对同一锁不断的进行请求和释放的操作,把所有的锁操作整合成对锁的一次请求

synchronized (lock){for(int i=0;i<20;i++){// do sth
                    }}

锁偏向

如果一个线程获得锁,那么就进入偏向模式,下次再次请求锁时,无须进行同步操作,节省了锁申请的时间,对于锁竞争比较激烈的场合不佳,这样会导致偏向模式失效



JAVA虚拟机参数 -XX:+UseBiasedLocking开启

轻量级锁

把对象头部作为指针,指向持有锁线程的内部堆栈,来判断线程是否持有对象锁

子旋锁

当前线程暂时无法获得锁,本应该挂起,但是虚拟机进行一次赌博,CPU循环几次(空循环),如果可以得到锁,那么进入临界区,如果不能,进行挂起

锁消除

Java虚拟机在JIT编译时,通过上下文的扫描,去除不可能存在共享资源竞争的锁,比如使用了StringBuffer Vector

 

转载于:https://www.cnblogs.com/bockpecehhe/p/9305884.html

更多相关:

  • 多线程有什么好处?提高CPU的利用率,更好地利用系统资源,使用Monitor类可以同步静态/实例化的方法的全部代码或者部分代码段,使用不同的同步类创建自己的同步机制。多线程指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程提升整体处理性能。多线程是指程序中包含多个执行流,即...

  • Step1:在界面主函数的构造函数中初始化多线程 auto mythread = new QThread(); //新建connect(mythread , &QThread::finished, mythread, &QObject::deleteLater);//线程运行结束后释放内存object1->moveToThread...

  • 一、thread的基本用法 参见C++使用thread类多线程编程 。 二、类外使用多线程,访问类的成员 这几种方式,新建线程都是在类外,然后通过把友元函数或者成员函数作为thread参数。 #include #include #include using namesp...

  • 本博文是根据中科大信息学院谭立湘老师的课件加上自己的理解整理出来的 ************************************************************************************ NVIDIA在2007年推出CUDA这个统一计算架构 CUDA的基本思想是支持大量的线程级并...

  • 一、parallel communication patterns   并行通信模式 Map:映射,在特定的位置读取和写入。 Gather:收集,从多个不同的位置读入,写入一个位置。 Scatter:分发,写入多个位置。 Transpose转置 结构数组缩写为AOS,数组结构缩写为SOA 转置运算是指任务重新排序内存中的数...

  •     注意,前情提示: 本代码基于《Node.js(nodejs)对本地JSON文件进行增、删、改、查操作(轻车熟路)》 传送门Node.js(nodejs)对本地JSON文件进行增、删、改、查操作(轻车熟路)_你挚爱的强哥❤给你发来1条消息❤-CSDN博客   在/api/demo/文件夹下面创建CURD.js...

  • 第一:在map端产生join mapJoin的主要意思就是,当链接的两个表是一个比较小的表和一个特别大的表的时候,我们把比较小的table直接放到内存中去,然后再对比较大的表格进行map操作。join就发生在map操作的时候,每当扫描一个大的table中的数据,就要去去查看小表的数据,哪条与之相符,继而进行连接。这里的join并不会涉...

  • ** 0x01 原理分析 ** 还是很早之前爆出来的漏洞,现在拿出来学习一下,参考阿里巴巴:https://security.alibaba.com/... 漏洞发生在/inc/common.inc.php页面中。首先看这个函数: 首先使用ini_get来获取php.ini中变量'register_globals'的值,而r...

  • 就之前本人主持开发的金融产品所遇到的安全问题,设计部分请参见:http://www.cnblogs.com/shenliang123/p/3835072.html 这里就部分web安全防护就简单的交流: 1.1系统安全 1.1.1  客户端脚本安全 (1)跨站脚本攻击(XSS):        XSS攻击,通常指黑客通过“html注...

  • 一、活动目录灾备简介  本次演练我们将讨论如何让域控制器从灾难状态(例如由于硬件或软件故障引起的数据库故障)进行恢复的步骤。此类灾难通常会导致域控制器失效,而且会使计算机无法正常引导;将只提供对运行 Active Directory 的域控制器(不运行其它服务)进行恢复的信息。如果该计算机上还安装有其它服务,例如域名系统 (DNS)...

  • 一、业务场景 在rMBP上的VMware Fushion 15.1安装虚拟机,采用一切默认的配置,经过简单几步,我们将得到一个dhcp协议的具有动态ip地址的虚拟机,可以满足绝大多数情况,也很方便很好用。但是有一种业务场景需要考虑到,比如我想创建一个虚拟机,只提供指定的网络服务(比如dns,http服务等),在家里和公司环境都不需要...

  • 1.区分VirtualBox和具体的虚拟机系统 VirtualBox是个虚拟机管理器,而我们真正使用的操作系统,比如CentOS,XP或Mac X OS,都是具体的虚拟机。在VirtualBox中可以安装多个具体的虚拟机系统。 安装完VirtualBox之后,还需要进一步安装具体的虚拟机实例。 2.区分虚拟机容器和光盘镜...

  • 问题:我们在使用Linux虚拟机的时候经常会出现各种各样的问题,其中的一个问题就是Linux虚拟机连不上网,这是我最近经常遇到的问题,下面提供一种方法解决这个问题 Linux网络设置 打开虚拟机依次单击【System】–>【Preferences】–>【Network Connections】,如下图所示 这个时候会弹出一...

  • virsh 既有命令行模式,也有交互模式,在命令行直接输入 virsh 就进入交互模式, virsh 后面跟命令参数,则是命令行模式; (1)基础操作 --- 命令行下管理虚拟机 virsh list             列出当前宿主机上处于运行状态的虚拟机virsh list --all      列出当前宿主机上所有的虚拟机v...

  • Java是通过java虚拟机来装载和执行编译文件(class文件)的,java虚拟机通过命令java option 来启动,-option为虚拟机参数,通过这些参数可对虚拟机的运行状态进行调整. 一、如何查看参数列表: 虚拟机参数分为基本和扩展两类:在命令行中输入java可得到基本参数列表,java -X则可得到扩展参数列表。 注:以...