晚期(运行期)优化

  即时编译器(Just In Time Compiler)为了提高执行效率将热点代码编译成与本地平台相关的机器码,并进行各种层次的优化的编译器。它并不是虚拟机必需的部分,但其性能的好坏、代码优化程度的高低却是衡量一款商用虚拟机优秀与否的最关键指标之一,也是虚拟机中最核心且最能体现虚拟机技术水平的部分。

HotSpot虚拟机内的即时编译器

HotSpot虚拟机内同时包含解释器与编译器,两者各有优势。优势体现如下:

1、当程序需要迅速启动和执行的时候,解释器可以首先发挥作用,省去编译的时间,立即执行;在程序运行后,随着时间的推移,编译器逐渐发挥作用,把越来越多的代码编译成本地代码之后,可以获取更高的执行效率。

2、当程序运行环境中内存资源限制较大,可以使用解释执行节约内存,反之可以使用编译执行来提升效率。

3、解释器还可以作为编译器激进优化时的一个“逃生门”,让编译器根据概率选择一些大多数时候都能提升运行速度的优化手段。

编译优化技术

编译优化技术的代码优化变换是建立在代码的某种中间表示或机器码之上,绝不是建立在java源码之上的。最有代表性的优化技术如下:

1、公共子表达式消除:如果一个表达式E已经计算过了,并且从先前的计算到现在E中所有变量的值都没有发生变化,那么E的这次出现就成为了公共子表达式。

2、数组边界检查消除:java语言是一门动态安全的语言,每次对数组的读写访问时都会执行数组是否越界检查。

3、方法内联:可以消除方法调用的成本,为其他优化手段建立良好的基础

4、逃逸分析:目前java虚拟机中比较前沿的优化技术,不是直接优化代码,只为其他优化手段提供依据的分析技术。其基本行为就是分析对象动态作用域:当一个对象在方法中被定义后,它可能被外部方法所引用,例如作为调用参数传递到其他方法中,称为逃逸。甚至还有可能被外部线程访问到,譬如赋值给类变量或可以在其他线程中访问的实例变量,称为线程逃逸。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏跨界架构师

再谈开发中的代码规范

  随着公司的业务发展,项目越来越多,越来越大,复杂性也越来越高。查找一个BUG变得越发抓狂;新人熟悉一块代码也变得越发困难。有的时候顺手写下的一行充满坏味道的...

834
来自专栏斑斓

代码诊所的第二次诊断

几年前,我有机会负责一个项目的咨询。团队很小,目标是对旧有系统的后端用Java改写,而团队的开发人员全为C程序员。我的工作职责是负责项目设计、开发,以及担任项目...

3465
来自专栏前端布道

Angular开发实践(五):深入解析变化监测

什么是变化监测 在使用 Angular 进行开发中,我们常用到 Angular 中的绑定——模型到视图的输入绑定、视图到模型的输出绑定以及视图与模型的双向绑定。...

3948
来自专栏Ryan Miao

java设计模式(六)--观察者模式

转载:设计模式(中文-文字版) 目录: 简单目标任务实现 观察者模式介绍 观察者模式代码实现 观察者模式是JDK中使用最多的模式之一,非常有用。我们也会一并介绍...

42110
来自专栏醒者呆

融会贯通——最常用的面向对象设计原则“合成复用原则”

复用一个类的时候,多使用对象的组合/聚合的关联关系,而不是继承。 之前提到的“依赖倒转原则”,是以里氏代换原则为基础的实现开闭原则目标的手段,这一条路线涉及到的...

2798
来自专栏牛客网

微店2016技术岗面试题

第一部分 简答(请选择一个题目解答) 1.请写出C/C++ 语言中的相关问题。 A. 请简述C/C++ 语言中找空间和对空间的主要区别。 B. C++处理异常可...

34112
来自专栏二进制文集

Java 与 C/C++ 的编译器对比

这两天重温了周志明的《深入理解Java虚拟机》第2版,发现第11章第4节关于 Java 编译器的内容写得太棒了~本文完全摘自《深入理解Java虚拟机》第2版 0...

876
来自专栏撸码那些事

【抽象那些事】不必要的抽象

抽象实体应该具有单一而重要的职责。如果创建的没必要或是只是为了方便,它们承担的职责微不足道,甚至没有承担任何职责,这违反了抽象原则。

1147
来自专栏搜云库

《深入理解Java虚拟机》(一)Java虚拟机发展史

Java虚拟机发展史 注:本文大部分摘自《深入理解Java虚拟机(第二版)》 作为一名Java开发人员,不能局限于Java语言规范,更需要对Java虚拟机规范有...

20010
来自专栏阿杜的世界

《Java 8实战》阅读笔记(1)

给方法listFiles传递方法引用**File::isHidden**

824

扫码关注云+社区