美文网首页Android开发Android开发经验谈Android技术知识
揭秘Java虚拟机阅读笔记一:何为虚拟机

揭秘Java虚拟机阅读笔记一:何为虚拟机

作者: 要拿出真本事了 | 来源:发表于2019-02-20 22:51 被阅读4次

《揭秘Java虚拟机:JVM设计原理与实现》一书的第一章概述了虚拟机,更多的是基础知识的普及,比如汇编的基础知识,主要讲述了Java代码是怎么被机器运行的,以下是我对书中知识的理解!

如果有幸能被您看到,并且发现其中有不足之处,还望指出,不断犯错,才能不断进步!

越是学习,才能越是知道,学无止境!

正文

要知道何为虚拟机,就要先从Java代码是如何运行的这点说起

由于CPU只能执行机器指令,要想执行Java代码,需要先把Java源代码转换成中间语言(Java字节码指令集),再通过虚拟机判定当前运行平台并把中间语言转换成相应的机器指令,即

Java源代码 => 中间语言 => 机器指令

Java语言是亲和人类的,因为它是根据人类的习惯模式设计的,但这样的方式并不是机器所能理解的,机器只认得内存、堆栈..

要执行Java代码,还是需要把符合人类思维的Java代码转换为符合机器习惯的机器指令,但是这里引发了一个问题,那就是不同操作系统的指令集并不是统一的。

Java设计的初衷是实现兼容,实现平台无关,实现write once,run anywhere!所以在Java代码和机器指令之间,引入了中间语言,即Java字节码指令集

机器指令集是面对CPU的硬件指令集,Java实现兼容的方式是开发一套各大操作系统通用的软件层面的指令集 -- Java字节码指令集

把符合人类思维模式的Java代码转换成符合机器习惯的中间语言,再由中间语言去应付不同的操作系统,从而实现兼容

这里需要着重记录Java字节码指令集,Java的中间语言是刻板的,不知道何为对象,它的职能是实现压栈、读写局部变量表、调用目标方法...

Java字节码指令集比硬件指令集更加丰富,因为Java是面向对象的编程语言,自然需要一套支持类型操作的特殊指令,书中把指令集分为:

  • 数据交换指令
    提供数据在不同内存区之间的传送和交换

  • 函数调用指令

  • 运算指令集
    包含算术运算、位运算、比较运算、逻辑运算....

  • 控制转移指令
    switch分支选择、if条件判断、for循环...

  • 对象创建与类型转换指令
    new、类型转换

编程人员只需要熟练的使用这套通用的API,就可实现跨平台的开发,因为Java代码 => 中间语言这步是平台无关的,剩下的,就交给虚拟机吧!

何为虚拟机?
虚拟机的职能就相当于一个翻译,具备把中间语言翻译成各大操作系统的机器指令的能力,事实上,虚拟机一直在做这件事!

虚拟机把内存分为:操作数栈、局部变量表、Java堆、常量池、方法区
Java代码本质上就是在这些内存区中执行的,虚拟机把执行翻译为机器指令使之能在CPU中真实的运行!

相关文章

网友评论

    本文标题:揭秘Java虚拟机阅读笔记一:何为虚拟机

    本文链接:https://www.haomeiwen.com/subject/clvfyqtx.html