JVM的位置
)
一些JVM
- SUN Classic
- Exact VM
- HotSpot VM :HotSpot指热点代码探测技术
- BEA JRockit:(BEA 已被Oracle收购) 专一于服务端应用,世界最快的jvm之一
- IBM J9
- Taobao JVM: 目前已经在淘宝、天猫上线,替换了Oracle官方JVM;
- Graal VM: Oracle 2018年4月公开,口号 Run Programs Faster Anywhere.最可能替代HotSpot的产品
Android虚拟机 DVM
- 谷歌开发,基于Android,在2.2中提供了JIT
- 只能称做虚拟机 不能称为java虚拟机,他没有遵循Java虚拟机规范
- 基于寄存器架构,效率高,可是跟硬件耦合度比较高
- 不能直接执行class文件,执行的是dex文件
- 5.0使用支持提早编译的ART VM替换Dalvik VM
.java 源文件经过前端编译器(如javac) 编译成.class字节码文件 由后端编译器(java Api,JVM)解释执行
类装载:加载-->连接-->初始化 前端
java代码执行流程
java程序--(编译)-->字节码文件--(解释执行)-->操做系统(Win,Linux,Mac JVM)java
栈的指令集架构和寄存器的指令集架构
因为跨平台的设计,java的指令都是根据栈来设计的,不一样平台CPU架构不一样,因此不能设计为基于寄存器的
栈:跨平台性、指令集小、指令多;执行性比寄存器差
寄存器:指令少git
//查看指令集命令代码
cd out/production/类根目录
javap -v StackStruTest.class
//打印程序执行的进程
jps
复制代码
jvm生命周期
1.启动
经过引导类加载器(bootstrap class loader)建立一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的.github
2.执行
- 一个运行中的java虚拟机有着一个清晰的任务:执行Java程序;
- 程序开始执行的时候他才运行,程序结束时他就中止;
- 执行一个所谓的Java程序的时候,真真正正在执行的是一个叫作Java虚拟机的进程。
3.退出
- 程序正常执行结束
- 程序异常或错误而异常终止
- 操做系统错误致使终止
- 某线程调用Runtime类或System类的exit方法,或Runtime类的halt方法,而且java安全管理器也容许此次exit或halt操做
- 除此以外,JNI规范描述了用JNI Invocation API来加载或卸载Java虚拟机时,Java虚拟机的退出状况
JVM学习代码及笔记(陆续更新中...)
【代码】
github.com/willShuhuan…
【笔记】
JVM_01 简介
JVM_02 类加载子系统
JVM_03 运行时数据区1- [程序计数器+虚拟机栈+本地方法栈]
JVM_04 本地方法接口
JVM_05 运行时数据区2-堆
JVM_06 运行时数据区3-方法区
JVM_07 运行时数据区4-对象的实例化内存布局与访问定位+直接内存
JVM_08 执行引擎(Execution Engine)
JVM_09 字符串常量池StringTable
JVM_10 垃圾回收1-概述+相关算法
JVM_11 垃圾回收2-垃圾回收相关概念
JVM_12 垃圾回收3-垃圾回收器算法