JVM学习笔记第一章:JVM与Java结构

------------恢复内容开始------------

  目录:

    1、Java及JVM简介
    2、Java发展的重大事件
    3、虚拟机与Java虚拟机
    4、JVM的整体结构
    5、Java代码执行流程
    6、JVM的架构模型
    7、JVM的生命周期
    8、JVM的发展历程

1、Java及JVM简介

 Java是一门跨平台的语言,运行Java程序需要依靠JVM,我们都知道Java运行的流程是先编译为class文件,然后再由JVM解释执行,就像下面的图一样:

JVM学习笔记第一章:JVM与Java结构_第1张图片

 

 

我们Java的特点就是一处编译,处处运行,那么我们处处运行所依靠的就是JVM虚拟机,JVM虚拟机只要求你给它符合JVM规范的字节码文件,那么你只需要在你的平台上装上适合你平台的JVM,然后我们不需要关系代码,直接将字节码文件让JVM运行就行了。

 

但是你可能不知道JVM的强大之处,JVM它不仅仅可以用来运行Java,还可以运行其他其他语言,如果你没去了解过,可能你会不信,但是事实就是这样的,如下图:


JVM学习笔记第一章:JVM与Java结构_第2张图片

从这里我们可以得知,JVM可以看作一个运行的容器,它运行的东西就是字节码文件,但是字节码文件从哪里来,它最初是什么语言,这些都不重要,只要字节码文件符合了JVM给出的规范(具体规范可查看官网),那么就可以运行。

那么既然JVM可以运行多种语言,那么以后的趋势就可能变成多语言混合开发,让各个语言使在他们最擅长的地方,正所谓没有最好的语言,只有最适合的语言,那么我们混合开发在不同的场景使用不同的语言,岂不美哉吗?

需要注意哈,Java可能不是最吊的语言,但是JVM一定是最吊的虚拟机

 

看到这里你可能还会有疑问,Java语言本身和JVM到底啥关系?

  最初Java出来的时候,JVM(Java Virtual Machine)就伴随着出现,以前却是JVM是用来搞Java的,但是随着JVM不断地迭代更新,现在的JVM不仅仅可以用来执行Java,执行的字节码文件只要符合JVM规范即可。

    通俗易懂点:原来Java是JVM的女朋友,但是随着JVM的成长,JVM现在想给更多的女孩一个家,嗯,就这样。

2、Java发展的重大事件

   1):1990年,在sun公司中,由Patrick Naughton、MikeSheridan及James Gosling领导的小组Green Team,开发出的新语言,命名为Oak,后期改名为Jav 1a

   2):1995年,sun正式发布Java和HotJava产品,Java首次公开亮相

   3):1996年,在1月23日sub发布了JDK1.0

   4):1998年,JDK1.2版本发布。同时,sun发布了jsp/servlet、EJB规范,以及将Java分成了J2EE,J2SE,J2ME。这表明了Java开始向企业、桌面应用和移动设备领域挺进。

   5):2000年,JDK1.3发布,Java HotSpot Virtual Mechanical正式发布,成为Java默认的虚拟机。

   6):2002年,JDK1.4发布,古老的Classic虚拟机退出了舞台。

   7):2003年年底,Java平台的Scala正式发布,同年Grovy也加入了Java阵营。

   8):2004年,JDK1.5发布。同时JDK1.5改名为JDK5.0
   9):2006年,JDK1.6发布,同年,Java开源并建立了OpenJDK,然后HotSpot就成为了OpenJDK的默认虚拟机。

   10):2007年,Java平台迎来了新伙伴Clojure

   11):2008年,Oracle收购EBA,得到了JRockit虚拟机

   12):2009年,Twitter宣布把后台大部分程序从Ruby迁移到Scala,这又是Java平台的又一次大规模应用。

     13):2010年,Oracle收购了Sun,获得Java商标和最具价值的HotSpot虚拟机,此时,Oracle拥有了占有市场份额最高的两款虚拟机,HotSpot和JRockit,并未来计划进行整合为HotRickit(但是后面其实没有整合,只是将JRockit中一些优秀的部分借鉴到了HotSpot中)。

   14):2011年,JDK7发布,在jdk1.7u4中,正式启用了新的垃圾回收器G1

   15):2017年,JDK9发布,将G1设置为默认,替代了CMS

    同年,IBM的J9虚拟机开源,并形成现在的Open J9社区。

      16):2018年,Android的Java侵权案判决,Goole赔偿Oracle19亿美元

     同年,Oracle宣告JavaEE成为历史名词,JDBC、JMS、Servlet赠与予Eclipse基金会。

          同年,JDK11发布,LTS版本的JDK,发布革命性的ZGC,调整JDK授权许可

  17):2019年,JDK12发布,加入RedHat领导开发的Shenandoah GC

 

3、虚拟机与Java虚拟机

 虚拟机:

  虚拟机就是一台虚拟的计算机,它是一款软件,用来执行一系列虚拟的计算机指令,大体上虚拟机可以分为系统虚拟机和程序虚拟机。

  系统虚拟机就是VmWare这种,完全对物理计算机的仿真。

  程序虚拟机就是JVM这种,专门为执行单个计算机程序而设计。

  无论是系统虚拟机还是物理虚拟机 ,都会收到虚拟机提供的资源限制中。

