晚期(运行期)优化

  1.为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(Just In Time,JIT编译器)。

  2.Hotspot虚拟机内的即时编译器

   (1)解释器与编译器

    主流的商用虚拟机,如Hotspot,J9等,都同时包含解释器和编译器。

    解释器与编译器两者各有优势:当程序需要快速启动和执行的时候,解释器可以首先发挥作用,省去编译的时间,立即执行。在程序运行后,随着时间得推移,编译器组件发挥作用,把越来越多的代码编译成本地代码,可以获取更高的执行效率。

    Hotspot虚拟机中内置了两个编译器,分别称为Client Compiler和Server Compiler,简称C1编译器和C2编译器,也叫Opto编译器。

    目前主流的Hotspot虚拟机中,默认采用解释器与其中一个编译器直接配合的方式工作。用户可以只用“-client”或“-server”参数去强制指定虚拟机运行在Client模式或Server模式。

    可以使用参数“-Xint”强制虚拟机运行于“解释模式”。

    可以使用参数“-Xcomp”强制虚拟机运行于“编译模式”。

    分层编译:

    a) 第0层:程序解释执行,解释器不启动性能监控功能,可以触发第1层 编译

    b) 第1层:也称为C1编译,将字节码编译为本地代码,进行简单,可靠的优化,如有必要将加入性能监控的逻辑

    c) 第2层(或2层以上):也称为C2编译,也是将字节码编译成本地代码,但是会启用一些编译耗时较低的优化,甚至会根据性能监控信息进行一些不可靠的激进优化

    (2)编译对象与触发条件

      热点探测判定方式:基于采样的热点探测和计数的热点探测。

      Hotspot虚拟机采用基于计数器的热点探测方法,它为每个方法准备了两类计数器:方法调用计数器和回收计数器。

        

             

    (3)编译过程

      Client Compiler是一个简单快速地三段编译器,主要的关注点在于局部性的优化,而放弃了许多耗时较长的局部优化手段。

      第一阶段,一个平台独立的前端将字节构造成一种高级中间代码表示(HIR)

      第二阶段,一个平台相关的后端从HIR中产生低级中间代码表示(LIR)

      最后阶段,在平台相关的后端使用线性扫描算法在LIR上分配寄存器,并在LIR上做窥孔优化,然后产生机器代码

      Server Compiler是专门面向服务端的典型用用并为服务端的性能配置特别调整过的编译器,也是一个充分优化过的高级编译器,它会执行所有经典的优化动作。

编译优化技术

  1.优化技术

  • 编译器策略:延迟编译,分层编译,栈上替换,延迟优化,程序依赖图表示,静态单赋值表示。
  • 基于性能监控的优化技术:乐观空值断言,乐观类型断言,乐观类型增强,乐观数组增强,裁剪未被选择的分支,乐观的多态内联。分支频率预测,调用频率预测
  • 基于证据的优化技术:精确性推断,内存值推断,内存值跟踪,常量折叠,重组,操作符退化,空值检查消除。类型检测退化,类型检测消除,代数化简,公共子表达式消除
  • 数据流敏感重写:条件常量传播,基于六承载的类型缩减转换,无用代码消除
  • 语言相关的优化技术:类型继承关系分析,去虚拟机化,符号常量传播,自动装箱,消除逃逸分析,锁消除,锁膨胀,消除反射
  • 内存及代码位置交换:表达式提升,表达式下沉,冗余存储消除,相邻存储合并,交汇点分离
  • 循环变换:循环展开,循环剥离,安全点消除,迭代分离,范围检查消除
  • 局部代码调整:内联,全局代码提升,基于热度的代码分离,Switch调整
  • 控制流图变换:本地代码编排,本独代码封包,延迟槽填充,着色图寄存器分配,线性扫描寄存器分配,复写聚合,常量分裂,复写移除,地址模式匹配。指令窥孔优化,基于确定有限状态机的代码生成

  2.公共子表达式

  优化仅限于程序的基本快内,便称为内部公共子表达式消除。

  如果优化的范围涵盖了多个基本块,就称为全局公共子表达式消除。

  

