JVM与Java体系结构
一、前言
实际开发中可能遇到的关于JVM的问题
为什么学JVM
- 面试都会问
- 追求极客精神
- 中高级Java程序员必备,项目管理,调优需要
二、JVM参考书目
- Oracle官方JVM规范
- 中文版Java虚拟机规范(JDK8)
- 《深入理解Java虚拟机》
- 《自己动手写Java虚拟机》
三、Java语言与JVM简介
Java是目前应用最广泛的软件开发平台之一。随着Java以及Java社区的不断壮大,Java不再是简简单单的一门计算机语言了,它更是一个平台、一种文化、一个社区。
Java语言跨平台,“write once, run anywhere”.
JVM:跨语言的平台
字节码
字节码就是能在JVM上执行的一种文件格式。字节码不一定是由Java语言编译生成的,也有可能是由其他语言编译而成的。所以字节码又叫JVM字节码。
JVM只认字节码。字节码文件中包含了JVM指令集和符号表,还有一些其他辅助信息。
四、虚拟机与Java虚拟机
虚拟机
虚拟机其实就是一台虚拟的计算机。是一款软件,用来执行一系列虚拟计算机指令。
虚拟机分为系统虚拟机和程序虚拟机。系统虚拟机(如VMWare)其实就是对物理计算机的仿真,而程序虚拟机(Java虚拟机)是专门为执行单个计算机程序而设计。
Java虚拟机
Java虚拟机就是一台执行字节码的虚拟计算机。
Java虚拟机主要特点
- 自动内存管理
- 自动垃圾回收
JVM的位置
JDK包含JRE,JRE包含JVM。
五、JVM的整体
下面这张图很重要!讲的是如何将class字节码文件转换为机器可以识别的机器代码。一定要能自己画出来!
六、Java代码的执行流程
七、JVM的架构模型
Java编译器输入的指令流是基于栈的指令集架构,另一种指令集架构是基于寄存器的指令集架构。
通过反编译认识基于栈的指令集架构
基于栈的指令集架构特点
- 跨平台
- 指令集小
- 指令多
- 执行效率不如基于寄存器的指令集架构
八、JVM的生命周期
JVM的启动
JVM的启动是通过引导类加载器创建一个初始类来完成的,这个类是由虚拟机的具体实现指定的。
JVM的执行
JVM的运行就是为了执行Java程序的。
程序开始执行时JVM开始运行,程序运行结束后JVM停止。
执行一个所谓的Java程序的时候,真正在执行的是一个叫做Java虚拟机的进程。
JVM的退出
当有如下事件发生时,JVM停止
- 程序正常执行结束
- 程序在执行过程中遇到了异常或错误而终止
- 由于操作系统出现错误而导致Java虚拟机进程终止
- 某线程调用Runtime类或System类的exit方法,或Runtime类的halt方法,并且Java安全管理器也允许这次exit操作或halt操作。
九、JVM发展历程
SUM classic VM
Exact VM
HotSpot VM
JRockit VM
J9 VM