JVM和QEMU虚拟机的对比学习

2 篇文章 0 订阅
没有深究细节,从理解原理的角度整理了如下各点。

JVM是模拟一台机器对字节码指令的执行,在这点上和我们平常说的QEMU这类软件虚拟机类似。

运行在x86系统中的QEMU虚拟机的工作过程:
1、从二进制的原始指令流中读取一条指令,该指令流可能使用其他CPU的指令系统,不一定是x86的指令系统。
2、把该指令转换为x86系统的一套指令组合以完成该原始指令对内存或其他资源的操作。
3、根据原始指令的含义以及上一步操作的结果决定何处获取下一条原始指令。
不断重复上面几个步骤。

JVM虚拟机的工作过程:
1、从二进制的字节码流中读取一条指令,该指令属于Java统一的指令系统,不是本地CPU的指令系统。
2、把该字节码指令转换为本地CPU系统的一套指令组合以完成该字节码指令对内存或其他资源的操作。这里应该没有对寄存器的操作。
3、根据原字节码指令的含义以及上一步操作的结果决定何处获取下一条原始字节码指令
不断重复上面几个步骤。

但JVM虚拟机和QEMU等一般软件虚拟机所模拟的层次是不同的,QEMU虚拟机仅仅模拟CPU和硬件,逐条执行包括BIOS、OS和应用程序等所有软件组合形成的指令流。JVM虚拟机则不仅仅模拟CPU+硬件,而且模拟了OS,逐条执行字节码中的指令流。这里的字节码指令流相当于应用程序指令流。

JVM模拟OS意味着模拟OS的调度功能、垃圾回收功能,以及模拟给进程分配栈。可以说JVM模拟了一个进程的执行环境,也即一个应用程序能看到的系统环境。

除上述外JVM还有这些特点:
1、一个大的应用程序被分割为多个小的class类,JVM按程序流程运行相关class,只要该class已经收到,并不需要等所有class字节码都到齐后才运行。不过这个更多的是Java语言本身的特性。
2、统一的字节码指令格式,对应一个统一的虚拟机定义界面,这决定了Java的跨平台性。在这个统一的虚拟机定义界面下是不统一的本地物理机。
3、这个虚拟机没有定义寄存器,而是使用栈来存放操作的中间数据。
4、还有一些字长和安全特性等,但这些并非理解JVM原理的关键。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值