03-21 JVM 技术博客 Java (2)《虚拟机栈》 一、核心原理与结构 栈内存模型 每个线程私有,生命周期与线程绑定(线程启动创建,线程终止销毁) 栈结构:先进后出(LIFO)的栈帧集合 栈帧组成: 局部变量表(存储基本类型+对象引用) 操作数栈(执行引擎计算用) 动态连接(方法符号引用) 方法返回地址(正常返回/异常返回) 栈帧生命周期 方法调用 5 0 0
03-21 JVM 技术博客 Java (4)《方法区》 一、核心原理与结构 逻辑定义 线程共享区域,存储已加载类的元数据 JVM规范定义的抽象概念,具体实现由JVM厂商决定 核心组成: 类元数据(Class metadata) 类名、父类/接口、方法/字段信息 访问标志、运行时常量池 静态变量(Static variables) 类级别共享数据 JIT编 2 0 0
03-21 JVM 技术博客 Java (3)《堆内存》 一、核心原理与结构 内存模型定义 线程共享区域,所有对象实例和数组存储在此 JVM启动时通过-Xms和-Xmx参数设置初始/最大堆大小 典型结构划分(以G1收集器为例): 年轻代(Young Generation)≈1/3堆内存 Eden区(默认8:1:1) From Survivor To Sur 1 0 0
03-21 JVM 技术博客 Java (5)《方法执行流程》 核心机制:JVM通过执行引擎逐条解释字节码指令,依托栈帧(Stack Frame)管理方法执行上下文。 1. 类加载与初始化 类加载器:将字节码文件加载至JVM,常量池内容(如字面量、符号引用)复制到运行时常量池(Runtime Constant Pool)。 大字面量处理:若常量值 > short 1 0 0
03-21 JVM 技术博客 Java (6)《常量池深度解析》 一、常量池分类 类型 存储位置 触发时机 内容 生命周期 线程共享 字节码常量池 .class 文件 编译期 类名、方法名、字符串字面量等 持久化磁盘 否 运行时常量池 方法区(Metaspace) 类加载时 符号引用 → 直接引用 JVM 运行期间 是 字符串常量池 堆(JDK 7+) 首次使用字 2 0 0
03-21 JVM 技术博客 Java (8)《垃圾回收》 核心定位 主要 & 最频繁 GC:集中于堆内存。 对象回收判断机制 引用计数法 逻辑:引用存在则+1,消失则-1;计数为0则回收。 缺陷:循环引用(如A→B, B→A)导致计数永不归零 → 内存泄漏(分配内存后无法回收,持续增长)。 Java未采用此法。 可达性分析(主流) GC Root(不可回收 2 0 0
03-21 JVM 技术博客 Java (9)《G1》 概述:G1(Garbage-First)是Java专为超大堆内存设计的垃圾回收器,与CMS、SerialGC、ParallelGC并列。核心目标:低延迟(<200ms停顿)+ 高吞吐量,适用于大内存(>4GB)场景。 适用场景 低延迟要求(如实时系统) 超大堆内存(>4GB,避免Full GC) 需 2 0 0
03-21 JVM 技术博客 Java (7)《字符串池深度解析》 一、字符串池基础概念 延迟加载机制 常量池中的字符串仅是符号,首次使用时才会从运行时常量池中取出,并在字符串池中创建对象。 示例:String s = "abc"; 会在首次访问时创建对象。 复用机制 字符串池会复用已存在的字符串对象,避免重复创建。 示例:String s1 = "abc"; St 2 0 0
03-21 JVM 技术博客 Java (1)《程序计数器(Program Counter Register)》 一、核心作用与工作原理 1. 核心功能 指令指针角色:记录当前线程下一条待执行字节码指令的地址(偏移量),是 JVM 执行引擎的“程序指针”。 控制流实现基础: 顺序执行:PC 自动递增至下一条指令; 分支跳转:如 if、for、while、goto 等通过直接修改 PC 值实现跳转; 异常处理:发 5 0 0