范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

深入浅出JVM之执行引擎的解释执行与编译执行

  本篇文章围绕执行引擎,  深入浅出的解析执行引擎中解释器与编译器的解释执行和编译执行、执行引擎的执行方式、逃逸分析带来的栈上分配、锁消除、标量替换等优化以及即时编译器编译对热点代码的探测  执行引擎
  hotspot执行引擎结构图
  执行引擎分为解释器、JIT即时编译器以及垃圾收集器
  执行引擎通过解释器/即时编译器将字节码指令解释/编译为对应OS上的的机器指令
  本篇文章主要围绕解释器与即时编译器  解释执行与编译执行
  Java虚拟机执行引擎在执行Java代码时,会有两种选择:  解释执行和编译执行
  解释执行:通过  字节码解释器把字节码解析为机器语言  执行
  编译执行:通过  即时编译器产生本地代码  执行
  Class文件中的代码到底是解释执行还是编译执行只有Java虚拟机自己才能判断准确
  编译过程
  经典编译原理:   1.对源码进行词法,语法分析处理 2.把源码转换为抽象语法树
  javac编译器完成了对源码进行词法,语法分析处理为抽象语法树,再遍历抽象语法树生成线性字节码指令流的过程
  剩下的指令流有两种方式执行  由虚拟机内部的字节码解释器去将字节码指令进行逐行解释 (解释执行)  或优化器(即时编译器)优化代码最后生成目标代码 (编译执行)  执行引擎流程图
  解释器与编译器
  解释器
  作用: 对字节码指令逐行解释
  优点: 程序启动,解释器立即解释执行
  缺点: 低效
  即时编译器 (just in time compiler)
  Java中的"编译期"不确定  可能说的是执行javac指令时的前端编译器 (.java->.class)  也可能是后端编译器JIT (字节指令->机器指令)  还可能是AOT编译器(静态提前编译器) (.java->机器指令)
  作用: 将方法编译成机器码缓存到方法区,每次调用该方法执行编译后的机器码
  优点: 即时编译器把代码编译成本地机器码,执行效率高,高效
  缺点: 程序启动时,需要先编译再执行  执行引擎执行方式
  执行引擎执行方式大致分为3种
  -Xint  : 完全采用解释器执行
  -Xcomp  : 优先采用即时编译器执行,解释器是后备选择
  -Xmixed  : 采用解释器 + 即时编译器
  hotspot中有两种JIT即时编译器
  Client模式下的  C1编译器:简单优化,耗时短  (C1优化策略:方法内联,去虚拟化,冗余消除)
  Server模式下的  C2编译器:深度优化,耗时长   (C2主要是逃逸分析的优化:标量替换,锁消除,栈上分配)
  分层编译策略:程序解释执行(不开启逃逸分析)可以触发C1编译,开启逃逸分析可以触发C2编译
  解释器,C1,C2编译器同时工作,热点代码可能被编译多次
  解释器在程序刚刚开始的时候解释执行,不需要承担监控的开销
  C1有着更快的编译速度,能为C2编译优化争取更多时间
  C2用高复杂度算法,编译优化程度很高的代码  逃逸分析带来的优化
  当对象作用域只在某个方法时,不会被外界调用到  ,那么这个对象就不会发生逃逸
  开启逃逸分析后,会分析对象是否发生逃逸,  当不能发生逃逸时会进行栈上分配、锁消除、标量替换等优化  栈上分配内存 //-Xms1G -Xmx1G -XX:+PrintGCDetails   public class StackMemory {      public static void main(String[] args) {          long start = System.currentTimeMillis();            for (int i = 0; i < 10000000; i++) {              memory();          }            System.out.println("花费时间:"+(System.currentTimeMillis()-start)+"ms");  ​          try {              TimeUnit.SECONDS.sleep(1000);          } catch (InterruptedException e) {              e.printStackTrace();          }      }  ​      private static void memory(){          StackMemory memory = new StackMemory();      }  }
  -XX:-DoEscapeAnalysis 花费时间:63ms (未开启逃逸分析)
  -XX:+DoEscapeAnalysis 花费时间:4ms (开启逃逸分析)
  默认开启逃逸分析  锁消除
  同步加锁会带来开销
  锁消除:当加锁对象只作用某个方法时,JIT编译器借助逃逸分析  判断使用的锁对象是不是只能被一个线程访问  ,如果是这种情况下就不需要同步,可以取消这部分代码的同步,提高并发性能  标量替换
  标量: 无法再分解的数据 (基本数据类型)
  聚合量: 还可以再分解的数据 (对象)
  标量替换: JIT借助逃逸分析,该对象不发生逃逸,只作用于某个方法会把该对象(聚合量)拆成若干个成员变量(标量)来代替
  默认开启标量替换   public class ScalarSubstitution {      static class Man{          int age;          int id;  ​          public Man() {          }      }  ​      public static void createInstance(){          Man man = new Man();          man.id = 123;          man.age = 321;      }      public static void main(String[] args) {          long start = System.currentTimeMillis();  ​          for (int i = 0; i < 10000000; i++) {              createInstance();          }  ​          System.out.println("花费时间:"+(System.currentTimeMillis()-start)+"ms");  ​          try {              TimeUnit.SECONDS.sleep(1000);          } catch (InterruptedException e) {              e.printStackTrace();          }      }  }   //-Xmx200m -Xms200m -XX:+PrintGCDetails   //-XX:+DoEscapeAnalysis 设置开启逃逸分析  //-XX:-EliminateAllocations 设置不开启标量替换   //开启逃逸分析 + 关闭标量替换 : 花费时间:93ms  //开启逃逸分析 + 开启标量替换  : 花费时间:6ms  热点代码与热点探测
  JIT编译器并不是编译所有的字节码,JIT编译器只编译热点代码
  热点代码: 被多次调用的方法 或 方法中多次循环的循环体
  栈上替换(OSR): JIT将方法中的热点代码编译为本地机器指令(被多次执行的循环体)
  编译对象都是方法,如果是栈上替换则"入口"在方法的循环体开始那里
  热点探测功能  决定了被调用多少次的方法能成为热点代码
  hotspot采用  基于计数器的热点探测  方法调用计数器 : 统计方法调用次数  回边计数器 : 统计循环体执行循环次数
  方法调用时先判断是否有执行编译后的机器码,有则直接使用方法区的Code cache中的机器码;没有机器码则判断计数器次数是否超过阈值,超过则触发编译,编译后机器码存储在方法区Code cache中使用;最后都没有就使用解释执行  总结
  本篇文章将围绕执行引擎,深入浅出的解析执行引擎中的解释器、即时编译器各自执行的优缺点以及原理
  执行引擎由解释器、即时编译器、垃圾收集器构成,默认情况下使用解释器与编译器的混合方式执行
  即时编译器分为C1、C2编译器,其中C1编译快但优化小,C2开启逃逸分析使用栈上分配、锁消除、标量替换进行优化,编译耗时但是优化大
  即时编译器并不是所有代码都编译,而是使用方法技术和循环计数来将热点代码编译成机器码存放在方法区的Code Cache中
  在混合执行的模式下,解释器、C1、C2编译器同时工作,分层编译

