什么是JVM?

①. JVM 是 java虚拟机,是用来执行java字节码(二进制的形式)的虚拟计算机

②. jvm是运行在操作系统之上的,与硬件没有任何关系

1

Java的跨平台及原理

①. 跨平台:由Java编写的程序可以在不同的操作系统上运行:一次编写,多处运行

②. 原理:编译之后的字节码文件和平台无关,需要在不同的操作系统上安装一个对应版本的虚拟机(JVM)

JVM的整体的理解

①. 类加载子系统

②. 运行时数据区(我们核心关注这里 的栈、堆、方法区)

③. 执行引擎(一般都是JIT编译器和解释器共存)

2

java代码执行流程

java源码—java编译器—生成字节码—进入java虚拟机(类加载器—字节码校验器—翻译字节码—JIT编译器)

JVM的架构模型

Java编译器输入的指令流基木上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构。

基于栈式架构的特点

  • 跨平台性
  • 指令集小
  • 指令多
  • 执行性能比寄存器差

基于寄存器架构的特点

  • 指令集架构则完全依赖硬件,可移植性差
  • 性能优秀和执行更高效

举例

同样执行2+3这种逻辑操作,其指令分别如下:

1、基于栈的计算流程(以Java虚拟机为例)

3

2、基于寄存器的计算流程

4

总结

由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。

JVM的生命周期

虚拟机的启动

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

虚拟机的执行

  • 一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序。
  • 程序开始执行时他才运行,程序结束时他就停止。
  • 执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程。

虚拟机的退出

  • 程序正常执行结束
  • 程序在执行过程中遇到了异常或错误而异常终止
  • 由于操作系统用现错误而导致Java虚拟机进程终止
  • 某线程调用Runtime类或system类的exit方法,或Runtime类的halt方法,并且Java安全管理器也允许这次exit或halt操作。
  • 除此之外,JNI(Java Native Interface)规范描述了用JNI Invocation API来加载或卸载 Java虚拟机时,Java虚拟机的退出情况。