01-什么是JVM?
什么是JVM?
①. JVM 是 java虚拟机,是用来执行java字节码(二进制的形式)的虚拟计算机
②. jvm是运行在操作系统之上的,与硬件没有任何关系
Java的跨平台及原理
①. 跨平台:由Java编写的程序可以在不同的操作系统上运行:一次编写,多处运行
②. 原理:编译之后的字节码文件和平台无关,需要在不同的操作系统上安装一个对应版本的虚拟机(JVM)
JVM的整体的理解
①. 类加载子系统
②. 运行时数据区(我们核心关注这里 的栈、堆、方法区)
③. 执行引擎(一般都是JIT编译器和解释器共存)
java代码执行流程
java源码—java编译器—生成字节码—进入java虚拟机(类加载器—字节码校验器—翻译字节码—JIT编译器)
JVM的架构模型
Java编译器输入的指令流基木上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构。
基于栈式架构的特点
- 跨平台性
- 指令集小
- 指令多
- 执行性能比寄存器差
基于寄存器架构的特点
- 指令集架构则完全依赖硬件,可移植性差
- 性能优秀和执行更高效
举例
同样执行2+3这种逻辑操作,其指令分别如下:
1、基于栈的计算流程(以Java虚拟机为例)
2、基于寄存器的计算流程
总结
由于跨平台性的设计,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虚拟机的退出情况。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Z.yang!