目录
- Java发展历史
- JVM发展历史
- 虚拟机
- 机器码-中间码/字节码-指令-指令集-汇编-高级语言
- 指令集架构模型
- JVM-JRE-JDK
- JVM特点
- JVM整体结构
- Java代码执行流程
- JVM生命周期
- 参考书目
- 作者声明
Java发展历史
- 到现在为止,javaSE8(1.8.0)仍然是企业中使用的最多的版本
JVM发展历史
- Sun Classic VM
- 只有解释器
- Exact VM
- Exact Memory Management:虚拟机知道位于内存中的数据的具体类型
- 编译器和解释器协同工作
- 热点探测
- Sun HotSpot VM
- 使用最多的虚拟机
- 编译器(JIT)和解释器协同工作
- JIT(Just In Time)即时编译器会将编译后的热点代码缓存起来
- 热点探测(热点代码为经常被执行的代码)
- 独有方法区,JRockit和J9 VM都没有方法区
- Sun公司被Oracle收购
- BEA JRockit VM
- 快
- 专注服务器应用
- 没有解释器
- 全面的JVM解决方案(提供JRockit Real Time解决方案-微秒响应时间;提供Mission Control服务套件-极低开销监控、管理和分析JVM的工具)
- BEA公司被Oracle收购
- IBM J9 VM
- 定位类似HotSpot
- 适合在IBM自家产品上使用
- KVM和CDC/CLDC HotSpot VM
- CDC/CLDC HotSpot VM是Java ME产品线上的两款VM
- KVM是CLDC-HI的早期产品
- KVM面向低端功能机市场
- KVM简单、轻量、高度可移植
- Azul VM
- 软硬件耦合
- 超快:Azul VM与Vega系统结合性能>HotSpot
- Azul Zing VM
- 快:Zing VM 在x86平台性能>HotSpot
- BEA Liquid VM
- 也叫JRockit VE(Virtual Edition)
- 软硬件耦合
- 不需要运行于操作系统之上,自己实现了专用操作系统
- 项目已经终止
- Apache Harmony
- Microsoft VM
- 因商业纠纷停用
- TaobaoJVM
- GCIH(GC invisible heap,GC不可见的堆):
- GC管理:生命周期长的对象移动到heap外,GC不能管理GCIH内部的Java对象-生命周期长的对象直接不让GC管理了。
- 对象共享:GCIH中的对象可以跨JVM进程共享。
- JNI(Java native interface):
- 诊断监测:
- PMU hardware的Java profiling tool
- ZenGC:
- 大数据场景
- 软硬件耦合
- Dalvik VM
- 应用于Android系统
- 不能称作Java虚拟机,因为它没有遵循Java虚拟机规范并且指令集架构也不同
- 不能直接运行.class文件,执行.dex文件
- 基于寄存器架构,不是JVM的栈式架构
- .dex是编译完成的文件,因此执行效率高
- .dev文件可以通过.class文件转化而来
- ART VM
- Android 5.0替换Dalvik VM
- 支持提前编译AOT(Ahead of Time Compilation)
- 应用于Android系统
- 不能称作Java虚拟机,因为它没有遵循Java虚拟机规范并且指令集架构也不同
- Graal VM
- Graal VM是跨语言全栈虚拟机
- JVM是跨语言的平台
- 口号:“write once, run anywhere”
- 输入规范
- Graal VM的输入也有规范,由Truffle工具集构建的某语言解释器满足
- 传统JVM的输入必须是符合JVM规范的.class文件
- 工作原理
虚拟机
- 虚拟机 分为系统虚拟机和程序虚拟机
- 系统虚拟机:是对物理计算机的仿真;visual Box和VMware就属于系统虚拟机
- 程序虚拟机:专门为执行单个计算机程序而设计;JVM就属于程序虚拟机
机器码-中间码/字节码-指令-指令集-汇编-高级语言
机器码/机器语言
字节码
指令
指令集
- 指令构成的集合
- 不同硬件平台(cpu)具有不同机器码》不同硬件平台(cpu)具有不同指令》不同硬件平台(cpu)具有不同指令集
- 常见:x86指令集 对应 x86架构的平台;ARM指令集 对应 ARM架构的平台
汇编语言
- 由于指令的可读性太差出现了汇编语言
- 操作码助记符:助记符代替指令的操作码
- 操作数助记符:地址符号或标号代替指令或操作数的地址
- 不同硬件平台(cpu)具有不同机器码》不同硬件平台(cpu)具有不同指令》不同硬件平台(cpu)具有不同指令集》不同硬件平台(cpu)可能具有不同汇编语言(同一厂商的硬件平台一般具有同一汇编语言)
- 汇编语言-汇编过程-》特定硬件平台指令集
高级语言
- 由于汇编的可读性太差出现了高级语言
- 高级语言》解释/编译》汇编语言》机器指令
指令集架构模型
指令集架构模型 | 典型应用 | 特点 | n地址指令 | 对齐方式 |
---|---|---|---|---|
基于寄存器的指令集架构 | x86指令集 | 依赖于寄存器,可移植性差,性能优秀执行高效 | 一般,都是一地址指令,二地址指令,三地址指令为主 | 16位对齐 |
基于栈的指令集架构 | JVM | 栈结构实现简单不需要特定硬件支持,可移植性好,适用于资源受限的系统(开始Java程序就是为了运行在机顶盒上)。 | 使用零地址指令分配方式(栈顶),避开了寄存器的分配难题。 | 8位对齐 |
对比
- 单个指令大小:基于栈的指令集模型<基于寄存器指令集模型
- 同样操作所需指令数量:基于栈的指令集模型>基于寄存器指令集模型
JVM-JRE-JDK
JVM特点
JVM整体结构
Java代码执行流程
简介
- 编程器一般分为前端,中端,后端
- javac是前端编译器
- JIT(即时编译器)是后端编译器
JVM生命周期
生命周期:
- 引导类加载器(bootstrap class loader)》创建初始类对象(initial class)》启动JVM》执行java程序》执行Java程序完毕,停止JVM
- Java程序由JVM进程负责执行
虚拟机退出方式 - 自动正常退出:Java程序执行完毕正常退出
- 自动异常终止:Java程序执行过程中遇到内部外部异常或错误(Java程序异常,操作系统异常)
- 主动退出:调用exit()方法,halt()方法
参考书目
- 参考Oracle公司发布的《The Java Virtual Machine Specification》
作者声明
- 文章如有问题,欢迎指正!!!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。