- 博客(8)
- 收藏
- 关注
原创 JVM学习打卡day08--GC回收算法
本文系统介绍了JVM垃圾回收的三大算法及分代回收机制: 三大回收算法: 标记-清除:简单但产生内存碎片 标记-整理:解决碎片问题但移动开销大 复制算法:高效但空间利用率低 分代回收原理: 基于对象存活时间将堆分为新生代(复制算法)和老年代(标记-整理/清除) 对象生命周期:Eden→Survivor(年龄增长)→老年代(15次GC后晋升) 关键配置参数: 堆大小(-Xms/-Xmx) 新生代比例(-Xmn/-XX:SurvivorRatio) 晋升阈值(-XX:MaxTenuringThreshold) 分
2026-06-23 15:00:29
317
原创 JVM学习打卡day06--直接内存
直接内存是Java程序绕过JVM堆,直接向操作系统申请的一块物理内存,也称为堆外内存(Off-Heap Memory)。它主要用于提升I/O操作的性能,是Java NIO实现高性能网络通信和文件处理的关键技术。
2026-06-14 19:54:17
447
原创 JVM学习打卡day05--StringTable
StringTable(字符串常量池,也叫字符串常量池表)是 JVM 内部的一个全局哈希表(`Hashtable` 结构),专门用来缓存字符串对象。它的核心作用是避免堆中创建内容相同的多个 String 对象,从而节省内存并提高性能。示例启动参数:bash java -XX:StringTableSize=100003 -XX:+PrintStringTableStatistics -Xmx10m MyClass 2. 统计信息解读 当开启 -XX:+PrintStringTableStatistics
2026-06-13 14:57:49
254
原创 JVM学习打卡day04--方法区
摘要: 方法区是JVM线程共享的内存区域,存储类结构信息(常量池、字段/方法元数据等)。JDK7前为永久代,JDK8+改为元空间(本地内存)。与线程私有的虚拟机栈不同,方法区存放静态类数据,生命周期与JVM一致,溢出时抛出OutOfMemoryError。核心区别包括存储内容(类元数据vs方法运行时状态)、线程模型(共享vs私有)及内存异常类型。常见溢出原因包括动态类生成过多或类卸载失败。运行时常量池作为类独有区域,存储字面量和符号引用,JDK7后字符串常量池移至堆中,避免方法区因此溢出。
2026-06-12 23:15:21
383
原创 JVM学习打卡day03--堆
当堆无法再为新对象分配内存,并且垃圾收集器也无法回收足够空间时,就会抛出。这是生产环境最常见的 OOM 错误之一。
2026-06-11 22:23:41
160
原创 JVM学习打卡day02--栈
本文介绍了JVM中虚拟机栈和本地方法栈的核心概念。虚拟机栈是线程私有的内存空间,由栈帧构成,用于方法调用时的内存管理。其特点包括:栈内存自动回收不涉及GC;栈大小需平衡性能和资源消耗;局部变量线程安全性取决于是否逃逸;栈溢出主要由递归过深或循环调用导致;可通过工具诊断线程问题。本地方法栈与虚拟机栈结构相似,但服务于JNI调用的本地方法,同样存在栈深度限制和内存不足的风险。文章强调了合理设置栈大小和避免方法调用无限循环的重要性。
2026-06-10 13:36:30
213
原创 JVM学习打卡day01--JVM初步认识
JVM(Java虚拟机)是运行Java字节码的虚拟环境,核心优势包括跨平台执行、自动内存管理、数组越界检查和多态支持。Java程序运行流程:编写.java源码 → 编译为.class字节码(含结构化中间表示) → JVM加载并校验 → 通过解释器或JIT编译器(针对热点代码优化)转换为机器码执行。这种"一次编写,到处运行"机制结合了解释执行的快速启动和JIT编译的高效运行特性,构成了Java的核心技术栈。学习JVM需深入理解字节码结构、类加载机制、内存管理等关键技术点。
2026-06-09 22:01:50
331
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