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

  我们都知道,要运行Java代码,您必须具有JRE,这是Java运行时环境。  JRE包含Java程序的必要组件,包括Java虚拟机和Java核心类库。 但是,运行C ++代码不需要其他操作。 在时间环境中,您只...

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

  为什么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编译质量更高。

推荐阅读:java架构师指南之什么是架构和架构本质

  • 发表于 2020-08-06 20:17
  • 阅读 ( 82 )
  • 分类:技术干货

0 条评论

请先 登录 后评论
JAVA Q&A
JAVA Q&A

173 篇文章

作家榜 »

  1. JAVA Q&A 173 文章
  2. 江南 1 文章
  3. 伯乐 0 文章
  4. 孤存 0 文章
  5. q21164340 0 文章
  6. 赫敏12 0 文章
  7. 子牙 0 文章
  8. 赫敏 0 文章