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

攀枝花建设规划网站网站后台树形菜单样式

攀枝花建设规划网站,网站后台树形菜单样式,长沙seo优化公司哪家好,用vs2013做网站登录文章目录 锁优化自旋锁和自适应自旋锁消除锁粗化逃逸分析方法逃逸线程逃逸通过逃逸分析#xff0c;编译器对代码的优化 锁优化 jvm 在加锁的过程中#xff0c;会采用自旋、自适应、锁消除、锁粗化等优化手段来提升代码执行效率。 自旋锁和自适应自旋 现在大多的处理器都是… 文章目录 锁优化自旋锁和自适应自旋锁消除锁粗化逃逸分析方法逃逸线程逃逸通过逃逸分析编译器对代码的优化 锁优化 jvm 在加锁的过程中会采用自旋、自适应、锁消除、锁粗化等优化手段来提升代码执行效率。 自旋锁和自适应自旋 现在大多的处理器都是多核处理器 如果在多核心处理器有让两个或者以上的线程并行执行我们可以让一个等待线程不放弃处理器的执行时间。设置一个等待超时时间看线程是否能够很快的释放锁在等等待的这段时间可以执行一个空循环让当前线程继续占用 CPU 的时间片。这就是所谓的「自旋锁」。 JVM 中可以通过 XX:UseSpinning来开启自旋锁在 JDK1.6 过后默认为我们开启。由于自旋锁的使用会让锁的竞争者占用更多的处理器时间 JVM 规定了一个自旋次数的一个参数。我们可以通过 -XX:PreBlockSping来进行更改默认10次。 偏向锁、轻量级锁的状态转化及对象 Mark Word 的关系转换入下图所示 锁消除 锁消除是指虚拟机即时编译器在运行时检测到某段需要同步的代码不可能存在共享数据竞争而实施的一种对锁进行消除的优化策略。锁消除的主要判断依据于逃逸分析。如果判断一段代码在堆上所有的数据都不会逃逸出去被别的线程访问到那就把它当作栈上的数据对待认为它们是私有的同步加锁就无需进行。 下面是三个字符串 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 方法内部「其他的外部线程无法访问」到所以这里「虽然有锁但是可以被安全的消除掉。所以当我们进行编译过后这段代码就会忽略掉所有的同步措施直接执行。」 锁粗化 原则上我们在写代码的时候总是推荐将同步块的作用范围限制得尽可能的小–只在共享数据的实际操作作用域中才进行同步这样也是为了使得需要同步的操作尽可能的变少即使存在锁的竞争等待的锁的线程也能很快的获取到锁。大多数情况下上面的原则都是正确的但是如果「一系列的连续操作都是对同一个对象反复加锁和解锁甚至加锁操作时出现在循环体之中」的那即使没有线程的竞争频繁的进行相互操作也会导致不必需要的性能损耗 StringBuffer buffer new StringBuffer(); /** 锁粗化 */ public void append(){buffer.append(aaa).append( bbb).append( ccc); }上面的代码每次调用 buffer.append 方法都需要加锁和解锁如果 JVM 家册到有一串连续的对同一个对象加锁和解锁的操作就会将其合并成一次范围更大的加锁解锁操作即在第一个 append 方法执行的时候进行加锁最后一个 append 方法结束后进行解锁。 逃逸分析 逃逸分析Escape Analysis是一种可能减少有效 Java 程序中同步负载和内存堆分配压力的跨全局函数数据流分析算法。通过逃逸分析 Java Hotspot 编译器能够分析出一个新的对象引用范围从而决定是否要将这个对象分配到堆上「逃逸分析的基本行为就是分析对象的动态作用域。」 方法逃逸 当一个对象在方法里面被定义后它可能被外部方法所引用例如调用参数传递到其他方法中这种称为方法逃逸。 线程逃逸 当一个对象可能被外部线程访问到比如赋值给其他线程中访问的实例变量这种称为线程逃逸。 通过逃逸分析编译器对代码的优化 如果能够证明一个对象不会逃逸到到方法外或线程外其他线程方法或者线程无法通过任何方法访问该变量或者逃逸程度比较低只逃逸出方法而不逃逸出线程则可以对这个对象采用不同程度的优化 1、栈上分配Stack Allocations完全不会逃逸的局部变量和不会逃逸出线程的对象采用栈上分配对象就会跟随方法的结束自动销毁。以减少垃圾回收器的压力。 2、标量替换Scalar Replacement有个对象可能不需要作为一个连续的存储结果存储也能被访问到那么对象的部分或者全部可以不存储在内存而是存储在 CPU 寄存器中。 3、同步消除Synchronization Elimination如果一个对象发现只能在一个线程访问到那么这个对象的操作可以考虑不同步。
http://www.hkea.cn/news/14393331/

相关文章:

  • 网站建设基础策划书网站如何做360度全景
  • 集运网站建设推广衣服的软文
  • 网站模板模仿400电话安装佛山营销网站建设
  • 玉器哪家网站做的好做网站的目的和要求
  • 文化产业协会网站源码中国进出口数据网
  • 学院 网站 两学一做房地产营销门户网站开发
  • 长春免费建站wordpress浮动视频
  • 网站有没有做网站地图怎么看找专业做网站的公司
  • 网站建设中英语青岛网站建设 上流
  • 南通宏仁建设工程有限公司招聘网站上海中风险地区地图
  • 网站舆情监控怎么做步骤的骤怎么写
  • 网站开发兼职网站wordpress博客广告代码
  • 网站google排名出现过几分钟泰拳图片做网站用
  • 北京怀柔网站建设公司制作网页游戏的软件
  • 建网站的公司08服务器做网站
  • 企业网站建设思路推销网站话术
  • 旅游景点网站设计太原西北建设有限公司网站
  • 提供中山精品网站建设建设网站的好处和优点
  • 个人建设网站需要什么证件吗百度手机应用市场
  • 昆明建设工程质量备案在哪个网站小学文化学网站开发
  • 郑州做网站优化电话新网站如何推广
  • 网站建设shundeitphp和wordpress
  • 怎样做运营一个网站做微商网站的软文
  • 天津河西做网站vps网站无法通过ip访问
  • 网站需求说明佛山网站建设推广服务
  • 免费seo网站诊断免费flashfxp上传了网站
  • 在哪里可以改动网站标题深圳做网站小程序
  • 特乐网站建设企业宣传软文
  • 免费建站网站有哪些网站收录最好的方法
  • 找手工活做注册网站水果网络营销方案