面试造飞机系列-JVM

JVM(Java Virtual Machine)概述

2020-06-02  本文已影响0人  Chermack
说明(本系列是观看尚硅谷2020宋红康JVM的课程笔记进行自我整理,必要时进行内容补充)

一、定义

JVM即所谓Java虚拟机,他是一款软件,用来执行一系列虚拟计算机指令,是二进制字节码的运行环境,负责装在字节码到其内部,解释/编译为对应平台上的机器指令执行。其实,说JVM是Java的虚拟机已经不太准确,因为现在的JVM已经是一个跨语言的平台了,不仅是Java,Kotlin、Clojure,Groovy、Scala甚至JavaScript也可以通过特定的编译器进行编译生成字节码文件(字节码文件是编译后的二进制产物,不论是用什么语言进行编写的,只要能编译成对应的字节码文件,就能在JVM上运行)。因此,JVM就像是制定了一套自己的语言标准,其它任何语言都可以翻译到JVM,再由JVM和操作系统打交道进行具体的针对不同平台的指令执行。


Java的跨平台性
JVM跨语言的平台

二、特点

三、JVM的位置

JVM运行在操作系统之上,没有和硬件进行直接交互。不难理解,我们都是先安装了比如windows之后的操作系统,再去下载Oracle的JDK或者openJDK进行安装。在下载时也可以选择不同的对应平台,不同的版本。不能在windows系统上安装linux版本的JVM,因为JVM和不同操作系统之间的交互方式是不同的。

JVM的位置

四、JVM的整体结构

JVM整体结构如下两张图,其中最为重要的部分是Class Loader(类装载子系统),Runtime Data Area(运行时数据区)和Execution engine(执行引擎)。另外还需要对Class File(字节码文件),Native Interface(本地方法接口)和Native Method Library(本地方法库有所了解)。

JVM整体结构图 JVM整体结构详细图

五、Java文件从编译到执行的过程

  1. 首先Java源码通过Java编译器进行编译(又叫前端编译,是Java源文件到字节码文件的过程),其中涉及编译原理包含6部分内容:词法分析,语法分析,生成语法\抽象语法树,语义分析,生成注解抽象语法树,字节码生成器处理。
  2. 字节码文件被Java虚拟机通过类加载器加载到内存,并通过字节码校验器进行字节码的合法性校验,即可通过翻译字节码(解释执行)或者JIT编译器(编译执行)进行程序的运行,无论经过哪种方式,都需要经过不同操作系统提供的具体指令。


    Java文件从编译到执行的过程

PS:关于解释执行与编译执行的个人理解:假设你对某一门外语一窍不通,字节码文件就像是一篇外文文章,解释执行就像每当你遇到一个单词,都会去查阅字典,这样来说速度就会比较慢。而编译执行就像是你事先查了字典将单词意思标注在文章上(放在系统缓存中),那么你在读这篇文章的时候速度就会更快,但是缺点就是前期需要花大量时间去先查单词的意思。那么,对于文章中出现的一些高频单词,就可以通过查字典的方式先记录下意思,这样就不用每次都去翻阅字典,而那些低频词则遇到的时候再去查(这就是编译执行和解释执行的一种动态平衡)。

六、JVM的架构模型:

Java编译器输入的指令流是一种基于栈的指令集架构,而没有采用基于寄存器的指令集架构
两者的区别:

基于栈式架构的特点:

-涉及和实现更简单,适用于资源受限的系统
-避开了寄存器的分配难题:使用零地址指令方式分配
-指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。指令集更小,编译器容易实现。
-不依赖于特定的硬件,可移植性好,更好的实现跨平台。

基于寄存器架构的特点

七、JVM的生命周期

虚拟机的启动

Java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的。

虚拟机的退出

八、JVM的发展历程

上一篇 下一篇

猜你喜欢

热点阅读