美文网首页面试造飞机系列-JVM
JVM(Java Virtual Machine)概述

JVM(Java Virtual Machine)概述

作者: Chermack | 来源:发表于2020-06-02 15:40 被阅读0次
说明(本系列是观看尚硅谷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编译器输入的指令流是一种基于栈的指令集架构,而没有采用基于寄存器的指令集架构
两者的区别:

基于栈式架构的特点:

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

基于寄存器架构的特点

  • 典型的应用是x86的二进制指令集:比如传统的PC以及Android的Davlik虚拟机。
    -指令集架构则完全依赖硬件,可移植性差
    -性能优秀和执行更高效:
    -花费更少的指令去完成一项操作。
    -在大部分情况下,基于寄存器架构的指令集往往都以一地址指令、二地址指令和三地址指令为主,而基于栈式架构的指令集却是以零地址指令为主

七、JVM的生命周期

虚拟机的启动

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

虚拟机的退出

  • 程序正常执行结束
  • 程序在执行过程中遇到了异常或错误而异常终止
  • 由于操作系统出现错误而导致Java虚拟机进程终止。
  • 某线程调用Runtime类或System类的exit方法,或Runtime类的halt方法,并且Java安全管理器也允许这次exit或halt操作。(Runtime在程序运行时是一个单例模式。System调用exit方法,实际上也是去调用Runtime.getRuntime().exit(status)方法,然后去调用halt(int status),跟去传入的不同状态码去采用不同的方式结束本进程)。
  • 除此之外,JNI规范描述了用JNI Invocation API来加载或卸载Java虚拟机时,Java虚拟机的退出情况。

八、JVM的发展历程

  • 第一款是Sun公司的Sun Classic VM,它是世界上第一款商用的Java虚拟机,在JDK1.4被完全淘汰,只提供了解释器
  • 现在广泛使用的是HotSpot虚拟机,它是Sun/Oracle JDK和OpenJDK默认的虚拟机(HotSpot指的是它的热点代码探测技术,通过计数器找到热点代码,触发即时编译或站上替换。JIT(即时编译器)与解释器协同工作,在最优程序响应时间和最佳执行性能中取得平衡)。
  • BEA的JRockit,不太关注程序启动速度,因此JRockit内部不包含解释器实现,全部代码靠编译器编译后执行,号称世界上最快JVM。Oracle在2008年收购了JRockit进行与HotSpot整合,因为架构差别大,因此整合功能有限。
    -IBM J9,有影响的三大商用虚拟机之一。2017年IBM发布了开源J9命名为OpenJ9,交给了Eclipse基金会。(开源的是虚拟机,而OpenJDK开源的是整个JDK)
    PS:(面试大坑,如果面试官文JVM原理,不要反问问的是那一个JVM,否则几个都说一遍)

相关文章

  • 玩转JVM(上)

    JVM 是什么? Java virtual Machine JVM 全称 Java Virtual Machine...

  • JVM 深入理解(一)

    简介: Java Virtual Machine JVM 全称 Java Virtual Machine,也就是...

  • JVM

    思维导图: 1,JVM是什么? 1.1,概述 JVM是Java Virtual Machine(Java虚拟机)的...

  • Java虚拟机内存结构

    一、jvm概述 jvm又叫java虚拟机(The Java Virtual Machine),主要有三种功能:运行...

  • AndroidJVM管理(一)

    Java Virtual Machine JVM 全称 Java Virtual Machine,也就是我们耳熟能...

  • JVM 内存管理

    1、Java Virtual Machine JVM 全称 Java Virtual Machine,也就是我们耳...

  • 笔记:JVM、对象分析与垃圾回收机制剖析

    JVM(Java Virtual Machine) Java虚拟机 JVM 全称 Java Virtual Mac...

  • JVM与GC总结

    JVM概述 JRE由Java虚拟机(Java Virtual Machine)和Java 应用编程接口(Appli...

  • JVM 入门

    JVM 基础 JVM 概述 JVM 是 Java Virtual Machine 的缩写,它是一个虚构出来的计算机...

  • 1-JavaBasisBegin

    Java入门 JDK && JRE && JVM JVM(Java Virtual Machine ):Java虚...

网友评论

    本文标题:JVM(Java Virtual Machine)概述

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