Java虚拟机:

  Java虚拟机是一台执行Java字节码的虚拟计算机,它拥有独立的运行机制,其运行的Java字节码也未必由Java语言编译而成。

  JVM平台的各种语言共享Java虚拟机带来的跨平台性、优秀的垃圾回收机制、以及可靠的即时编译器。

  Java技术的最核心部分都是JVM(Java Virtual Machine)虚拟机,因为所有的程序都需要运行在JVM中

Java虚拟机的作用:

  Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令。每一条Java指令,Java虚拟机规范中都有详细的定义,比如如果存操作数,取操作数,处理结果存放在哪等。

Java虚拟机的在计算机中的位置:

  JVM学习笔记第一章:JVM与Java结构_第3张图片

    JVM是在操作系统之上的,它并不会直接操作硬件。

4、JVM的整体结构

 JVM学习笔记第一章:JVM与Java结构_第4张图片

 

JVM整体结构的一个简图。

5、Java代码执行流程

 JVM学习笔记第一章:JVM与Java结构_第5张图片

 

首先Java源码由Java编译器翻译为class字节码文件,然后将字节码文件交由Java虚拟机解释运行,首先是由类加载器加载,然后校验字节码文件合法,然后由解析器和即时编译器进行执行(HotSpot才是这样的)。

 

课程中的解释:

  1、编译器编译过程中,任何一个节点执行失败就会造成编译失败。

  2、虽然各个平台的JVM虚拟机内部实现细节不同,但是它们共同执行的字节码内容却是一样的。

  3、JVM的主要任务就是讲字节码装载到其内部,解释/编译为对应平台上的机器指令(即:汇编语言)执行。

   4、Java虚拟机使用类加载器(Class Loader)装载class文件。

  5、类加载完成之后,会进行字节码校验,字节码校验通过只有JVM解释器会把字节码翻译为机器码(即汇编语言)交由系统执行。

  6、并不是所有代码都是解释执行的,比如HotSpot虚拟机,它就是配合着JIT(即时编译器)做代码缓存一起用的。

6、JVM的架构模型

JVM的架构模型大致分为两种:

  基于栈的指令集架构、基于寄存器的指令集架构。

区别这两种架构之间的区别:

  基于栈的指令集架构:

    1:设计和实现更简单,适用于资源受限的系统

    2:避开了寄存器的分配难题,使用零地址指令方式分配

    3:指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。指令集更小,编译容易实现。(但是指令数量比寄存器多很多)

    4:不需要硬件支持,可移植性好,更好实现跨平台

  基于寄存器的指令集架构:

      1:典型的应用是x86的二进制指令集:比如传统的PC以及Android的Daalik虚拟机

    2:指令集架构完全依赖硬件,可移植性差

    3:性能优秀和执行更高效

    4:话费更少的指令去完成一项操作。(但是单个指令的大小比基于栈的更大)

    5:在大部分情况下,基于寄存器架构的指令集往往都以一地址指令、二地址指令和三地址指令为主,而基于栈架构的指令集却是以零地址指令为主

  举例一个操作图:

  JVM学习笔记第一章:JVM与Java结构_第6张图片

 

7、JVM的生命周期

 JVM学习笔记第一章:JVM与Java结构_第7张图片

JVM学习笔记第一章:JVM与Java结构_第8张图片 

8、JVM的发展历程

 Sun classic VM

JVM学习笔记第一章:JVM与Java结构_第9张图片

 

 

Exact VM

 

JVM学习笔记第一章:JVM与Java结构_第10张图片

 

 

HotSopt VM

 

JVM学习笔记第一章:JVM与Java结构_第11张图片

 

 

 

 

 

JRoickt

 

 JVM学习笔记第一章:JVM与Java结构_第12张图片

 

 

J9 

 

 

JVM学习笔记第一章:JVM与Java结构_第13张图片

 

CDC/CLDC HotSpot

 JVM学习笔记第一章:JVM与Java结构_第14张图片

 

Azul VM

JVM学习笔记第一章:JVM与Java结构_第15张图片

 

Liquid VM

 

JVM学习笔记第一章:JVM与Java结构_第16张图片

Apach Hermony

JVM学习笔记第一章:JVM与Java结构_第17张图片

 Microsoft JVM

JVM学习笔记第一章:JVM与Java结构_第18张图片

 TaoBaoJVM

 JVM学习笔记第一章:JVM与Java结构_第19张图片

 

Dalvik VM

JVM学习笔记第一章:JVM与Java结构_第20张图片

 

其他 

 JVM学习笔记第一章:JVM与Java结构_第21张图片

 

Graal VM 

JVM学习笔记第一章:JVM与Java结构_第22张图片

 

 

本文仅仅是记录笔记,切勿当真。

你可能感兴趣的:(JVM学习笔记第一章:JVM与Java结构)