java代码是如何执行的?

作为一名Java程序员,你应该知道Java有很多种运行方式.比如说可以在开发工具中运行,可以双击jar包运行,可以在网页端运行.当然这些运行方式都离不开JRE「也就是java运行时环境」.

实际上, JRE仅仅包含了运行Java程序的必须组件, 包括java虚拟机及核心类库等.Java程序员经常使用的JDK「Java程序开发包」同样包含了JRE, 并且还附带了一些开发、诊断的工具.

为什么Java要在虚拟机当中运行?

由于Java是一种高级层面上的语言,其语法复杂、更为抽象.直接运行在硬件上不太现实,所以在运行Java之前需要做一些转换的工作.

这就好比列位要和日本人做生意, 但是不会日文,不能直接与日本人交谈.这个时候我们就需要一个翻译了.把我们说的中文翻译成日语再与对方交流.

这里的面的「列位」就相当于「Java字节码」, 请的「翻译」就相当于「虚拟机」, 交谈的「日本人」对象就相当于「执行代码的cpu」.

再解释一下, java程序经过编译之后生成「Java字节码」,Java的字节码经过「Java虚拟机」的加工转换成cpu能执行的机器码.

Java虚拟机可以由硬件实现,但是更为常见的是各个平台上的软件实现.那么这么做的意义大于一旦程序被转换成java字节码那么它就可以在不同平台上的虚拟机里运行.这就是java强大的跨平台特性的原因.

另外java虚拟机还提供了一个托管环境. 这个环境代替我们处理一些代码中冗长且容易出错的部分,比如说内存管理与垃圾回收.

此外托管环境还提供了诸如数组越界、动态类型、安全权限等等的动态检查.
从硬件视角来看, java字节码无法直接运行,因此java虚拟机需要将字节码翻译成机器码

在hotspot里, 翻译过程有两种方式:

  • 解释执行
    • 逐条将字节码翻译成机器码并执行.
  • 即时编译「Just-in-time compilation, JIT」
    • 即将一个方法的所有字节码编译成机器码再运行.

Java字节码的执行
解释执行的优势在于无需等待编译, 即时编译的优势在于实际运行速度快
在hotspot中,默认的采用的是混合模式, 综合的解释执行与即时编译的优点. 它会先解释执行代码, 然后将其中反复执行的「热点代码」, 以方法为单位进行「即时编译」…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值