JVM-程序编译与代码晚期(运行期)优化的更多相关文章

  1. 【深入理解JAVA虚拟机】第4部分.程序编译与代码优化.2.运行期优化。这章提到的具体的优化技术,应该对以后做性能工作会有帮助。

    1.概述 Java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”(Hot Spot Code). 为了提高 ...

  2. JVM原理:4 运行期优化

    JVM运行期优化 Java程序在运行的期间,可能会有某个方法或者代码块的运行特别频繁时,就会把这些代码认定为“热点代码”.为了提高热点代码的执行效率,在运行时JVM会将这些代码编译成与本地平台相关的机 ...

  3. jvm虚拟机笔记<六> 运行期优化

    这节我们总结一下JVM运行期的优化问题. https://www.cnblogs.com/zhouyuqin/p/5224573.html JVM运行期优化 即时编译器(JIT) 编译对象与触发条件 ...

  4. 深入了解JVM虚拟机8:Java的编译期优化与运行期优化

    java编译期优化 java语言的编译期其实是一段不确定的操作过程,因为它可以分为三类编译过程:1.前端编译:把.java文件转变为.class文件2.后端编译:把字节码转变为机器码3.静态提前编译: ...

  5. C++编译期多态与运行期多态

    前言 今日的C++不再是个单纯的"带类的C"语言,它已经发展成为一个多种次语言所组成的语言集合,其中泛型编程与基于它的STL是C++发展中最为出彩的那部分.在面向对象C++编程中, ...

  6. JIT晚期(运行期)

    在部分的商用虚拟机(Sun HotSpot.IBM J9)中,Java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为& ...

  7. Java基础知识强化之IO流笔记05:try...catch...finally包含的代码是运行期的

    1. 代码示例: 上面看到的第13行:  Date  d = null;(这里必须初始化) 第14~20行使用try...catch...finally包含代码,这里的代码已经变成运行期代码.此时我们 ...

  8. Java虚拟机11:运行期优化

    前言 http://www.cnblogs.com/xrq730/p/4839245.html,HotSpot采用的是解释器+编译器并存的架构,之前的这篇文章里面已经讲过了,本文只是把即时编译器这块再 ...

  9. Java虚拟机15:运行期优化

    前言 HotSpot采用的是解释器+编译器并存的架构,之前的这篇文章里面已经讲过了,本文只是把即时编译器这块再讲得具体一点而已.当然,其实本文的内容也没多大意义,90%都是概念上的东西,对于实际开发. ...

随机推荐

  1. notepad++代码自动补全功能

    可以代码自动补全功能,默认他是没有开启这个功能的,在首选项->备份与自动完成 里面有自动完成这一个设置,可以设置单词补全,也可以设置函数补全,这样写代码就快多了

  2. 随机获取数据库中的某一条数据(基于yii2框架开发)

    注意: 使用PHP函数array_rand()得到的是这个数组中的那个值相对应的下标键值,需要配合原来的数组进行,例如: $rand_keys = array_rand($ids,1); $id = ...

  3. 指定页面配置https(apache/tomcat)

    apache/tomcat服务器下配置https         apache下配置https:             首先在网站根目录下,找到.htaccess文件(如果没有则新建),apache ...

  4. Linux phpbb论坛的安装(中文版)

    1:建立文件夹

  5. Tsung安装与使用

    Tsung安装与使用 Tsung安装与使用的详细说明,包括测试场景的脚本配置说明 Ray 2013/11/11   目录 安装tsung Tsung运行环境安装... Tsung安装... 使用Tsu ...

  6. JavaScript高级应用(二)(转)

    1.组件是否安装 //组件是否安装 isComponentInstalled("{6B053A4B-A7EC-4D3D-4567-B8FF8A1A5739}", "com ...

  7. Giving Data Backup Option in Oracle Forms 6i

    Suppose you want to give the data backup option in Oracle Forms application to some client users, wh ...

  8. iOS开发数据库篇—SQLite简单介绍

    iOS开发数据库篇—SQLite简单介绍 一.离线缓存 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等. 说明:离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式 (1 ...

  9. 16s及宏基因组测序公司资源--20161104

    锐羿基因: http://www.realbio.cn/index.php?c=list&cs=keyandongtai& 科研动态更新及时 青岛过程能源所: http://www.c ...

  10. Mysqldump源码分析

    版权声明:本文由王珏原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/261 来源:腾云阁 https://www.qclou ...