JVM概述

作者: 布拉德老瓜 | 来源:发表于2021-03-28 22:19 被阅读0次

1.write once, run anywhere的基石

java语言有一个很重要的特性:一次编写,到处运行。即我们编写的代码,能够在不同的操作系统平台上运行。这里就引发出一个问题,不同的操作系统有不同的硬件实现和指令集,同一份代码如果要在这些不同的机器上运行,那么就要将这些代码翻译成与机器指令集对应的二进制文件,才能保证运行结果的一致性。

java使用虚拟机去屏蔽操作系统的差异性,其原理如图所示。我们编写的Java程序在被编译后,以class文件的形式被存放在磁盘、内存、网络...中,然后由jvm进行加载,并解释执行。字节码文件相当于是对我们所编写程序的二进制描述,但他并不能被操作系统直接执行,而是由jvm解释成对应系统的指令,再进行执行。因此java程序虽然会被编译,但仍属于解释型语言。另一方面,现在的JVM为了效率,都有一些JIT优化。它又会把.class的二进制代码编译为本地的代码直接运行,所以,它也不完全是一门解释型语言。


处处运行的基石

2. JDK,JRE,JVM的关系

JDK是支持java语言开发的最小支持环境,包含了java语言,工具即其api,JRE。
JRE是运行时环境,能够支持java语言的运行。包含了JVM和Java核心类库,但不包含开发工具(将.java编译成.class文件的编译器、调试器等)
JVM是将.class文件加载到内存并解释执行的组件,显然它是java体系的核心部件。


组件关系

3. JVM的功能及指令集基础

JVM中实现了对java指令的加载、解释、执行。
其指令集是基于栈的架构而非基于寄存器的架构。也就是说,指令的操作数依赖于操作数栈,而非操作数地址。
举个例子说明:

public class AddA {
    public static void main(String[] args) {
        int a = 2;
        int b = 3;
        int c = a + b;
    }
}
...
对应的字节码指令
0 iconst_2 //2入栈
1 istore_1 //2出栈,并存放到局部变量表1位置
2 iconst_3  //3入栈
3 istore_2 //3出栈,并存放到局部变量表1位置
4 iload_1  //从局部变量表1位置读取操作数并入栈
5 iload_2  //从局部变量表2位置读取操作数并入栈
6 iadd  // 弹栈并相加,将结果5压入操作数栈
7 istore_3 // 5出栈并存放到局部变量表3位置
8 return  //方法返回

而基于寄存器的计算2+3则如图


基于寄存器:2+3

之所以java指令要依据栈来实现,主要原因是不同平台cpu架构不同,设计为基于寄存器的话,难以实现跨平台。

相关文章

  • JVM概述

    JVM结构如下图所示,由编译器,加载器,执行器和运行时数据区构成。 JVM内部也有编译器。上图缺少这个。类加载其实...

  • JVM概述

    1、JVM概念 1.1 Java虚拟机的原理 所谓的虚拟机,就是一台虚拟的机器。他是一款软件,用来执行一系列虚拟计...

  • JVM 概述

    Java Virtual Machine 是Java平台的基石,包含相应的技术规范、实现(JVM的实现就是JRE)...

  • jvm概述

    .java文件通过jdk中的javac编译工具编译生成.class字节码文件,.class文件才能被jvm识别运行...

  • JVM概述

    JVM,也就是Java虚拟机 所谓虚拟机是指:通过软件模拟的具有完整硬件系统的,运行在一个完全隔离环境中的计算机系...

  • JVM 概述

    整体结构 JVM架构模型 Java编译器输入的指令流是一种基于栈的指令架构,另一种是基于寄存器的指令集架构; 跨平...

  • JVM概述

    1.write once, run anywhere的基石 java语言有一个很重要的特性:一次编写,到处运行。即...

  • JVM 概述

    1 什么是JVM JVM是JavaVirtualMachine(Java虚拟机)的缩写,JVM是一种用于计算设备的...

  • JVM内存模型(jvm 入门篇)

    概述 jvm 入门篇,想要学习jvm,必须先得了解JVM内存模型,JVM内存模型,JVM内存模型,JVM内存模型,...

  • 九神带你入门JVM(上)

    概述 本篇较长,九神带你从0入门JVM,全文包括包括JVM的分类、JVM垃圾回收综述、JVM的内存模型(Java ...

网友评论

      本文标题:JVM概述

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