浅谈 JVM
话不多说,先上图
方法区(元空间)
在jdk1.8之前,叫做永久代,之后改名为元空间(Meta Space)。存放类元信息、静态变量、常量。
虚拟机栈
栈是线程私有的。生命周期随线程生而生,亡而亡。线程每调用执行一个方法,都会压入一个栈帧,方法执行完毕,就弹出栈帧。(当然了,并不能无禁止的一直压入栈帧)
局部变量表
顾名思义,存储方法参数、方法内定义的局部变量
操作数栈
通过相关指令对局部变量进行各种操作
动态链接
将符号引用变成直接引用
方法出口
就是方法执行完了后线程要去哪里执行呢?方法出口就存储了这个位置
程序计数器
也是线程私有的区域,每个线程都会分配计数器的内存,用来存放当前线程正在运行或者将要运行的JVM指令码对应的地址,或者说行号位置
堆
堆是运行时数据区最重要的一块内存区域。也就是常说的存放对象的区域了。
堆由新生代和老年代组成,新生代又分为Eden
区和Survivor
区,其中Survivor
区又分为from
区和to
区。
new
出来的新对象一般都存在Eden
区。那为什么要在这个区域呢,Eden
就是伊甸园的意思,这么说就很明了了吧。
再来个堆区域组成图
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)