Java JIT编译技术

标签: Java | 发表时间:2012-03-31 11:36 | 作者:Hins_pan
出处:http://hi.baidu.com/hins%5Fpan

        JIT是just in time,即时编译技术。使用该技术,能够加速java程序的执行速度。下面,就对该技术做个简单的讲解。

        首先,我们大家都知道,通常javac将程序源代码编译,转换成java字节码,JVM通过解释字节码将其翻译成对应的机器指令,逐条读入,逐条解释翻译。很显然,经过解释执行,其执行速度必然会比可执行的二进制字节码程序慢。为了提高执行速度,引入了JIT技术。

        在运行时JIT会把翻译过的机器码保存起来,已备下次使用,因此从理论上来说,采用该JIT技术可以,可以接近以前纯编译技术。下面我看看,JIT的工作过程。


        当JIT编译启用时(默认是启用的),JVM读入.class文件解释后,将其发给JIT编译器。JIT编译器将字节码编译成本机机器代码,下图展示了该过程。


       通过上面的解释,我们了解了JIT的工作原理及过程,同样也发现了个问题,由于JIT对每条字节码都进行编译,造成了编译过程负担过重。为了避免这种情况,当前的JIT只对经常执行的字节码进行编译,如循环等。

      需要说明的是,JIT并不总是奏效,不能期望JIT一定能够加速你代码执行的速度,更糟糕的是她有可能降低代码的执行速度。这取决于你的代码结构,当然很多情况下我们还是能够如愿以偿的。


类别: Java  查看评论

相关 [java jit 编译] 推荐:

Java JIT编译技术

- - 小彰
        JIT是just in time,即时编译技术. 使用该技术,能够加速java程序的执行速度. 下面,就对该技术做个简单的讲解.         首先,我们大家都知道,通常javac将程序源代码编译,转换成java字节码,JVM通过解释字节码将其翻译成对应的机器指令,逐条读入,逐条解释翻译.

Java HotSpot VM中的JIT编译

- - 并发编程网 - ifeve.com
原文地址 译者:郭蕾 校对:丁一. 本文是Java HotSpot VM and just-in-time(JIT) compilation系列的第一篇. Java HotSpot虚拟机是Oracle收购Sun时获得的,JVM和开源的OpenJDK都是以此虚拟机为基础发展的. 如同其它虚拟机,HotSpot虚拟机为字节码提供了一个运行时环境.

java编译原理

- - 编程语言 - ITeye博客
1. 关于动态加载机制 . 学习Java比C++更容易理解OOP的思想,毕竟C++还混合了不少面向过程的成分. 很多人都能背出来Java语言的特点,所谓的动态加载机制等等. 当然概念往往是先记住而后消化的,可有多少人真正去体会过动态加载的机制,试图去寻找过其中的细节呢? 提供大家一个方法: 在命令行窗口运行Java程序的时候,加上这个很有用的参数: java verbose *.class .

开发、测试java程序时,尽可能使用-server(win上)选项,其他平台使用类似选项,启用JIT优化

- - ITeye博客
在-client模式下会很快结束,测试不出问题. 但通过java -server Visibility来运行(win上),就会死循环. 所以,为避免程序(尤其是多线程的)运行在与开发环境不同的jvm上因内存可见性、指令重排序等带来的诸如活性问题,开发、测试时应尽可能始终启用JIT优化,尽早发现问题.

[原]Java动态编译

- - 文武天下
下图展示了从源代码到可运行程序的过程,正常情况下先编译(明文源码到字节码),后执行(JVM加载字节码,获得类模板,实例化,方法使用). 本文来探索下当程序已经开始执行,但在.class甚至.java还未就绪的情况下,程序如何获得指定的实现. 这就是我们下面的主题,动态编译. JavaCompiler: 负责读取源代码,编译诊断,输出class.

JS特性性能缺陷及JIT的解决方案

- - 博客园_首页
        拜读了David的《 Know Your Engines: How to Make Your JavaScript Fast》,David是Mozilla的JS引擎工程师,文章主要介绍了JIT与GC原理,以及如何根据某些基本原理,优化js代码的执行效率,虽然是老文了,但对我来说仍受益匪浅.

Facebook已将HHVM/JIT用于其开发和产品中

- - InfoQ cn
Facebook宣布,他们已经在产品中使用了 HHVM这款支持JIT编译的HipHop虚拟机,这种方案统一了开发和部署两种环境,同时为开发者带来了显著的性能收益. 因为页面加载的性能问题,Facebook决定实现一套从PHP向C++转换的工具链, 该工具链即 HipHop PHP,已于2010年开源,其中的编译器称为HPHPc.

Java 程序的编译,加载 和 执行

- Ben - 弯曲评论
[ 在这个 slides 里边, 莫枢 (Kris Mok) 介绍了 java & java run-time system 的结构. Managed language 提供了更高一级的抽象,提高了程序员的生产力,但是从 application code 到  ISA 的中间层也更厚,比如程序员非常容易把C代码对应到优化后的汇编,但是判断出java 程序对应的汇编就相对难一些.

Java程序的编译,加载与执行

- 高春辉 - 弯曲评论

自己动手实现springboot运行时执行java源码(运行时编译、加载、注册bean、调用)

- - 掘金 后端
  看来断点、单步调试还不够硬核,根本没多少人看,这次再来个硬核的. 依然是由于apaas平台越来越流行了,如果apaas平台选择了java语言作为平台内的业务代码,那么不仅仅面临着IDE外的断点、单步调试,还面临着为了实现预览效果,需要将写好的java源码动态的装载到spring容器中然后调用源码内的某个方法.