- 博客(54)
- 收藏
- 关注
原创 G1垃圾回收器
停顿时间可控:通过参数精准控制最大停顿时间,适配延迟敏感场景;内存管理灵活:Region角色动态切换,无需固定分代比例,适配不同内存需求;碎片控制优秀:基于标记-复制算法,相比CMS(Concurrent Mark Sweep)减少内存碎片产生;资源消耗均衡:并发阶段CPU资源占用更均衡,对应用性能影响较小;大对象管理高效:专属巨型Region分配与回收策略,减少大对象对普通内存的干扰
2025-12-23 18:02:24
828
原创 类加载的过程
类加载的五个阶段是 JVM 将字节码转换为可执行类型的完整流程:加载:获取字节码并生成 Class 对象。验证:确保字节码合法安全。准备:为静态变量分配内存并设默认值。解析:将符号引用转为直接引用。初始化:执行静态代码,设置类变量的最终值。
2025-12-23 17:59:04
507
原创 匿名内部类是什么
匿名内部类是 Java 提供的语法糖,通过隐藏类名和自动生成关联代码,简化了临时类实例的创建。其底层本质是编译器生成的命名内部类,通过持有外部类引用或复制局部变量实现对外部环境的访问。理解其解糖过程,有助于避免因局部变量修饰符、外部类引用等问题导致的 bugs。
2025-12-23 17:57:58
263
原创 什么是语法糖
语法糖的核心作用是 “简化编码”,但最终都会被编译为 JVM 可执行的基础语法。理解语法糖的解糖过程,有助于深入理解 Java 代码的底层执行逻辑,避免因语法糖的 “便捷性” 而忽略潜在的性能问题(如频繁创建 StringBuilder)或类型问题(如泛型擦除导致的强转异常)。
2025-12-23 17:56:27
1026
原创 禁用显示回收对直接内存的影响
禁用显式回收(通过 JVM 参数-XX:+DisableExplicitGC)对直接内存的核心影响是:延缓直接内存回收时机,增加内存溢出和泄漏风险,尤其在依赖System.gc()辅助释放的场景中影响显著
2025-12-22 16:15:33
245
原创 分配与回收原理
直接内存的分配与回收核心是 “Native 层分配内存 + Java 层持有引用 + Cleaner 机制回收”,全程需 JVM 与操作系统协同
2025-12-22 16:14:37
547
原创 什么是Minor GC
Minor GC(也叫Young GC)是 JVM 针对新生代内存的垃圾回收过程,专门清理新生代中不再被引用的对象,是 JVM 中最频繁的垃圾回收类型。
2025-12-09 17:30:52
255
原创 什么是Full GC
简单来说,Full GC 是 “全面清理”,覆盖整个堆,代价较高,应尽量减少其发生频率;而 Minor GC 是 “局部清理”,仅针对新生代,效率更高
2025-12-09 17:29:35
676
原创 如何在代码中管理对象引用的生命周期?
管理对象引用生命周期的核心原则最小作用域:能用局部变量就不用全局变量,减少对象存活时间。主动清理:容器中的对象、监听器、ThreadLocal 等,使用后必须手动移除引用。按需选择引用类型:核心对象用强引用,缓存用软引用,临时数据用弱引用。警惕隐式引用:内部类、线程池、监听器等场景易产生隐藏引用链,需针对性处理。
2025-12-09 17:26:40
581
原创 JAVA中引用类型分类
在 Java 中,引用类型决定了对象在垃圾回收时的行为,主要分为四种类型:强引用、软引用、弱引用和虚引用,它们的特性和用途各不相同
2025-12-09 17:22:24
510
原创 什么是垃圾回收,为什么要垃圾回收以及垃圾回收的底层原理是什么
垃圾回收是自动识别并释放垃圾对象内存的机制,核心价值是解决手动内存管理的痛点;其底层原理围绕 “判定垃圾(可达性分析为主)→ 回收内存(标记 - 清除 / 复制 / 标记 - 整理)→ 优化效率(分代回收、并发 / 并行执行)” 展开,最终实现内存资源的高效复用与程序稳定性的平衡。
2025-12-09 17:18:45
599
原创 JVM内存结构之堆
堆是 JVM 内存管理的核心,其设计围绕 “分代假说” 实现精细化内存管控:新生代通过 Minor GC 快速淘汰短生命周期对象,老年代通过 Full GC 管理长生命周期对象,元空间(或永久代)存储类元数据。理解堆的结构、对象存储形式及调优方法,是解决 Java 程序内存泄漏、OOM 异常和性能瓶颈的关键。分代设计的原理与新生代、老年代的协作机制;对象在堆中的存储结构(对象头、实例数据、对齐填充);永久代与元空间的差异及版本迁移影响;堆内存调优的核心参数与实践原则。
2025-12-08 10:53:38
688
原创 JVM内存结构之方法区
在 Java 虚拟机(JVM)的内存模型中,方法区(Method Area)是线程共享的核心区域,承担着类元数据、共享数据存储与管理的关键职责,其设计与实现直接影响 JVM 的稳定性和高效性。其结构设计遵循三大规则:。方法区中存储的类元数据,依赖方法表(Method Table,又称虚方法表 vtable) 实现面向对象的核心特性 —— 动态绑定(多态),其设计直接决定了方法调用的效率。JDK 1.2 后,Java 扩展了引用的定义,分为四类,直接影响对象(包括方法区关联对象)的垃圾判断时机:。
2025-12-08 10:53:31
526
原创 本地方法栈和Java虚拟机栈的具体区别是什么?
Java 虚拟机栈:服务的 Java 方法是 JVM 的 “内部执行单元”,全程受 JVM 规范约束,结构标准化、跨平台、配置灵活;本地方法栈:服务的本地方法是 JVM 的 “外部扩展单元”,依赖本地平台和非 Java 语言的运行时,结构平台化、实现灵活、配置受限。
2025-12-08 10:53:06
749
原创 JVM内存结构之本地方法栈
本地方法栈的运行过程与方法调用链路紧密绑定,核心流程如下:方法调用触发栈帧创建:当 Java 方法调用一个native方法时,JVM 会在本地方法栈中创建一个新的 “本地方法帧”。栈帧存储数据:该帧会存储当前本地方法的局部变量、操作数等信息,确保方法执行时能快速访问数据。方法执行与返回:本地方法执行完成后,其对应的栈帧会被弹出栈,释放内存;同时将执行结果返回给调用者(Java 方法或其他本地方法)。异常触发场景:若本地方法调用层级过深(如递归调用未终止),会导致栈帧不断创建,超出本地方法栈的内存
2025-12-08 10:52:57
358
原创 JVM内存结构之程序计数器
PC 寄存器是 JVM 执行引擎的 “指令指针”,通过线程私有、记录指令地址的特性,保证了:单线程下指令的顺序执行;多线程下切换后的执行恢复;分支、循环、异常等控制逻辑的实现。它虽占用内存极小,却是 JVM 实现多线程并发和指令正确执行的基础,是理解 JVM 运行机制的关键组件之一。
2025-12-02 16:00:26
430
原创 JVM内存结构之虚拟机栈
虚拟机栈(JVM Stack)是 Java 虚拟机规范中定义的一块线程私有的内存区域,其生命周期与所属线程完全一致,主要用于支撑 Java 方法的调用、执行与返回,是 JVM 内存模型的核心组成部分之一。
2025-12-02 15:56:21
764
原创 在JVM中栈内存溢出的原因以及解决方法
JVM 栈溢出的核心是栈深度超限或栈内存不足,解决需从代码逻辑(如递归、调用链)、JVM 参数配置(如-Xss)和资源管理(如线程数量)三方面入手。关键是平衡栈内存分配与业务需求,同时通过工具精准定位问题根源
2025-12-02 15:53:37
658
原创 栈帧之方法返回地址的详细解释
方法返回地址的核心作用是 “维持程序执行的连续性”:正常返回时,它是 “精准回归的书签”,确保调用者能从暂停处继续执行;异常返回时,它是 “应急导航”,通过异常处理器表决定程序的下一步走向,避免异常导致程序 “无序崩溃”。
2025-12-02 15:48:42
1046
原创 什么是偏移量
偏移量(Offset) 指的是某个数据或指令相对于基准位置的距离(通常以字节为单位),用于快速定位内存中的目标。它是一种高效的地址计算方式,避免了直接使用绝对内存地址的复杂性。
2025-12-02 15:45:20
910
原创 栈帧之动态链接的详细解释
动态链接是 JVM 实现 “运行时方法绑定” 的核心机制:它通过将符号引用动态转换为直接引用,解决了编译期无法确定方法实际实现的问题。配合虚方法表,既保证了多态特性(根据实际类型调用方法),又兼顾了执行效率。没有动态链接,Java 的继承、多态等面向对象特性就无法落地,程序也会失去灵活性。
2025-11-05 20:49:09
817
原创 栈帧之操作数栈的详细解释
操作数栈是 JVM 执行引擎的 “运算核心”,通过入栈、出栈、运算的简单操作,支撑了所有方法的执行逻辑:对于基本运算,它是临时存储中间结果的 “缓冲区”;对于方法调用,它是传递参数和返回值的 “传送带”;其基于栈的设计让字节码指令更简洁(无需指定操作数地址,只需操作栈顶元素),同时保证了跨平台性(不依赖特定 CPU 的寄存器结构)。
2025-11-05 20:46:37
696
原创 栈帧之局部变量表的详细解释
局部变量表是方法局部变量的 “存储空间”,其核心作用是:直接存储基本类型的值,避免频繁访问堆内存,提升效率;存储对象引用,通过引用间接操作堆中的对象实例;通过固定索引和编译期确定的容量,保证方法执行时变量访问的高效性和确定性。
2025-11-04 16:49:12
768
原创 栈帧的数据结构
栈帧是方法执行的 “状态快照”,其数据结构通过局部变量表、操作数栈、动态链接和返回地址的组合,完整记录了方法执行所需的所有信息。存储上依赖线程私有的虚拟机栈,通过编译期确定的定长结构实现高效的分配与回收,是 JVM 支撑方法调用和执行的核心机制。
2025-11-04 16:46:04
790
原创 保证线程安全的三大核心要素
在多线程共享对象时,操作的原子性、可见性、有序性是保证线程安全的三大核心要素。如果这三者无法保证,就可能出现数据不一致、逻辑错乱等问题。以下是具体解释:
2025-11-04 16:03:40
732
原创 JVM的内存结构以及内存结构的工作原理和作用
JVM 的内存结构(即 “运行时数据区”)是 JVM 管理内存的核心,不同区域负责存储不同类型的数据,并有明确的生命周期和功能。理解内存结构是掌握 JVM 工作原理、排查内存溢出(OOM)和优化性能的基础。
2025-11-04 16:00:57
680
原创 JVM的工作原理是什么?
VM 的工作流程是:类加载器加载字节码 → 验证并初始化类 → 在运行时数据区分配内存 → 执行引擎(解释器 / JIT)翻译并执行字节码 → 垃圾回收器自动管理内存。通过这套机制,JVM 屏蔽了底层硬件和操作系统的差异,让 Java 程序实现跨平台运行,同时通过 JIT 编译和 GC 优化,保证了执行效率和内存安全。
2025-11-04 15:58:30
729
原创 spring中事物的传播行为
Spring 事务传播行为基于AOP 机制和事务管理器(PlatformTransactionManager) 实现:当一个事务方法被调用时,AOP 切面会拦截调用,检查当前是否存在事务(通过 TransactionSynchronizationManager 维护线程本地的事务状态)。根据传播行为规则,决定是复用当前事务、创建新事务、挂起事务还是抛异常。新事务的创建由事务管理器负责(如 DataSourceTransactionManager 会从数据源获取连接,并设置 autoCommit=false
2025-10-27 15:26:58
822
原创 Spring AOP底层原理源码详解
Spring AOP 本质是动态代理 + 责任链模式的结合,通过代理对象在目标方法执行前后织入增强,实现横切逻辑与业务逻辑的解耦。理解 ProxyFactory、InvocationHandler(或 MethodInterceptor)、MethodInvocation 的交互是掌握源码的关键。
2025-10-27 15:26:47
834
原创 生成Spring AOP代理对象的具体过程
Spring AOP 生成代理对象的过程是其核心功能之一,本质是通过动态代理技术(JDK 动态代理或 CGLIB 代理)为目标对象创建一个代理实例,并将切面逻辑(通知)织入代理对象的方法中。以下是生成代理对象的具体步骤,结合源码核心逻辑展开:
2025-10-27 15:26:40
542
原创 AOP的核心概念以及术语
AOP(Aspect-Oriented Programming,面向切面编程)是 Spring 框架的核心特性之一,它通过分离横切关注点(如日志、事务、安全等)与业务逻辑,实现代码复用和解耦。理解 AOP 的核心概念和术语是掌握 AOP 的基础。
2025-10-27 15:26:21
929
原创 spring如何解决循环依赖
Spring 通过三级缓存解决单例 Bean 的循环依赖:三级缓存(工厂)→ 二级缓存(半成品)→ 一级缓存(成品)。核心逻辑:实例化后提前暴露半成品 Bean,供依赖方先行使用,避免死循环。限制:仅支持单例 Bean 的字段 / Setter 注入,不支持多例或构造器注入的循环依赖
2025-10-21 10:08:09
267
原创 spring中如何进行实例化
Spring 实例化 Bean 的核心是反射机制,通过动态调用构造器或工厂方法创建对象。主要方式:构造器实例化(最常用)、静态工厂方法、实例工厂方法。底层流程:解析配置生成 BeanDefinition → 反射创建实例 → 后续依赖注入和初始化
2025-10-21 10:06:44
812
原创 什么是Bean?spring如何管理Bean
Bean:被 Spring 容器管理的对象,是应用的核心组件。管理方式:容器通过解析配置、创建实例、注入依赖、管控生命周期等步骤管理 Bean。底层原理:基于反射机制解析配置元数据,通过 IOC 容器实现对象的创建和依赖自动组装,核心是 “控制反转” 和 “依赖注入”。
2025-10-21 10:04:10
687
原创 什么是spring容器
在 Spring 框架中,Spring 容器(Spring Container) 是核心组件,它负责管理应用中所有的对象(称为 “Bean”)的生命周期,包括对象的创建、初始化、依赖注入、配置和销毁等。简单来说,它就像一个 “对象工厂” 或 “管家”,统一管控应用中的组件,让开发者无需手动创建和管理对象,从而实现组件的解耦和复用。
2025-10-21 10:00:20
266
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