java编译过程入门介绍和java之什么是 JIT

java编译过程

C,C++ 语言编译,其实就是通过编译器,直接把代码变成机器码,机器可以直接执行了。

但是java不一样,java是一门可以跨平台的语言,也是一门面向对象的语言,Java编译程序,首先是 javac,直接将java源程序变成java字节码文件,也就是.class文件——JVM可以直接执行的文件,然后再通过JVM来执行,此时有两种执行方式,也就是解释执行编译执行,这样就实现了跨平台的功能,每台机器只需要装JVM就可以执行java字节码文件。

所以,总结一下,java编译的步骤就是:

java源程序,通过javac 变成 java字节码文件,再通过 java虚拟机,进行执行!

 

解释执行

解释器不会一次把整个程序转译出来,它每转译一行程序就立刻运行,然后再转译下一行,再运行,如此不停地进行下去。也就是解释一句,执行一句,这些就特别缓慢。效率也比较低,这也就是java比C、C++速度慢的原因之一,早期java程序就是这样执行的,但HotSpot虚拟机,引入了JIT技术,也就是接下来要说的编译执行。

 

编译执行(使用JIT技术)

 

JIT:Just In Time Compiler,一般翻译为即时编译器,这是是针对解释型语言而言的,而且并非虚拟机必须,是一种优化手段,Java的商用虚拟机HotSpot就有这种技术手段,Java虚拟机标准对JIT的存在没有作出任何规范,所以这是虚拟机实现的自定义优化技术。

    HotSpot虚拟机的执行引擎在执行Java代码是可以采用【解释执行】和【编译执行】两种方式的,如果采用的是编译执行方式,那么就会使用到JIT,而解释执行就不会使用到JIT,所以,早期说Java是解释型语言,是没有任何问题的,而在拥有JIT的Java虚拟机环境下,说Java是解释型语言严格意义上已经不正确了。

    HotSpot中的编译器是javac,他的工作是将源代码编译成字节码,这部分工作是完全独立的,完全不需要运行时参与,所以Java程序的编译是半独立的实现。有了字节码,就有解释器来进行解释执行,这是早期虚拟机的工作流程,后来,虚拟机会将执行频率高的方法或语句块通过JIT编译成本地机器码,提高了代码执行的效率,至此你已经了解了JIT在Java虚拟机中所处的地位和工作的主要内容。

 

 

工作原理 
当JIT编译启用时(默认是启用的),JVM读入.class文件解释后,将其发给JIT编译器。JIT编译器将字节码编译成本机机器代码。 

通常javac将程序源码编译,转换成java字节码,JVM通过解释字节码将其翻译成相应的机器指令,逐条读入,逐条解释翻译。非常显然,经过解释运行,其运行速度必定会比可运行的二进制字节码程序慢。为了提高运行速度,引入了JIT技术。 

在执行时JIT会把翻译过的机器码保存起来,已备下次使用,因此从理论上来说,採用该JIT技术能够,能够接近曾经纯编译技术。 
但JIT也并不是万能的,JIT并不总是奏效,由于JIT对每条字节码都进行编译,造成了编译过程负担过重,有时候我们关闭JITjava.lang.Compiler.disable(),也可以加快运行的速度。由于JIT对每条字节码都进行编译,造成了编译过程负担过重。为了避免这样的情况,当前的JIT仅仅对常常运行的字节码进行编译,如循环等

 参考文献:

https://blog.youkuaiyun.com/qq_36042506/article/details/82976586

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值