美文网首页
JVM基础 - 编译执行、平台无关性

JVM基础 - 编译执行、平台无关性

作者: MuziBlogs | 来源:发表于2020-07-21 15:14 被阅读0次

一、Java从编译到执行

Java从编译到执行.png

1. Java程序运行过程

如图所示,我们的Java代码需要通过javac编译成.class后缀的字节码文件,然后才能被JVM执行。在JVM中,首先需要通过类加载器加载这个字节码文件,然后由字节码解释器去解析字节码文件,最后由执行引擎去基于解析后的指令去操作OS硬件系统。

2. 什么是JIT(Just In Time Compiler)?

当虚拟机发现某个方法或代码块的运行特别频繁的时候,就会把这些代码认定为“热点代码”。为了提高热点代码的执行效率,在运行时,即时编译器JIT会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化。

3. 解释器和编译器各自的优点

解释器的优点:当程序需要迅速启动的时候,解释器可以首先发挥作用,省去了编译的时间,立即执行。解释执行占用更小的内存空间。同时,当编译器进行的激进优化失败的时候,还可以进行逆优化来恢复到解释执行的状态。
编译器的优点:在程序运行时,随着时间的推移,编译器逐渐发挥作用,把越来越多的代码编译成本地代码之后,可以获得更高的执行效率。
结论:通常在虚拟机的架构中,解释器与编译器通常会配合工作,提升效率。

二、JVM跨平台和语言无关性

JVM跨平台和语言无关性.png

1. JVM的跨平台

JVM如何做到的跨平台?
Java官方提供了各个平台32bit和64bit的机器的不同版本的JDK,所以在各个平台下都会有相应的JVM。站在JVM的角度,JVM只解释执行字节码文件,所以我们的Java代码会统一会编译成字节码文件,这样就可以在各个平台上运行了。
简而言之,也就是Java官方从包揽了各个平台下JVM的开发工作,程序员不需要考虑平台各自的接口和特性,只需要提供编译后的class字节码文件,这样就可以一处编译处处运行,达到平台无关性(Write Once ,Run Anywhere)。

2. JVM的语言无关性

JVM只解释执行字节码文件,所以无论语言是什么样,只要最终可以编译成字节码文件,这样的代码就可以在JVM上运行。
截至目前,商业机构和开源机构已经在Java语言之外发展出一大批可以在JVM上运行的语言了,如Groovy、Scala、Jython等。之所以可以支持,就是因为这些语言也可以被编译成字节码(.class文件),而虚拟机并不关心字节码是有哪种语言编译而来的。

相关文章

  • 机器码示例

    JVM语言无关性的基础是编译器--不同语言,通过不同的编译器,都编译为字节码。JVM平台无关性的基础是JVM--相...

  • JVM基础 - 编译执行、平台无关性

    一、Java从编译到执行 1. Java程序运行过程 如图所示,我们的Java代码需要通过javac编译成.cla...

  • JVM

    1.平台无关性:只需要编译生成Java虚拟机上运行的目标代码(字节码);jvm执行字节码时,解释成具体平台上的机器...

  • JVM 为什么是语言无关的?

    Java 是平台无关性的语言 Java 编译器把 .java 源文件统一编译成 .class 文件,JVM 虚拟机...

  • JavaServlet 优点

    1.与平台无关 Servilet代码被编译成字节码,再由服务器上与平台相关的java虚拟机Jvm解释执行,Serv...

  • 2019-04-21

    平台无关性 Java源码首先被编译成字节码,再由不同平台的JVM进行解析,Java语言在不同平台上运行不需要重新编...

  • Java(一)

    JVM (Java Virtual Machine), Java 虚拟机; JVM 是 Java 平台无关性实现的...

  • Java常识Tips

    1.JVM JVM(Java Virtual Machine),Java虚拟机 JVM是Java平台无关性实现的关...

  • 深入理解JVM之编译优化

    JDK在源码编译阶段将源码编译为JVM字节码,JVM字节码是一种平台无关的中间代码方式,要由JVM在运行期间对其进...

  • JAVA学习笔记(一)

    1.Java跨平台的原理: 1)编译之后会生成与平台无关的字节码文件2)得依赖不同平台的虚拟机(JVM)JVM是不...

网友评论

      本文标题:JVM基础 - 编译执行、平台无关性

      本文链接:https://www.haomeiwen.com/subject/nvvikktx.html