JVM篇(一):初识JVM

JVM篇(一):初识JVM

Lazzz Lv1

JVM概述

JVM(Java Virtual Machine,Java虚拟机)是一个虚拟化的计算环境,负责执行Java字节码并提供运行Java程序所需的系统资源,它是Java平台的一部分,能够使Java程序具有跨平台的特性,实现“一次编写,到处运行”。

JVM工作流程

编译阶段: 从源代码到字节码

  • 首先是我们熟悉的 .java 格式的文件(即 Java 源代码),通过 javac 编译器编译成 .class 文件(即 Java 字节码)
  • Java 字节码是 JVM 能识别的 “通用指令集”

类加载阶段: 将字节码载入JVM

Class Loader(类加载器)

负责将 .class 文件加载到 JVM 中,完成”加载、链接、初始化”三个步骤,最终把类的信息存到 JVM 的内存区域

JVM运行时数据区(核心区域)

信息

运行时数据区为 JVM 在运行时使用的内存结构,该区域为 JVM 的核心区域,通常 JVM 的内存模型主要就是指的该区域。主要包含以下5个组件:

  • Heap: 堆
  • Method Area: 方法区
  • Program Counter Register: 程序计数器
  • Java Stack: Java虚拟机栈
  • Native Methd Stack: 本地方法栈

Heap(堆)

存储对象实例(比如 new Object() 创建的对象实例就存在堆中),堆在运行时数据区中是一片线程共享的内存

Method Area(方法区)

方法区中存储的内容为已加载的类信息(比如构造方法、接口定义等)、常量、静态变量等。方法区在运行时数据区中和堆一样,也是线程共享的内存区域

Program Counter Register(程序计数器)

程序计数器为线程私有的,每个线程都拥有独立的计数器,其作用为记录当前线程执行的字节码指令地址

Java Stack(Java 虚拟机栈)

Java 虚拟机栈为线程私有,每个线程都会创建一个Java虚拟机栈。Java虚拟机栈主要存储方法的局部变量、操作数栈等,每个方法对应一个栈帧

Native Method Stack(本地方法栈)

类似 Java 虚拟机栈,同样为线程私用,但用于执行”本地方法”

执行与本地方法调用

Execution Engine(执行引擎)

负责执行.class 里的字节码,可以是“解释执行”或“即使编译(JIT)”执行过程中会和运行时数据区交互。

  • 解释器(Interpreter): 将字节码解释称机器码逐条执行,但效率较低。
  • 即时编译器(JIT Compiler): 将热点代码编译成机器码,提高执行效率。

Native Interface(本地接口)

如果需要调用 Native Method(本地方法,比如C/C++写的方法) ,会通过本地接口作为桥梁,让 JVM 具备调用非 Java 实现的源码。

Java栈、本地方法栈、程序计数器不会有垃圾回收,否则程序会死掉。百分之99的JVM调优都是在方法区和堆(99%是堆)中调优,Java栈、本地方法栈、程序计数器不会有垃圾的存在。

  • 标题: JVM篇(一):初识JVM
  • 作者: Lazzz
  • 创建于 : 2025-11-20 19:25:39
  • 更新于 : 2025-12-12 17:36:50
  • 链接: https://blog.bukkitmc.cn/posts/6de0a13d/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论