JVM知识

JVM是Java的核心,虽然对于普通开发者这块平常可能不太关注,但是如果一些基本原理不理解,有的时候发生一些疑难异常就会让我们摸不到头脑,无法解决这种意想不到的问题。JVM是通过指令系统、寄存器、栈结构、存储区域和垃圾回收来执行我们的程序。大家可以通过下面的JVM架构图更直观的理解。


Class Loader:JVM通过模块将Class文件加载到JVM内存中。

Execution Engine:执行引擎也叫解释器,负责解释命令,提交OS执行。

JNI:Java Native Interface直接操纵机器硬件,如Java程序驱动打印机。

Stack:栈是在线程创建时创建,线程结束栈内存也释放,不存在GC问题。栈内存存储局部变量、程序运行状态、方法返回值等数据。栈中的数据以栈帧存在。栈帧是一个内存区块,是有关方法和运行期数据的数据集。当一个方法fun1被调用就产生一个栈帧Frame1,压入栈中,fun1方法又调用fun2方法,产生栈帧Frame2压入栈。

Heap:各条线程共享的运行时内存区域,所有类实例和数组对象分配内存的区域,由GC管理。堆可以划分为新生区、养老区和永久区,如下图。


新生代:类在这里产生和应用,最后被垃圾回收。所有的类在伊甸区被new出来,当伊甸区满了,GC不会对该区不用的对象销毁,剩余有用的转到幸存区。

老年代:用于存放生成周期比较长的对象。

永久代:存放JDK自带的class,interface。


### Jvm知识体系结构图 JvmJava Virtual Machine)的知识体系涵盖了多个方面,主要包括以下几个部分: #### 1. JVM架构概述 JVM的核心目标是实现Java程序的跨平台特性。其基本工作流程如下: - Java源码被编译成字节码(`.class` 文件),这些字节码可以在任何支持JVM的操作系统上运行[^1]。 - JVM通过抽象底层硬件环境(如操作系统和CPU结构),提供了统一的代码执行方式。 #### 2. 类加载机制 类加载过程由类加载器负责完成,主要分为三个阶段:加载、链接和初始化。其中,双亲委派模型是一种重要的设计模式,用于管理类加载的过程。具体来说: - 双亲委派模型规定,当一个类加载器收到类加载请求时,会优先将该请求委托给父类加载器处理;只有当父类加载器无法加载时,当前类加载器才会尝试加载[^4]。 - 这种机制可以有效避免重复加载相同的类,并确保基础类库的一致性和安全性。 #### 3. 运行时数据区 JVM在运行期间使用的内存划分为几个不同的区域,包括但不限于以下几部分: - **方法区**:存储已被虚拟机加载的类信息、常量、静态变量以及即时编译后的代码等[^3]。 - **堆**:所有线程共享的一个区域,用来存放对象实例和数组。 - **栈**:每个线程私有的区域,保存局部变量表、操作数栈、动态链接及返回地址等内容。 - **本地方法栈**:类似于Java栈,但服务于Native Method调用。 - **PC寄存器**:记录每条线程正在执行的指令位置。 #### 4. 垃圾回收机制 (Garbage Collection, GC) 为了自动管理内存资源,JVM引入了垃圾收集的概念。以下是GC的关键组成部分: - **可达性分析算法**:从GC Roots出发遍历引用链,标记存活的对象并清理不可达对象[^3]。 - 不同类型的垃圾收集器采用多种策略来优化性能,比如串行收集器、并行收集器、CMS(Concurrent Mark-Sweep)、G1等。 #### 5. 执行引擎 执行引擎的主要职责是从字节码转换为机器可识别的语言形式。这一过程中涉及到了解码、解释执行或即时编译(JIT Compilation)等多个步骤。 --- ### 结构化表示 下面给出一张简化版的JVM知识体系结构图描述: ```plaintext +-----------------------------+ | JVM Architecture | +-----------------------------+ / | \ ClassLoader Runtime Data Areas Execution Engine | | | +---------+-------+ +-----+------+ +------+------+------+ | BootstrapClassLoader | | Heap & Stack | | Interpreter/JIT Compiler| | ExtensionClassLoader| | Method Area | +--------------------+ | ApplicationClassLoader| +----------------------+ ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值