java虚拟机运行的语言_java语言在虚拟机中运行的方法是什么

我们都知道,要运行Java代码,您必须具有JRE,这是Java运行时环境。  JRE包含Java程序的必要组件,包括Java虚拟机和Java核心类库。 但是,运行C ++代码不需要其他操作。 在时间环境中,您只需要将代码编译成CPU可以识别的指令,即机器代码。 那么,为什么Java不需要像C ++一样在虚拟机中运行呢?要怎样才能在虚拟机中运行呢? 然后往下看。

ab9958354c5420d1c4c7e8fceede4e3b.png

为什么Java在虚拟机中运行

我们刚刚提到C ++直接将代码编译为机器代码,但是由于每个平台的体系结构不同,CPU可以处理的指令集也不同,因此如果要在另一个平台上运行C ++代码,则必须使用 该平台对应的C ++代码编译器可以再次编译。  Java从一开始就意识到需要跨平台运行,因此Java设计了一个虚拟机,首先将Java代码编译为字节码(类文件),这是虚拟机可以识别的指令,然后将其编译为虚拟机内部的字节码。 转换成机器代码,因此我们只需要Java字节码即可在不同平台上的虚拟机中运行,这就是我们一直说的“编译一次,到处运行”。

Java虚拟机如何运行Java字节码

我们的JDK使用的虚拟机称为HotSpot虚拟机。 它将加载所有类文件,并且所加载的Java类将放置在方法区域中,并且代码将在以后运行时执行。  Java虚拟机在内存中划分了几个块,包括程序计数器,本地方法堆栈,Java虚拟机堆栈,堆和方法区域。

但是,仅Java字节码仍然无法运行。  Java虚拟机还需要将字节码转换为机器码。  HotSpot有两种形式:第一种是解释和执行,即字节码被翻译成机器码并逐一运行。 第二种是即时编译(JIT),它可以将方法中的所有字节码编译为机器代码并执行。

前者的优点是不需要等待编译,但是一对一解释的代价是运行速度将比后者慢。 默认情况下,HotSpot使用混合模式。 它首先解释并执行字节码,然后编译重复执行的热代码。

即时编译是指监督基于复合28法则,即20%的代码占用了80%的计算资源。 对于不常见的代码,我们不需要花时间编译为机器代码,只需使用解释执行即可;对于热代码,我们可以将它们编译为机器代码以提高运行速度。

HotSpot具有多个内置的即时编译器:Client Complier和Server Complier,称为C1和C2编译器,目的是在编译时间和生成代码的执行效率之间进行权衡。  C1编译时间更快,C2编译质量更高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值