晚期(运行期)优化

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

HotSpot虚拟机内的即时编译器

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

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

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

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

编译优化技术

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

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

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

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

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一个会写诗的程序员的博客

“一切皆是映射” (光剑)

这句话背后的意义不仅仅在于函数式编程。量子力学说过,事物只在相互作用时才出现。“事物”即“一切”,“相互作用”即“映射”。这是“一切皆是映射”(光剑)这句话背后...

622
来自专栏liulun

跟面试官聊.NET垃圾收集,直刺面试官G点

装逼的面试官和装逼的程序员 我面试别人的时候,经常是按这种路子来面试: 看简历和面试题,从简历和面试题上找到一些技术点,然后跟应聘者聊。 聊某个技术点的时候,应...

1746
来自专栏杨建荣的学习笔记

两道简单的oracle题目(r5笔记第91天)

最近一个朋友想让我帮他一个忙,看似是一个很简单的小忙,就是出两道l题,一道可以难一些,可以通过这道题看出一个开发人员的数据库水平,sql或者pl/sql都可以,...

2498
来自专栏java一日一条

关于 Java 的10个谎言

下面的这些都算是比较高级的问题了,面试中一般也很少问到,因为它们可能会把面试者拒之门外。不过你可以自己找个时间来实践一下。

421
来自专栏Java编程

写出优质Java代码的4个技巧

如果现在要求对你写的Java代码进行优化,那你会怎么做呢?作者在本文介绍了可以提高系统性能以及代码可读性的四种方法,如果你对此感兴趣,就让我们一起来看看吧。

1.1K0
来自专栏Java学习网

优秀程序员的 18 大法则

优秀程序员的 18 大法则 经过多年的积累,我发现,下面这些基本的指导法则,可以帮助我成为一个更加高效的程序员。 程序设计法则,与设计和工程的原理密切相关。下面...

2225
来自专栏二进制文集

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

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

706
来自专栏Jimoer

Java设计模式学习记录-享元模式

享元模式也是一种结构型模式,这篇是介绍结构型模式的最后一篇了(因为代理模式很早之前就已经写过了)。享元模式采用一个共享来避免大量拥有相同内容对象的开销。这种开销...

361
来自专栏Web项目聚集地

Oracle知识点总结(一)

这里用1,也是为了方便,当然如果数据量较大的话,也可以提高速度,因为写count(*)的话会所有列扫描,这里用1的话或者用字段名的话,只扫描你写的那个列其实1就...

671
来自专栏java一日一条

书写高质量代码之状态维护

我们第一眼接触新事物所触发的思考方式,决定了以后我们看待这样事物的角度,进而影响更深层次的理解和行为。

391

扫码关注云+社区