一、JVM概述
Java虚拟机有自己完善的硬件架构,如处理器、堆栈等,还具有相应的指令系统
Java虚拟机本质上就是一个程序,当它在命令行上启动的时候,就开始执行保存在某字节码文件中的指令。Java语言的可移植性正是建立在Java虚拟机的基础上。任何平台只要装有针对于该平台的Java虚拟机,字节码文件(.class)就可以在该平台上运行。这就是“一次编译,多次运行”
Java虚拟机不仅是一种跨平台的软件,而且是一种新的网络计算平台。该平台包括许多相关的技术,如符合开放接口标准的各种API、优化技术等。Java技术使同一种应用可以运行在不同的平台上。Java平台可分为两部分,即Java虚拟机(Java Virtual Machine)和Java API类库
目前JVM已经支持多语言字节码文件,如Kotlin、Groovy、JRuby、Jython、Scala等
二、JVM在计算机所处的位置
JVM是运行在操作系统之上,没有直接和硬件进行交互
-
三、JVM的不同实现
- SUN Classic
- Exact VM:开始具备现代JVM特性
- HotSpot VM:具备热点代码探测技术,目前在大规模使用的JVM
- BEA JRockit:(BEA已被Oracle收购)专注于服务端应用,世界最快的JVM之一
- IBM J9
- Taobao JVM:目前阿里淘宝、天猫均使用Taobao JVM替换Oracle官方JVM
- Graal VM: Oracle 2018年4月公开,口号 Run Programs Faster Anywhere.最可能替代HotSpot的产品
四、JVM体系结构
1.Java代码运行流程:Java程序
--> 字节码文件
--> 类装载子系统化身为反射类Class
--> 运行时数据区
-->执行引擎
--> 操作系统
2.方法区
和堆区
是所有线程共享内存的区域而Java栈
、本地方法栈
和程序计数器
是运行是线程私有的内存区域
五、JVM采用的架构
由于跨平台的特性,JVM采用基于栈的指令集架构,无需硬件支持,更好实现跨平台特性
与JVM采用架构相对的另一指令集架构:基于寄存器的指令集架构
下图为基于栈与寄存器指令集架构各自特点
-
六、JVM声明周期
1.启动
通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的
2.执行
- 一个运行中的java虚拟机有着一个清晰的任务:执行Java程序
- 程序开始执行的时候他才运行,程序结束时他就停止
- 执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程
3.结束
- 程序正常执行结束
- 程序异常或错误而异常终止
- 操作系统错误导致终止
- 某线程调用Runtime类或System类的exit方法,或Runtime类的halt方法,并且Java安全管理器也允许这次exit或halt操作
- 除此之外,JNI规范描述了用JNI Invocation API来加载或卸载Java虚拟机时,Java虚拟机的退出情况