简介:术道并行,从零打造IT知识体系,图文视频同步更新。
本文学习章节:Java高级–01JVM篇–初始JVM
本文学习内容:简单介绍下JVM
思维导图
1 JVM的位置
JVM是运行在操作系统上,不同的系统安装与之对应的JVM。
2 常见JVM
主要了解目前最常见的JVM:
- HotSpot VM :HotSpot指热点代码探测技术
- Taobao JVM: 目前已经在淘宝、天猫上线,替换了Oracle官方JVM;
- Graal VM: Oracle 2018年4月公开,口号 Run Programs Faster Anywhere.最可能替代HotSpot的产品
3 架构图
可以说,学习JVM就是掌握这张图,能掌握到这张图,便掌握了JVM。
类加载子系统:加载字节码文件到运行数据区的方法区
执行引擎:执行字节码文件中的指令
本地方法接口:java调用其他语言的接口,与本地资源交互
运行时数据区:java内存(方法区:存储类元信息、方法元信息、常量池等;堆内存;java虚拟机栈;本地方法栈;程序计数器等)
4 指令集
由于跨平台的设计,java的指令都是根据栈来设计的,不同平台CPU架构不同,所以不能设计为基于寄存器的
栈:跨平台性、指令集小、指令多;执行性比寄存器差
寄存器:指令少
5 JVM的生命周期
启动
- 通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的
执行
- 一个运行中的java虚拟机有着一个清晰的任务:执行Java程序;
- 程序开始执行的时候他才运行,程序结束时他就停止;
- 执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程。
退出
- 程序正常执行结束
- 程序异常或错误而异常终止
- 操作系统错误导致终止
- 某线程调用Runtime类或System类的exit方法,或Runtime类的halt方法,并且java安全管理器也允许这次exit或halt操作
- 除此之外,JNI规范描述了用JNI Invocation API来加载或卸载Java虚拟机时,Java虚拟机的退出情况。