转:什么是即时编译(JIT)!?OpenJDK HotSpot VM剖

来源:http://www.sh-fengwen.com 作者:鲜果干果 人气:175 发布时间:2019-10-03
摘要:所谓的编译就是一种翻译器,将源码翻译成为一个可以执行的程序、 重点 应用程序可以选择一个适当的即时编译器来进行接近机器级的性能优化。 分层编译由五层编译构成。 分层编译

所谓的编译就是一种翻译器,将源码翻译成为一个可以执行的程序、

重点

  • 应用程序可以选择一个适当的即时编译器来进行接近机器级的性能优化。
  • 分层编译由五层编译构成。
  • 分层编译提供了极好的启动性能,并指导编译的下一层编译器提供高性能优化。
  • 提供即时编译相关诊断信息的JVM开关。
  • 像内联化和向量化之类的优化进一步增强了性能。

OpenJDK HotSpot Java Virtual Machine被人亲切地称为Java虚拟机或JVM,由两个主要组件构成:执行引擎和运行时。JVM和Java API组成Java运行环境,也称为JRE。

图片 1

在本文中,我们将探讨执行引擎,特别是即时编译,以及OpenJDK HotSpot VM的运行时优化。

图片 2图片 3

JVM的执行引擎和运行时

执行引擎由两个主要组件构成:垃圾回收器(它回收垃圾对象并提供自动的内存或堆管理))以及即时编译器(它把字节码转换为可执行的机器码)。在OpenJDK 8中,“分层的编译器”是默认的服务端编译器。HotSpot也可以通过禁用分层的编译器(-XX:-TieredCompilation)仍然选择不分层的服务端编译器(也称为“C2”)。我们接下来将了解这些编译器的更多内容。

图片 4

JVM的运行时掌控着类的加载、字节码的验证和其他以下列出的重要功能。其中一个功能是“解释”,我们将马上对其进行深入地探讨。你可以点击此处了解JVM运行时的更多内容。

相关厂商内容

浏览器在执行这一行代码前,将代码解析编程成下面这样更低级的可以运行在 CPU 上的语言。这就是浏览器对 javascript 所做的事。

通过探针技术,实现Java应用程序自我防护

图片 5

新Java,新未来

2003 jsmin 是一个简单 C++ 编写的库,就是简单地移除一些没有意义的空格和注释,来减少 javascript 文件的尺寸。然后就是出现了 YUI ,YUI 具有与 jsmin 同样的功能,在此基础引入编码识别。

针对容器化服务的分布式存储实践

图片 6图片 7

分布式关系型数据库架构探索

我们将代码中识别符进行替换为简单的符号。

互联网金融的性能微创新,给你奇思妙想!

相关赞助商

图片 8

QCon全球软件开发大会上海站,2016年10月20日-22日,上海宝华万豪酒店,精彩内容抢先看!

图片 9

图片 10图片 11

自适应的即时编译和运行时优化

JVM系统为Java的“一次编写,随处运行”的能力提供背后的支撑。一个Java程序一旦编译成字节码就可以通过JVM实例运行了。

OpenJDK HotSpot VM转换字节码为可通过“混合模式”执行的可执行的机器码。使用“混合模式”,第一步是解释,它使用一个描述表把字节码转换为汇编码。这是个预定义的表,也称为“模版表”,针对每个字节码指令都有对应的汇编码。

解释在JVM启动时开始,是字节码最慢的执行形式。Java字节码是平台无关的,由它解释编译成可执行的机器码,这种机器码肯定是平台相关的。为了 更快更有效(并适应潜在的平台)地生成机器码,运行时会启动即时编译器例如即时编译器。即时编译器是一个自适应优化器,针对已证明为性能关键的方法予以优 化。为了确定这些性能关键的方法,JVM会针对以下关键指标持续监控这些代码:

  • 方法进入计数,为每个方法分配一个调用计数器。
  • 循环分支(一般称为循环边)计数,为每个已执行的循环分配一个计数器。

如果一个具体方法的方法进入计数和循环边计数超过了由运行时设定的编译临界值,则认定它为性能关键的方法。运行时使用这些指标来判定这些方法本身或 其调用者是否是性能关键的方法。同样,如果一个循环的循环分支计数超过了之前已经指定的临界值(基于编译临界值),那么也会认定它为性能关键的。如果循环 边计数超过它的临界值,那么只有那个循环是编译过的。针对循环的编译优化被称为栈上替换(OSR),因为JVM是在栈上替换编译的代码的。

OpenJDK HotSpot VM有两个不同的编译器,每个都有它自己的编译临界值:

  1. 客户端或C1编译器,它的编译临界值比较低,只是1500,这有助于减少启动时间。
  1. 服务端或C2编译器,它的编译临界值比较高,达到了10000,这有助于针对性能关键的方法生成高度优化的代码,这些方法由应用的关键执行路径来判定是否属于性能关键方法。

2005 年开始弄 ES4 的主要是 Brendan Eich 和开发了 AS3 的 macromedia(后来是收购 macromedia 的 Adobe)M$ 和 Yahoo(主要是 Douglas Crockford)一开始是表示合作的。2007 年,BE 和 Adobe 已经在 ES4 上花了两年时间,但 M$ 和 DC 突然表示觉得 ES4 太过庞大,并添加了太多他们不想要的东西。最终导致 ES4 难产。

分层编译的五个层次

通过引进分层编译,OpenJDK HotSpot VM 用户可以通过使用服务端编译器改进启动时间获得好处。分层编译有五个编译层次。在第0层(解释层)启动,仪表在这一层提供了性能关键方法的信息。很快就会 到达第1层,简单的C1(客户端)编译器,它来优化这段代码。在第一层没有性能优化的信息。下面来到第2层,在此只有少数方法是编译过的(再提一下是通过 客户端编译器)。在第2层,为这些少数方法针对进入次数和循环分支收集性能分析信息。第3层将会看到由客户端编译器编译的所有方法及其全部性能优化信息, 最后的第4层只对C2自身有效,是服务端编译器。

本文由美高梅游戏平台网站发布于鲜果干果,转载请注明出处:转:什么是即时编译(JIT)!?OpenJDK HotSpot VM剖

关键词:

最火资讯