Jvm的特点:
- 一次编译,到处运行(字节码)
- 自动内存管理
- 自动的垃圾回收功能
Jvm是跨平台,跨语言的
Jvm的位置
Jvm是一款程序虚拟机,区别于Vmvare这种系统虚拟机
1.1 jvm整体结构
- class文件由 类装载器子系统 加载初始化到内存中
- 运行时数据区中的方法区和堆是线程共享的,其他三个是每个线程都有各自的
- 执行引擎由编译器,JIT编译器,垃圾回收器组成
1.2 java代码的执行过程
- 源代码经过java编译器翻译成字节码
- jvm把字节码转换为机器能识别的机器码
- cpu执行代码
1.3 jvm架构模型
指令集架构分为两种
- 基于栈的指令集架构 (jvm)
- 设计实现简单,适用于资源受限的系统
- 零地址指令方式分配
- 指令集小
- 不需要硬件支持,移植性好,跨平台
- 基于寄存器的指令集架构
- 典型的应用 x86的二进制指令集,pc/android
- 基于寄存器,对于硬件耦合性较高,可移植性差
- 执行更加高效
- 指令更少
- 指令集大部分以一地址指令,二地址指令,三地址指令为主
1.4 jvm生命周期
- 启动
- 通过引导类加载器创建一个初始类,这个类具体由具体的虚拟机实现来确定
- 执行
- 执行java程序,当一个java程序被执行的时候,其实是jvm在执行
- 退出
- 程序正常执行结束
- 程序执行异常/错误而终止
- 操作系统出现异常
- 线程调用System/Runtime类中的exit/halt方法,且java安全管理器也允许操作
1.5 jvm各版本
- classic vm 最开始的vm
- exact vm 高性能vm的雏形,有了jit即时编译器
- HotSpot vm 现代的vm
- JRockit 没有解释器,只有JIT即时编译器,号称最快的vm,被oracle收购,整合到HotSpotVM
- J9 ibm的vm,也号称最快的vm,但是仅限于ibm自家的产品
- Graal vm 下一代vm 真正的跨语言vm
- TaobaoVm 淘宝基于hotSpot深度定制的vm,无法通用,对硬件有要求