JVM编译优化技术:公共子表达式消除。
语言无关的经典优化技术之一:公共子表达式消除。
公共子表达式消除是一个普遍应用于各种编译器的经典优化技术,他的含义是:如果一个表达式E已经计算过了,并且从先前的计算到现在E中所有变量的值都没有发生变化,那么E的这次出现就成为了公共子表达式。对于这种表达式,没有必要花时间再对他进行计算,只需要直接用前面计算过的表达式结果代替E就可以了。如果这种优化仅限于程序的基本块内,便称为局部公共子表达式消除(Local Common Subexpression Elimination),如果这种优化范围涵盖了多个基本块,那就称为全局公共子表达式消除(Global Common Subexpression Elimination)。举个简单的例子来说明他的优化过程,假设存在如下代码:
int d = (c*b)*12+a+(a+b*c);
如果这段代码交给Javac编译器则不会进行任何优化,那生成的代码如下所示,是完全遵照Java源码的写法直译而成的。
iload_2 // b
imul // 计算b*c
bipush 12 // 推入12
imul // 计算(c*b)*12
iload_1 // a
iadd // 计算(c*b)*12+a
iload_1 // a
iload_2 // b
iload_3 // c
imul // 计算b*c
iadd // 计算a+b*c
iadd // 计算(c*b)*12+a+(a+b*c)
istore 4
当这段代码进入到虚拟机即时编译器后,他将进行如下优化:编译器检测到”c*b“与”b*c“是一样的表达式,而且在计算期间b与c的值是不变的。因此,这条表达式就可能被视为:
int d = E*12+a+(a+E);
这时,编译器还可能(取决于哪种虚拟机的编译器以及具体的上下文而定)进行另外一种优化:代数化简(Algebraic Simplification),把表达式变为:
int d = E*13+a*2;
表达式进行变换之后,再计算起来就可以节省一些时间了。
JVM编译优化技术:公共子表达式消除。相关推荐
- 【编译原理笔记19】代码优化: 支配结点和回边,自然循环及其识别,删除全局公共子表达式和复制语句,代码移动,作用于归纳变量的强度削弱,归纳变量的删除
本次笔记内容: 8-10 支配结点和回边 8-11 自然循环及其识别 8-12 删除全局工工资表达式和赋值语句 8-13 代码移动 8-14 作用于归纳变量的强度削弱 8-15 归纳变量的删除 本节课 ...
- 自动矢量化编译优化技术(Automatic Vectorization)
自动矢量化技术,是编译器代码优化技术的一种,即在不改变C/C++源代码的情况下,自动编译产生使用单指令多数据(Single Instruction Multiple Data,SIMD)指令集的二进制 ...
- 「JVM 编译优化」javac 编译器源码解读
Java 的编译过程 前端编译: 编译器的前端,将 Java 文件转变成 Class 文件的过程:如 JDK 的 javac.Eclipse JDT 中的增量式编译器 ECJ: 即使编译: JIT,J ...
- JVM成神之路-HotSpot虚拟机-编译原理、JIT、编译优化
Java编译原理 什么是字节码.机器码.本地代码? 字节码是指平常所了解的 .class 文件,Java 代码通过 javac 命令编译成字节码 机器码和本地代码都是指机器可以直接识别运行的代码,也就 ...
- JVM编译过程与后期的优化
文章目录 一.JVM编译过程 二.即时编译器优化(后期优化) 1.编译器 2.编译触发的条件 3.编译优化技术(挑重要的讲几个) 三.后记 一.JVM编译过程 引用自博客:https://blog.c ...
- JIT 即时编译及优化技术
JIT 即时编译及优化技术 前言 即时编译 热点代码探测 编译优化技术 语言无关的经典优化技术之一:公共子表达式消除 语言相关的经典优化技术之一:数组范围检查消除 最重要的优化技术之一:方法内联 最前 ...
- Java JVM 虚拟机编译器性能增强优化技术
专栏原创出处:github-源笔记文件 ,github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明. Java JVM-虚拟机专栏系列笔记,系统性学习可访问个人复盘笔记-技术博客 Java ...
- 理解java虚拟机工作后了解吗,【深入理解JAVA虚拟机】第4部分.程序编译与代码优化.2.运行期优化。这章提到的具体的优化技术,应该对以后做性能工作会有帮助。...
1.概述 Java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为"热点代码"(Hot Spot C ...
- 15个问题自查你真的了解java编译优化吗?
摘要:为什么C++的编译速度会比java慢很多?二者运行程序的速度差异在哪? 了解了java的早期和晚期过程,就能理解这个问题了. 本文分享自华为云社区<你真的了解java编译优化吗?15个问题 ...
最新文章
- c语言整数检验,C程序整数缺陷的检测与修复
- SVN使用过程中遇到的一些问题
- linux 打开大文件命令,linux查看大文本文件命令
- 服务器上出现应用程序错误。此应用程序的当前自定义错误设置禁止
- 如何注册Spring Bean
- x264 编码器选项分析 (x264 Codec Strong and Weak Points) 2
- Linux查看安装了哪些软件
- Postgresql_最新版11.2源码编译安装
- 传统制造业和工业如何和大数据进行结合
- Python语言程序设计 嵩天
- 【Love2d从青铜到王者】第十五篇:Love2d之角度和距离(Angles and distance)
- 女赛--Girl Love Value (01背包)
- QT 怎么获取linux本机的IP地址?
- Nature子刊:教你零基础开展微生物组数据分析和可视化
- [ISCC 2021]部分wp
- 制作WIN10U盘启动盘
- 利用勾子监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理
- Xilinx 7系FPGA总览
- AVPlayer进行视频播放
- WheelTec ROS 机器人小车 ROS2 编码编译解决