当前位置: 首页 > news >正文

珠海华中建设工程有限公司网站中美俄最新军事新闻

珠海华中建设工程有限公司网站,中美俄最新军事新闻,做机械网站,系统开发是做什么的1 锁优化JVM 在加锁的过程中#xff0c;会采用自旋、自适应、锁消除、锁粗化等优化手段来提升代码执行效率。1.1 自旋锁和自适应自旋现在大多的处理器都是多核处理器 #xff0c;如果在多核心处理器#xff0c;有让两个或者以上的线程并行执行#xff0c;我们可以让一个等待…1 锁优化JVM 在加锁的过程中会采用自旋、自适应、锁消除、锁粗化等优化手段来提升代码执行效率。1.1 自旋锁和自适应自旋现在大多的处理器都是多核处理器 如果在多核心处理器有让两个或者以上的线程并行执行我们可以让一个等待线程不放弃处理器的执行时间。设置一个等待超时时间看线程是否能够很快的释放锁在等等待的这段时间可以执行一个空循环让当前线程继续占用 CPU 的时间片。这就是所谓的「自旋锁」。JVM 中可以通过 XX:UseSpinning来开启自旋锁在 JDK1.6 过后默认为我们开启。由于自旋锁的使用会让锁的竞争者占用更多的处理器时间 JVM 规定了一个自旋次数的一个参数。我们可以通过 -XX:PreBlockSping来进行更改默认10次。偏向锁、轻量级锁的状态转化及对象 Mark Word 的关系转换入下图所示偏向锁、轻量级锁的状态转化及对象 Mark Word 的关系1.2 锁消除锁消除是指虚拟机即时编译器在运行时检测到某段需要同步的代码不可能存在共享数据竞争而实施的一种对锁进行消除的优化策略。锁消除的主要判断依据于逃逸分析。如果判断一段代码在堆上所有的数据都不会逃逸出去被别的线程访问到那就把它当作栈上的数据对待认为它们是私有的同步加锁就无需进行。下面是三个字符串 x, y, z 相加的例子无论是从源代码上还是逻辑上都没有进行同步 public String concatStr(String x, String y, String z) {return x y z; }String 是一个不可变的类对字符的链接总是生成新的 String 对象来进行的因此 Javac 编译器会对 String 链接进行自动优化在 JDK5 之前字符串链接会转换为 StringBuffer在 JDK5 之后会转换为 StringBuilder 对象连续的 append()操作我们看看 javac 过后反编译的结果:public String concatStr(String x, String y, String z) {StringBuilder sb new StringBuilder();sb.append(x);sb.append(y);sb.append(z);return sb.toString(); }我们再来看看 javap 反编译的结果javap 反编译的结果这里大家可能会担心 StringBuilder 不是线程安全的的操作会存在线程安全的问题吗这里的答案是不会x y z 操作的优化「经过逃逸分析」过后他的动态作用域被限制在了 concatStr方法内就是说当前实际执行的 StringBuilder 的操作在 concatStr 方法内部「其他的外部线程无法访问」到所以这里「虽然有锁但是可以被安全的消除掉。所以当我们进行编译过后这段代码就会忽略掉所有的同步措施直接执行。」1.3 锁粗化原则上我们在写代码的时候总是推荐将同步块的作用范围限制得尽可能的小--只在共享数据的实际操作作用域中才进行同步这样也是为了使得需要同步的操作尽可能的变少即使存在锁的竞争等待的锁的线程也能很快的获取到锁。大多数情况下上面的原则都是正确的但是如果「一系列的连续操作都是对同一个对象反复加锁和解锁甚至加锁操作时出现在循环体之中」的那即使没有线程的竞争频繁的进行相互操作也会导致不必需要的性能损耗。StringBuffer buffer new StringBuffer(); /** 锁粗化 */ public void append(){buffer.append(aaa).append( bbb).append( ccc); }上面的代码每次调用 buffer.append 方法都需要加锁和解锁如果 JVM 家册到有一串连续的对同一个对象加锁和解锁的操作就会将其合并成一次范围更大的加锁解锁操作即在第一个 append 方法执行的时候进行加锁最后一个 append 方法结束后进行解锁。2 逃逸分析逃逸分析Escape Analysis是一种可能减少有效 Java 程序中同步负载和内存堆分配压力的跨全局函数数据流分析算法。通过逃逸分析 Java Hotspot 编译器能够分析出一个新的对象引用范围从而决定是否要将这个对象分配到堆上「逃逸分析的基本行为就是分析对象的动态作用域。」2.1 方法逃逸当一个对象在方法里面被定义后它可能被外部方法所引用例如调用参数传递到其他方法中这种称为方法逃逸。2.2 线程逃逸当一个对象可能被外部线程访问到比如赋值给其他线程中访问的实例变量这种称为线程逃逸。2.3 通过逃逸分析编译器对代码的优化如果能够证明一个对象不会逃逸到到方法外或线程外其他线程方法或者线程无法通过任何方法访问该变量或者逃逸程度比较低只逃逸出方法而不逃逸出线程则可以对这个对象采用不同程度的优化栈上分配Stack Allocations完全不会逃逸的局部变量和不会逃逸出线程的对象采用栈上分配对象就会跟随方法的结束自动销毁。以减少垃圾回收器的压力。标量替换Scalar Replacement有个对象可能不需要作为一个连续的存储结果存储也能被访问到那么对象的部分或者全部可以不存储在内存而是存储在 CPU 寄存器中。同步消除Synchronization Elimination如果一个对象发现只能在一个线程访问到那么这个对象的操作可以考虑不同步。整理好的Java面试资料推荐下载最全的java面试题库Java核心知识点整理
http://www.w-s-a.com/news/391124/

相关文章:

  • 做网站需要记哪些代码企业网站建设思路
  • 重庆自助建站模板网络服务器配置与管理
  • 外贸网站怎样做小程序买量平台
  • 中山精品网站建设机构海外留学网站建设方案
  • 长春网站建设工作如何取消wordpress页脚
  • 忻府网站建设排名网络管理系统官网
  • 张家港外贸网站建设国医堂网站平台建设
  • 水冶那里有做网站的对于网站链接优化有哪些建议
  • 宝安中心地铁站是几号线化妆品网站做的好的
  • 海宁营销型网站设计企业融资是什么意思
  • 淘宝客做网站要钱吗网站开发试题库
  • 10g空间网站做视频网站网站建设找超速云
  • 一元购网站怎么做企业网站源码cms
  • 域名不变 网站改版临沂企业网站建站模板
  • 天河网站建设信科网络外包公司和公司直招哪个好
  • 网站制作哈尔滨聊天系统源码
  • 网站建设朋友圈素材青白江建设网站
  • 红酒网站设计软件设计文档
  • 如何创建网站目录网站申请支付宝接口
  • 网站做区块链然后往里面投钱品牌设计公司收费标准
  • 2022互联网+创新创业项目呼和浩特企业网站排名优化
  • 电子商务类网站建设山西自助建站系统怎么用
  • odoo做网站网站设置专栏有什么好处
  • 局域网内个人网站建设查询企业的网站有哪些
  • 网站建设属于技术开发吗网页制作团队
  • 做家常菜的网站哪个好哪个网站做图片外链
  • 眼科医院网站设计怎么做6深圳宝安是什么风险等级
  • 网站制作容易吗logo免费生成网站
  • 建设厅官方网站下载专区网络托管公司
  • 祥云平台官方网站网线制作实验原理