秃了头的老铁带你一脚踏进Java虚拟机

欢迎关注微信公众号:Coding我不配  
获取更多干货,一起每天进步一点点

在这里插入图片描述

1 为何需要 JVM

学习 java 入门的时候,首先需要搭建一个开发环境,下载 JDK,配置变量环境,one two three… 一顿猛虎操作,终于搞定了。接下来就开始写个 HelloWorld.java 跑起来…一脚踏进门,修行靠个人。

Java 虚拟机 JVM, 全称 Java Virtual Machine.它能识别 .class 后缀的文件,并且能够解析它的指令,最终调用操作系统的接口,运行程序,完成所要的操作。

可以把 JVM 当成是一个翻译器,会持续不断的翻译执行 Java 字节码,然后调用真正的操作系统函数,这些操作系统函数是与平台息息相关的,即具体使用的是哪个操作系统。

通过 JVM 打通自己写的程序跟操作系统进行交互,看下图

从上图中可以看出,通过 JVM 这个抽象层,Java 程序可以实现跨平台。JVM 只需要保证能够正确执行 .class 文件,就可以运行在 Linux、MacOS 等平台。做到 Java 跨平台的意义在于一次编译,处处运行。

2 JDK、JRE、JVM 的关系

  • JDK,Java 开发工具包(Java Development Kit),是整个 Java 开发的核心,包括了 Java 运行环境 JRE(Java Runtime Envirnment)、一堆 Java 工具(javac、java、jar 等)和 Java 基础的类库。

  • JRE ,指 Java 运行环境(Java Runtime Environment)。它主要包含两个部分,JVM 的标准实现和 Java 的一些基本类库。它相对于 JVM 来说,多出来的是一部分的 Java 类库。

  • JVM :Java 虚拟机(Java Virtual Machine),是 Java 能够跨平台的核心。所有的 Java 程序会首先被编译为 .class 的类文件,这种类文件可以在虚拟机上执行。

JVM、JRE、JDK 它们三者之间的关系,可以用一个包含关系表示:

3 Java 代码如何运行起来的

直接撸一把代码:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

上面 HelloWorld.java,它遵循的就是 Java 语言规范。其中,调用了 System.out 等模块,也就是 JRE 里提供的类库。

使用 JDK 的工具 javac 进行编译后,会产生 HelloWorld.class 的字节码。

Java 字节码是沟通 JVM 与 Java 程序的桥梁,使用 javap 来查看一下字节码:

0 getstatic #2 <java/lang/System.out>
2 ldc #3 <Hello World>
4 invokevirtual #4 <java/io/PrintStream.println>
7 return

Java 虚拟机采用基于栈的架构,其指令由操作码和操作数组成。这些字节码指令,就叫作 opcode,JVM 就是靠解析这些 opcode 和操作数来完成程序的执行的。

执行过程图:

其中 JVM 是重点。JVM 是一个虚拟机规范,有非常多的实现。其中最流行是 Oracle 的 HotSpot.

4 JVM 内存

JVM 是可运行 Java 代码的假想计算机,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收,堆 和 一个存储方法域。

以 JDK1.8 为例

从图中可以看出:

  • JVM 堆中的数据是共享的,是占用内存最大的一块区域。

  • 可以执行字节码的模块叫作执行引擎。

  • 执行引擎在线程切换时怎么恢复?依靠的就是程序计数器。

  • JVM 的内存划分与多线程是息息相关的。像我们程序中运行时用到的栈,以及本地方法栈,它们的维度都是线程。

  • 本地内存包含元数据区和一些直接内存

JVM 在运行时,会从操作系统申请大块的堆内内存,进行数据的存储。JVM 的运行时区域是栈,而存储区域是堆。

5 JVM 学习路线

一脚踏进门,修行靠个人。JVM 涉及到的知识很多,也比较难懂,需要一定的实操以便能理解吃透。

学习JVM,说白了就是对第4章节图中的各个模块理解。

附一张学习路线图,仅供参考

欢迎关注微信公众号:Coding我不配  
获取更多干货,一起每天进步一点点

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值