JVM详解

一、介绍(什么是JVM)

JVM(Java Virtual Machine,Java虚拟机)是一个能够执行Java字节码的虚拟机,它是Java的核心,负责管理Java程序的运行时环境。

JVM的主要工作是将编译好的Java源代码转换为字节码,然后执行这些字节码。在执行过程中,JVM会负责垃圾回收、内存管理、线程管理、安全管理等任务,同时还能够提供诊断和调试工具来帮助开发人员更好地了解和调试Java程序。

二、原理(结构|区域)

JVM的结构主要包括三个部分:类加载器、运行时数据区和执行引擎。

类加载器(ClassLoader):负责加载Java类文件,将类文件加载到内存中并转换为Java Class对象,然后存放在运行时数据区的方法区中。

运行时数据区(Runtime Data Area):是JVM内存的逻辑结构,包括方法区、堆、虚拟机栈、本地方法栈、程序计数器等。

执行引擎(Execution Engine):执行字节码指令,负责执行Java程序的运行时环境。执行引擎主要包括解释器和即时编译器(JIT)。

1> 解释器(Interpreter):将字节码解释成机器码并执行。

2> 即时编译器(Just-In-Time Compiler):在运行时将字节码编译成本地机器码,然后再执行。

JVM区域分为五大区域:方法区、堆区、虚拟机栈、本地方法栈以及程序计数器。

方法区(Method Area):存储已被加载的类信息(字节码文件)、常量、静态变量等。当然类加载机制也是在这区域执行:

堆区(Heap):存储对象实例。

虚拟机栈(Java Virtual Machine Stack):存储方法调用的局部变量、参数、返回值等。其最小单位栈帧又分为四部分:

局部变量表:存放了编译时期的各种基本数据类型(8种),对象引用(reference类型)和return Address类型(指向了一条字节码指令的地址)

操作数栈:储存了编译时期的各基本数据类型,更加准确地说是对应的方法参数和局部变量

外部引用:是调用外部方法的动态链接的引用

方法返回地址:储存了调用该方法的pc寄存器的值

本地方法栈(Native Method Stack):为执行Native方法服务。

程序计数器(Program Counter):用于指示JVM正在执行的字节码指令的地址,也就是记录了当前线程上次执行的位置

至于为什么记录上一次执行到的位置?

是因为当前线程在执行的过程中,可能执行权被其他线程抢走形成的中断,所以需要记录中断时执行到的字节码位置

为什么被中断?两种情况,一是读写磁盘的时候,二是读写网络的时候

相关推荐
Tingjct6 小时前
线程详细讲解---聚焦linux
linux·服务器·jvm
myy-learn6 小时前
32 SQLITE数据库
jvm·数据库·sqlite
wuminyu9 小时前
JVM锁膨胀与Futex源码解析
java·linux·c语言·jvm·c++
郝学胜-神的一滴9 小时前
C++11 工程级应用 08:Lambda表达式与Tuple元组
开发语言·jvm·c++·python·程序人生·开源
袋鼠云数栈1 天前
整库迁移与分库分表同步:批量数据搬迁的配置简化思路
jvm·数据库·oracle
Mr. zhihao1 天前
JVM 偏向锁 4 秒延迟:从源码动机到 JEP-374 废弃全链路
jvm·并发·偏向锁
孙克旭_1 天前
JVM 入门详解:JVM、JRE、JDK 区别,JVM 基础结构梳理
java·开发语言·jvm
随遇而安zx1 天前
【地基篇】---JVM 内存结构知识点(Java 8 运行时数据区深度解析)
java·开发语言·jvm
恒拓高科WorkPlus1 天前
企业如何搭建安全内部通讯平台|企业内部通讯平台怎么选才更安全?
jvm·数据库·安全
随遇而安zx1 天前
【地基篇】---JVM 类加载 源码解析(基于 Java 8)
java·jvm·python