彻底掌握JVM

02-有哪些常见的JVM?请说下Java代码的运行机制

2021-07-15  本文已影响0人  OpenCoder

1.JVM虚拟机介绍

2.常见的JVM

image

很多公司都有自己的JVM,比如Orcale的HotSpot,也是我们学习和使用的重点JVM虚拟机。

【其他两款特殊虚拟机介绍】

  1. Sun Classic VM介绍:
早在1996年Java1.0版本的时候,SUN公司就发布了一款名为SUN Classic VM的Java 虚拟机,同时也是世界上第一款商用Java虚拟机,JDK1.4时完全被淘汰。这款虚拟机内部只提供解释器,如果使用JIT编译器,就需要进行外挂。但是一旦使用了JIT编译器,JIT就会接管虚拟机的执行系统,解释器就不再工作。 解释器和编译器不能配合工作。



现在hotspot已经内置了此虚拟机。
  1. Dalvik VM:
谷歌开发的应用于Android系统的虚拟机,并在Android2.2中提供了JIT,发展迅猛。



Dalvik VM 并不能直接执行Java的Class文件,因为其并没有遵循Java虚拟机的规范,它是基于寄存器结构而不是jvm的栈架构,因此其执行的是编译以后的dex(Dalvik Executable)文件【可以通过Class文件进行转化】,执行效率较高。



Android5.0使用了支持提前编译(Ahead of Time Compilation,AOT)的ART VM替换Dalvik VM。
我们的学习路线图就通过从一个类的加载开始,来学习Java是如何将代码运行起来的,由点到面的方式,一步一步深入理解JVM的整体运行机制。 image

3.Java代码的运行机制

image

那接着我们就要继续思考了:那这些 .class 字节码文件又是如何运行起来的?

(这里我们可以借助于DOS窗口执行 java 命令进行启动)

image 此时一旦采用 java 命令,实际上就是启动了一个JVM进程,由JVM来负责加载这些字节码文件到内存进行执行。 image 而将class字节码文件加载到虚拟机的内存,这个过程称为类加载,其中涉及到 【类加载机制】和【类加载器】的概念。 image

当字节码文件被类加载器加载进入到JVM内存中后,会通过JVM的执行引擎来执行我们内存中对应的类,比如类中的main方法,就会先被执行,而main方法中如果还涉及到其他的对象引用,类加载又会开始加载对应的字节码文件到内存,再由JVM进行调用执行。(如下图)

image

ok,通过以上的分析,我们可以先整体对java代码的运行流程做了一个全面的介绍,接下来再深入分析类加载器又是如何执行的,一步一步深入学习。

上一篇 下一篇

猜你喜欢

热点阅读