JVM介绍

JVM的位置

在这里插入图片描述

JVM在架构中的位置,与操作系统交互,因此不需要设计CPU指令,但是要调用操作系统的底层接口。从上面往下看,高级编程语言,例如JAVA编译之后就生成字节码,符合JVM字节码规范的字节码文件JVM都可以进行翻译成指令,因此,JVM可以运行除Java以外的高级语言如Scala编译成的字节码。


JVM的整体架构

在这里插入图片描述

方法区和堆是由多线程共享的
虚拟机栈、本地方法栈和程序计数器是线程独有的
类装载器子系统的任务是将class文件转化成一个类对象

详细版
在这里插入图片描述

执行引擎细分来说一共包括三部分,解释器、JIT编译器和垃圾回收器
在这里插入图片描述

其中解释器和编译器将字节码翻译成机器码,JIT编译器为字节码中重复执行的代码块(热点代码)建立缓存,加速执行速度。

Java代码的执行流程

在这里插入图片描述

基于栈的指令集架构 和 基于寄存器的指令集架构

基于栈的指令集架构特点:

  • 基于栈指令集,设计与实现基于栈的入栈和出栈的操作,适用于资源受限的系统。嵌入式、机顶盒。
  • 栈的操作只针对与栈顶的方法进行操作,因此使用零地址指令方式分配,避开了寄存器的分配问题
  • 跨平台性、在性能低的设备上使用,指令集小,但是执行的指令多

基于寄存器的指令集架构特点:

  • 完全依赖与硬件,可移植性差
  • 优点是性能高
  • 花费更少的指令去完成一项操作
  • 基于一地址、二地址和三地址指令为主,而基于栈的指令集为零地址指令分配方式

反编译指令:javap -v ***.class

为什么hotspot虚拟机要使用基于栈的指令集架构

  1. 设计与实现上简单
  2. 在各种平台上都可以使用

JVM的生命周期

启动:
通过引导类加载器(bootstrap class loader)创建一个初始类来完成,这个类由虚拟机具体指定的
引导类加载器加载object类

执行:
一个运行中的java虚拟机具有一个清晰的任务
程序开始执行时虚拟机开始运行,程序执行结束虚拟机停止运行
执行一个程序的时候,实际执行的是一个叫Java虚拟机的进程

退出:
当程序运行结束时虚拟机退出
当程序出现错误并且未处理 虚拟机退出
操作系统出现错误导致虚拟机退出
代码中system.exit()、runtime.halt()方法导致虚拟机退出

各种虚拟机介绍

  1. Sun classic VM:第一款商用java虚拟机,只提供解释器,不提供JIT编译器,使用JIT即时编译器需要外挂,但是解释器和编译器只能二选一。执行效率比较低下,现在hotspot内置此虚拟机
  2. Exact VM:准确式内存管理,虚拟机可以知道内存中某个位置的数据具体是什么类型,编译器和解释器可以混合工作,同时探测热点代码,只在solaris系统上使用
  3. Hotspot虚拟机:在jdk1.3时,成为默认虚拟机,hotspot指的是它探测热点代码的探测技术
  4. BEA的JRockit:专注于服务端。
    • 不关注程序的启动时间,因此不包含解析器实现
    • 是最快的JVM
    • 在jdk8中整合了hotspot和JRockit上的优秀特性
  5. IBM的J9: 与hotspot类似
  6. KVM、CDC/CLDC Hotspot:KVM简单、轻量、高度可移植性。控制器、传感器、老人手机用KVM
  7. Azul VM、Liquid VM:高性能虚拟机,与某个硬件绑定,性能更好发挥,移植性低,Liquid虚拟机不需要依赖操作系统
  8. Zing VM
  9. Apache Harmony:
  10. Microsoft JVM和Taobao JVM:微软虚拟机为了让浏览器更好运行java程序。Taobao JVM基于openjdk hotspot vm优化的Java虚拟机
  11. Dalvik VM:应用与安卓系统,没有遵循java的虚拟机规范。不执行.class文件,执行.dex文件。采用寄存器的架构模型,不使用栈架构。安卓5.0使用提前编译ART VM替换Dalvik VM。
  12. Graal VM:跨语言的全栈虚拟机,可以为任何语言使用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值