狂飙高启强和唐小龙的一句对话,揭开了这个荒诞社会的现实狂飙这部剧的热度似乎已经盖过了当年的人民的名义,对于高启强这个角色的塑造比祈同伟更加饱满,很奇怪的一个现象,近来的这些扫黑除恶影片里,更有观众缘的人物反而是这些反叛角色,只是因为他巴西名模利马将为国际足联年度最佳球迷颁奖新华社日内瓦2月27日电(记者单磊)国际足联27日宣布,巴西名模阿德里亚娜利马被任命为全球球迷大使,她将在27日晚的国际足联2022年度最佳荣誉颁奖典礼上为最佳球迷奖得主颁奖。国际U20亚洲杯名单公布,安东尼奥会主打什么阵型战术德转朱艺公布U23国家队大名单,国足官网又慢一步。大名单为啥国家队官网没宣,媒体人会提前知晓?如出一辙,扬科维奇刚刚接任国家队主教练,集训大名单也被媒体纷纷勾勒出来。似乎一切又回归福建福州市15个值得推荐的旅游景点鼓山梅里景区山谷梅花俏枝头,各色争艳绽生机鼓山梅里景区位于鼓山钵盂峰前,由古时吸江兰若等景点发展壮大而来。据史料记载,明代时梅里的梅花数量已经颇为繁多,到了清代则达到鼎盛。平潭岛拥朔尔茨押注印度,德国商界却这么说参考消息网2月27日报道(文舒梦王自强)在刚刚过去的周末,德国总理奥拉夫朔尔茨结束了对印度的闪电访问。朔尔茨此时为何访问印度?成效几何?这些问题成为国际社会关注的焦点。德国之声电台周华诚潮州的茶潮州人热情,随便就可以拉住陌生人攀谈,也可以坐下来喝茶,好像是本来就认识的那样。去潮州是哪一年,我记不确切了。似乎是两年前的夏天。去潮州,主要是奔着它的美食去的,潮州牛肉火锅潮州鱼慈利法院第三党支部开展党建引领业务共进主题党日活动红网时刻张家界2月27日讯(通讯员唐柳)为深入学习党的二十大精神,弘扬伟大建党精神,传承红色基因,赓续红色血脉。2月23日,中共慈利县人民法院第三支部全体同志一同走进红军在慈利展览打卡潇湘八景之一双峰县曾国藩故居2月23日下午,湘当自觉自信自强全国网络媒体湖南行之市州和县域经济发展扫描主题宣传采访团走进娄底市双峰县荷叶镇的曾国藩故居,感受国藩故里好家风。曾国藩故居富厚堂始建于清咸丰七年(1小升初初升高有门路?小心掉到坑里入学季临近,不少小道消息传到家长们的耳朵小升初可以提前锁定学校保证进入重点班可以违规办理转学等。不少家长看到这些信息坐不住了,通过电话网络等方式咨询信息真假。长沙市教育局对此进行了搬出大山奔小康麻阳易地扶贫搬迁安置点龙升社区见闻视频加载中编者按近年来,怀化市围绕搬迁群众稳得住有就业逐步能致富目标,接续开展后续扶持工作,奋力写好易地扶贫搬迁后半篇文章。2022年6月,怀化市被国务院授予全国易地扶贫搬迁后续扶山东面向海内外招聘3500名青年博士后招收人数为历年最多!中国山东网感知山东2月28日讯(记者王浩然)近日,省人力资源社会保障厅公开发布2023年度山东省博士后招聘简章,今年山东计划面向海内外公开招聘3500名优秀青年博士,进站从事博士后
如果华为不做手机了,除了苹果,你们会选择什么牌子的手机?除了华为P40Pro,一直都没用过其他华为手机而且华为就算继续做手机,个人也不会用,因为家里几乎都是谷歌原生安卓的产品,飞利浦的OLED欧版电视谷歌的电视盒子甚至是LG的回音壁,都塑料机身金属机身玻璃机身的手机,哪种最好?文小伊评科技手机行业后盖的发展是历经了塑料金属玻璃这三个阶段,如果单从手机行业发展趋势的这个角度上来讲,玻璃材质是目前综合表现最佳的一种材料。但是其他两款材质就真的是一无是处么?当文科生毕业后就业方向有哪些?文科生毕业后的就业方向有很多,我来例举十个主流专业的文科专业大学课程后毕业后的就业单位,希望能帮助你。1。英语大学专业课程基础英语高级英语报刊选读视听口语英语写作翻译理论与实践语言孩子网瘾大,怎样才能纠正过来呢?谢谢悟空小秘邀请回答,孩子网瘾大,怎样才能正过来?象这个事情,是好事坏事,包括大人还在蒙扰状态。不然,怎么继续慢沿,你说坏事,为何越来越小的孩子上瘾。实际上这个现象,就在最近这五六二胎随母姓,逐渐被大家认同,那么这样做的弊端有哪些?没有弊端,只要你认同就好。醒醒吧,已经不是父系社会了,女性地位逐渐提升,男女平等,随谁姓又怎样,都是自己家孩子,一样疼。二个孩子二个姓,不说外界怎么看,就是二家人的祖辈肯定分的很清一个月最多瘦多少斤好?只想健康减肥,有没有过来人推荐一下?减肥一个月瘦几斤比较正常?有的说一个月瘦3斤,有的瘦5斤,还有的瘦7斤,更有甚者说自己瘦了10斤20斤30斤的?减得越快减得越多越好?其实,与其关注瘦多少斤,不如关注如何瘦才最健康妈妈对独生子说我们所有的钱将来都是你的!儿子答那现在就全部给我吧!你怎么看?妈妈对独生子说,我们所有的钱将来都是你的,儿子答那现在就全给我吧。同样的话我和我儿子也说过,只不过是生气时候说的。今年春节儿子放假回家,每天都坐在那玩游戏(电脑游戏)玩手机,也不看俺家宝贝两周岁了,一句话都不说,你说什么也都懂,我们做父母的很着急,什么原因不说话?两种情况一是说话晚即语迟,二是病因造成或叫胎带!按道理两周岁的小童应会说话,一般一周岁多的孩子简单的话就会说了。民间常说小儿三盘六坐八爬嚓,十来个月打哇哇,正常的孩子三个月会盘腿,大家有没有装单反相机的sd卡牌子推荐?推荐闪迪,我一直用这个牌子,从没出过毛病。但购买时要注意两点一是不能贪便宜,闪迪假货较多,市场上良莠不齐,应通过正规渠道购买,卡的外包装上有防伪码,可以查询。二是卡的读写速度要与相如何评价高德地图推出的车道级导航?不开车的人肯定不了解啥是车道级导航顾名思义,这是能够精准定位到每条车道的一个新型导航系统。和传统导航不同,车道级导航最大的不同在于利用高清渲染技术,在屏幕上最大程度地还原真实道路场玉米面和豆面的比例是多少才能蒸出来好吃的窝头?怎么和这个面?玉米面豆面窝窝头营养丰富,香甜可口,做窝窝头,玉米面和豆面的比例21,做出来的窝窝头松软好吃,口感好,做玉米面窝窝头,和面一定要用开水烫面,这样做出来的窝窝头才会口感更好。窝窝头可