- 博客(106)
- 收藏
- 关注
原创 彻底搞懂 Redis 一致性哈希:原理、算法、优缺点与实战应用
数据节点索引 = hash(key) % 节点数量N集群有 3 个 Redis 节点:node1、node2、node3100 % 3 = 1 → 数据落在 node2一致性哈希是 1997 年提出的分布式哈希算法,核心目标在节点增加 / 删除时,只影响极小部分数据的分布保证数据均匀、稳定、高可用节点数量少节点在哈希环上分布不均匀大量 key 集中落在某一个节点导致节点负载不均,部分节点压力过大构建 0 ~ 2^32 的哈希环。
2026-04-01 17:19:53
544
原创 一文吃透Redis集群:架构、原理、搭建与实战优化
Redis集群通过“哈希槽分片”实现了数据的分布式存储,突破了单机Redis的容量和性能瓶颈;通过“主从复制+自动故障转移”实现了高可用性,无需人工干预即可应对节点故障;通过“客户端智能路由”保证了访问效率,无需第三方中间件代理。适用场景:业务并发量高(QPS超过10万),单机Redis无法承载。数据量大(超过单机内存上限),需要分布式存储。业务对可用性要求高(需7x24小时服务),不能接受单点故障。
2026-04-01 17:16:03
881
原创 Redis核心理论:数据删除与淘汰策略详解(从原理到实战)
Redis 不是单一使用某一种删除策略,而是三者结合:日常情况下,通过「惰性删除」保证 CPU 高效,避免不必要的检查;每隔一段时间,通过「定期删除」批量清理部分过期 key,减少内存浪费;当内存不足时,通过「主动删除」优先清理所有过期 key,为新数据腾出空间;若主动删除后内存仍不足,则执行「数据淘汰策略」。
2026-03-31 22:37:26
432
4
原创 深入理解 MySQL 事务:从基础到实战,一篇吃透
事务是一组不可分割的数据库操作集合,要么全部执行成功,要么全部执行失败,不会出现中间状态。银行转账A 账户扣 100 元B 账户加 100 元这两步必须同时成功或者同时失败如果 A 扣钱了、B 没加钱 → 数据错乱,用户损失如果 A 没扣钱、B 加钱了 → 银行损失事务就是用来杜绝这种中间状态,保证数据绝对可靠。事务:一组操作,要么全成,要么全败。ACID:原子性、一致性、隔离性、持久性,事务的灵魂。并发问题:脏读、不可重复读、幻读、丢失更新。隔离级别:MySQL 默认可重复读。
2026-03-31 22:30:14
537
原创 Redis 持久化机制超详细详解(RDB+AOF 双方案 + 生产实战)
RDB:快照式,快、小、易备份,适合备份与灾难恢复;AOF:日志式,安全、易追溯,适合核心业务数据;生产最优:双开 RDB+AOF,兼顾数据安全与恢复效率。掌握持久化原理、配置项和最佳实践,才能确保 Redis 在生产环境稳定运行,避免数据丢失事故。
2026-03-30 15:06:17
530
原创 Redis配置文件(redis.conf)超详细详解
Redis的强大之处不仅在于其高性能的内存操作,更在于通过配置文件(默认名为redis.conf)可以灵活定制其运行行为——小到端口、密码配置,大到持久化策略、内存管理、高可用部署,都能在配置文件中实现精准控制。很多新手使用Redis时,习惯直接用默认配置启动,遇到数据丢失、性能瓶颈、安全漏洞时才慌了神,本质上是对redis.conf的核心配置项不了解。今天这篇博客,就带大家从头到尾吃透Redis配置文件,结合实际使用场景,逐模块拆解每一个关键配置,无论是开发环境调试还是生产环境部署,都能直接参考使用。
2026-03-30 14:54:30
1256
原创 AQS模型详解:Java并发的核心同步框架(从原理到实战)
AQS作为Java并发包的核心骨架,其核心价值在于“封装通用同步逻辑,简化同步工具的开发”——它将线程排队、阻塞唤醒、状态管理等复杂逻辑封装起来,让开发者只需关注“资源的获取与释放”,就能快速实现安全高效的同步工具。一个volatile状态变量(state)+ 一个FIFO双向等待队列 + 一套模板方法 + 两种工作模式,四种组件协同工作,实现了线程的有序竞争与高效调度。
2026-03-29 22:40:50
677
原创 Redis八大核心数据类型详解:从底层实现到实战落地
Redis八大核心数据类型,各有其底层实现和适用场景,选择正确的类型,能大幅提升Redis的性能和内存利用率,避免不必要的性能瓶颈。以下是核心对比和选型建议,方便大家快速选型:数据类型核心特性底层实现核心场景String万能、灵活,可存字符串/数字/二进制SDS(简单动态字符串)缓存热点数据、计数器、分布式锁Hash对象型存储,可单独操作字段存储用户/商品信息、小对象集合List有序、可重复,两端操作快quicklist(双端链表+ziplist)
2026-03-29 22:24:14
372
原创 Redis底层原理与实战优化技巧详解:从底层到落地,避开所有坑
Redis的底层原理是优化的基础,实战技巧是落地的关键,而缓存三大难题的解决方案是保障服务稳定的核心。总结下来,核心要点如下:底层原理:掌握数据结构的底层实现(SDS、ziplist、dict、跳跃表)、内存管理、IO模型、持久化机制,才能理解Redis的性能瓶颈和优化方向。实战优化:从内存、IO、命令三个维度优化性能,从密码、IP、端口三个维度保障安全,从主从、哨兵、集群三个维度实现高可用,全方位提升Redis的稳定性和性能。
2026-03-29 22:11:33
366
原创 Redis核心概念与特点详解:从基础到实战,一文吃透
Redis的核心价值在于“高性能+高灵活+高可靠”:以全内存存储和单线程模型实现极致性能,以丰富的数据结构适配各类业务场景,以持久化和高可用方案保障数据安全和服务稳定,是互联网后端架构中不可或缺的核心中间件。其主要应用场景包括:缓存加速:缓存热点数据(商品信息、用户信息、配置数据),减轻数据库压力,提升接口响应速度;并发控制:实现分布式锁,解决跨服务、多节点的资源竞争问题(如秒杀、库存扣减);实时统计:计数器(播放量、阅读数)、UV统计(HyperLogLog)、排行榜(ZSet);
2026-03-29 21:39:05
409
原创 深度解析:关系型数据库与非关系型数据库(区别+原理+适用场景,一文吃透)
关系型数据库(Relational Database,简称RDBMS),是基于「关系模型」(即表格模型)来组织数据的数据库。简单说,它的数据都存在“表格”里,表格之间通过“关联关系”连接,数据的存储和操作都遵循严格的规则。表格(Table)、行(Row)、列(Column)、主键(Primary Key)、外键(Foreign Key)、SQL语言。
2026-03-29 21:24:11
1024
原创 深入剖析:为什么多线程下变量会看不见、乱序、不安全?
一个操作不可分割,要么全部完成,要么全部不做。问题学名根本原因解决方案变量看不见可见性问题CPU 缓存 + 不及时同步主存volatile、锁执行乱序有序性问题指令重排序volatile、锁计算错乱原子性问题操作非原子,线程切换锁、原子类Java 并发三大特性:可见性、有序性、原子性只要缺一个,就会出 bug。线程读写的是自己的缓存副本修改后没有立刻同步到主内存其他线程读的是旧副本。
2026-03-28 17:51:01
443
原创 深入解析Java volatile关键字:作用、底层原理与实战避坑
在多核CPU环境下,每个CPU核心都有自己的私有缓存(L1、L2),当线程操作变量时,会优先从私有缓存中读取数据,修改后也会先写入私有缓存,再通过“写回策略”同步到主内存(并非立即同步)。当一个线程修改了volatile修饰的变量后,这个修改会立即被同步到主内存,并且其他线程读取该变量时,会直接从主内存获取最新值,而不是读取自己私有缓存中的旧值,从而避免了“缓存不一致”导致的数据错乱。为了提升CPU的执行效率,JVM和CPU会对代码指令进行“重排序”——在不影响单线程执行结果的前提下,调整指令的执行顺序。
2026-03-28 17:47:25
564
原创 深入拆解MESI协议:从原理到实战,搞懂CPU缓存一致性的核心机制
状态核心含义数据一致性(与主存)副本数量读写权限M(已修改)数据已修改,需写回主存不一致仅当前核心可读写E(独占)数据未修改,独占持有一致仅当前核心可读写(写时升为M态)S(共享)数据未修改,多核心持有一致多个核心可读,写需先无效化其他副本I(无效)数据无效,不可用无意义无有效副本无读写权限只有“独占”(E态)或“唯一有效”(M态)的缓存行,才能直接执行写入操作;共享态(S态)写入前,必须先无效化其他核心的副本,确保自己成为唯一有效副本;
2026-03-28 17:41:24
314
原创 深入拆解缓存一致性:从原理到实战,彻底解决数据不一致难题
缓存一致性,本质上是缓存中的数据与原始存储(通常是数据库)中的数据保持同步,不能出现“缓存有数据、数据库已更新”“数据库有数据、缓存无数据”“缓存与数据库数据不一致”的情况。简单来说,就是“用户看到的数据,和数据库中真实的数据是一样的”。这里需要明确两个关键前提,避免理解偏差:缓存一致性不是“实时一致”,而是“最终一致”:在高并发场景下,要兼顾性能和一致性,无法做到100%实时同步(除非放弃缓存的性能优势),我们追求的是“短时间内数据同步,最终用户看到的是正确数据”。
2026-03-28 17:34:52
287
原创 一文吃透缓存机制:从原理到实战,搞懂缓存的核心逻辑
缓存(Cache),本质上是一种临时存储数据的高速介质,它的核心作用是“缩短数据访问路径、减少重复计算/查询”,让数据获取更快、系统开销更低。简单来说,就是把“常用、不常变”的数据,存到一个比原始存储位置(比如数据库、硬盘)更快的地方,下次再要这个数据时,不用再去原始位置“费劲查找”,直接从缓存里拿,效率翻倍。缓存的本质,是“用空间换时间”——通过消耗一定的内存(缓存介质),换取更快的响应速度、更低的系统开销。
2026-03-28 17:28:38
779
原创 彻底吃透 Java 原子性:从底层原理到实战避坑(全网最细)
原子性(Atomicity):一个操作是不可分割、不可中断的。要么全部执行成功,要么全部不执行,中途不会被其他线程打断。“一件事要么做完,要么没做,绝对不会做到一半。复合操作(多步指令)在多线程环境下被中途打断 → 数据不一致。i++i--a = a + 1全部不是原子操作!全部会出并发问题!不可分割、不可中断,要么全做,要么不做。
2026-03-27 12:58:31
342
原创 JMM内存模型与三大并发问题:从底层原理到问题根治,读懂Java并发核心
JMM并非真实存在的物理内存,而是Java虚拟机(JVM)定义的一套抽象规范——它规定了所有变量(实例变量、静态变量、数组元素)的存储位置、线程如何访问这些变量,以及变量在内存中的读写规则。其核心目的是:解决多线程环境下,CPU缓存、指令重排序导致的内存可见性、原子性、有序性问题,保证多线程并发访问的安全性。在深入JMM之前,我们先明确一个前提:现代计算机为了提升性能,会在CPU和主内存之间增加高速缓存(Cache),同时CPU会对指令进行重排序(优化执行效率)。
2026-03-27 11:47:08
555
原创 大型系统构建与性能优化:从架构设计到落地实战的全链路解析
大型系统的构建,本质是用合理的架构设计,解决高并发、海量数据、复杂业务的问题;而性能优化,本质是通过全链路的调优,降低系统开销、提升处理效率、保障系统稳定性。从架构设计到落地实战,大型系统的成功依赖于团队的技术能力系统化的工程思维和持续优化的意识。性能优化不是 “一劳永逸” 的,而是贯穿系统生命周期的持续工作;架构设计也不是 “一成不变” 的,而是根据业务发展逐步演进的。
2026-03-27 11:06:53
371
原创 多因素最优解与AI底层原理:从逻辑到落地,读懂AI如何找到“最优答案”
要理解AI与多因素最优解的关系,首先要明确“多因素最优解”的核心定义——它不是“单一因素的最优”,而是“多个因素协同下的全局最优(或局部最优)”,核心特点是“因素相互关联、目标可量化、存在约束条件”。多因素最优解的本质,是“在复杂的变量关系和约束条件下,找到最适配的解决方案”;而AI的底层原理,就是为这种“复杂求解”提供了一套“数据驱动、模型模拟、算法优化”的系统方法——它没有改变多因素最优解的核心逻辑,而是突破了传统方法的局限,让多因素最优解的求解,从“人工化、低效化”走向“自动化、高效化、实时化”。
2026-03-27 10:50:04
308
原创 YOLO与OpenCV:运行机制、工具局限及个人能力的核心价值
YOLO的检测精度高度依赖训练数据集的质量和数量:如果数据集的样本数量少、标注不准确(如边界框标注偏移、类别标注错误),训练出的模型会出现过拟合(在训练集上表现好,在测试集上表现差);如果数据集的场景单一(如仅训练白天的样本),模型在夜间、雨天等场景中无法正常工作。此外,YOLO的自定义训练需要掌握数据标注、模型调参、损失函数优化等技能,对于初学者来说,难度较高——很多人即使能加载预训练模型,也无法根据自定义场景训练出高精度的模型。
2026-03-27 10:44:09
229
原创 图像识别的核心步骤与原理
图像识别 = 让计算机看懂图片输入一张图 → 输出:这是什么、在哪里、有什么特征。它是 AI 视觉最基础、最核心、应用最广的技术。人脸识别、拍照识物、自动驾驶、医学病灶检测、工业质检…… 全部都是图像识别。把图片变成数字用卷积神经网络一层层提取特征从边缘→纹理→形状→物体最后做判断,输出这是什么它不是魔法,是数学 + 神经网络 + 大数据。图像识别 = 机器从像素中提取特征,判断图片内容核心原理是 CNN 卷积神经网络,自动分层提取特征分类、检测、分割是三大基础任务,支撑所有 AI 视觉应用。
2026-03-26 14:11:05
1088
原创 一文读懂 AI 视觉核心原理:从像素到认知,AI 是如何 “看懂” 世界的
从像素中自动学习特征(不需要人工规则)分层抽象理解图像(从边缘到物体)高精度识别复杂物体实时推理(毫秒级)可泛化、可迁移、可落地AI 视觉的本质:把图像变成数字,用神经网络提取特征,让机器理解画面。核心技术是 CNN 卷积神经网络,负责自动提取从简单到复杂的特征。目标检测、图像分类、图像分割是三大基础任务,支撑所有视觉应用。
2026-03-26 14:09:29
850
原创 深度拆解 JDK1.8 ConcurrentHashMap 核心方法:从 put 到扩容,彻底吃透并发神器
Node 数组 + 链表 + 红黑树读操作全程无锁,靠 volatile 保证可见性;写操作能无锁则无锁,需加锁则最小粒度加锁;扩容不阻塞业务线程,多线程协同提速;计数分散无竞争,高并发下性能稳定。下文将拆解put 写操作、get 读操作、transfer 扩容、addCount 计数四大核心方法,这是 ConcurrentHashMap 的灵魂。统计过程中可能有新写入,数值不是绝对精确;高并发场景下,性能远比重度精确更重要;业务需要精确计数时,需自行加锁。✅锁粒度最小。
2026-03-26 10:44:14
406
原创 深度解析ConcurrentHashMap设计演进:从分段锁到无锁化的并发之路
HashMap:线程不安全,多线程并发读写时,会出现链表环(JDK1.7)、数据覆盖、死循环等问题,根本无法用于高并发场景;Hashtable:通过对所有方法加synchronized实现线程安全,本质是“全表锁”——所有线程无论操作哪个key,都要竞争同一把锁,并发效率极低,高并发下会出现严重的性能瓶颈。
2026-03-26 10:41:27
423
原创 深入解析Java内存模型(JMM)与并发问题:从原理到解决方案
Java内存模型(JMM)是一套抽象规范,它定义了:所有变量(共享变量)都存储在主内存(Main Memory)中,主内存是所有线程共享的内存区域;每个线程都有自己的工作内存(Working Memory),工作内存是线程私有的,用于存储主内存中共享变量的副本;线程对共享变量的所有操作(读、写),都必须在自己的工作内存中进行,不能直接操作主内存;线程之间的通信(共享变量的传递),必须通过主内存完成:线程A修改共享变量后,需将修改后的值写回主内存;
2026-03-26 10:25:34
592
原创 深入解析阻塞队列(BlockingQueue):原理、实现与面试实战
阻塞队列(BlockingQueue)是Java.util.concurrent包下的一种特殊队列,它继承自Queue接口,在普通队列“先进先出(FIFO)”的基础上,增加了「阻塞特性」——当队列满时,入队操作会阻塞;当队列空时,出队操作会阻塞。阻塞队列是“线程安全的队列+阻塞机制”的结合体,无需我们手动加锁控制线程安全,就能实现线程间的高效通信(比如生产者生产数据、消费者消费数据,无需额外处理同步问题)。
2026-03-25 15:43:39
1343
原创 深度解析 “池化思想”:从设计模式到 Java 技术栈的落地与实践
池化思想是一种设计模式,指将一组资源(如线程、连接、对象、内存块等)预先分配并存储在一个 “池” 中,客户端请求资源时从池中获取,使用完毕后归还至池(而非销毁),由池统一管理资源的生命周期、数量上限和并发访问。// 1. 实现PooledObjectFactory,定义对象的创建、销毁、验证逻辑@Override// 创建对象逻辑@Override// 包装对象@Override// 销毁对象逻辑// 2. 创建对象池// 最大对象数// 最大空闲对象数。
2026-03-25 14:46:09
413
原创 线程池核心原理与工作机制详解(从底层到实战)
线程池的核心本质是「线程复用+资源控制」,通过提前创建线程、复用线程,减少线程创建/销毁的开销,同时通过核心参数控制并发数,避免资源耗尽。掌握线程池的关键,在于理解「核心组件→工作机制→底层源码」的逻辑:核心组件是基础,工作机制是流程,底层源码是实现,三者结合才能真正吃透线程池。最后记住:生产环境中,优先手动创建ThreadPoolExecutor,根据业务场景(CPU密集型/IO密集型)配置核心参数,避免使用Executors工具类,同时做好线程池的关闭和监控,才能发挥线程池的最大价值,避免踩坑。
2026-03-25 14:43:10
807
原创 深入解析 Java 中 wait () 与 sleep () 的核心区别
wait () 是让持有锁的线程释放锁并等待,属于线程间协作;sleep () 是让线程抱着锁睡觉,属于线程自身延时。核心点wait()sleep()锁释放不释放所属ObjectThread调用同步代码内任意位置唤醒需 notify ()自动唤醒场景线程通信线程延时核心差异wait()释放对象锁、用于线程通信;sleep()不释放锁、用于线程延时;使用限制wait()必须在同步代码中调用,sleep()无限制;唤醒方式wait()需主动唤醒,sleep()时间到自动醒。
2026-03-25 14:36:59
489
原创 并发编程核心概念全解析:从基础到实战,彻底打通并发任督二脉
同一时间段内,多个任务交替执行,单核 CPU 也能实现。本质是 CPU 快速切换任务,看起来像 “同时运行”。简单场景用 synchronized:代码简洁、不会锁泄漏、无需手动释放。复杂场景用 Lock:需要中断、超时、多条件、公平锁时。并发三大问题:原子性、可见性、有序性核心矛盾:多线程竞争共享资源核心解决方案:锁机制(synchronized / Lock):简单、安全、自动释放,适合绝大多数场景Lock:灵活、功能强,适合复杂高并发场景最终目标:线程安全 + 高性能 + 无死锁。
2026-03-25 10:26:29
391
原创 深度剖析:synchronized 底层实现原理(JVM 视角)
Monitor = 监视器锁它是 JVM 内部的一个同步工具,本质是一个同步队列结构。每个对象都会关联一个 Monitor。synchronized 的互斥性,完全由 Monitor 实现。锁类型实现机制优点缺点适用场景偏向锁线程 ID 标记无开销多线程竞争会撤销单线程轻量级锁CAS + 自旋无阻塞自旋消耗 CPU交替执行重量级锁Monitor稳定内核切换、阻塞高并发竞争简单场景(如单线程访问、少量线程竞争)用(简单、无需手动释放);复杂场景用Lock。
2026-03-24 20:24:09
521
原创 吃透synchronized锁机制:从使用到底层,一文破解Java线程安全难题
synchronized修饰代码块时,锁的对象是括号中指定的对象(可以是this、Class对象,也可以是自定义的任意对象)。这种方式的灵活性最高,可以精准控制锁的粒度(只给需要保护的代码加锁),减少锁竞争。// 自定义锁对象(建议用final修饰,避免锁对象被修改)// 锁对象是自定义的lock对象count++;// 另一个方法,使用同一把锁count--;修饰方式锁对象适用场景核心特点实例方法this(当前实例)保护实例级共享资源不同实例锁独立,同一实例锁互斥静态方法。
2026-03-24 20:15:41
529
原创 吃透进程与线程:从概念到实战,破解并发编程核心难题
并发是“交替执行”,解决CPU利用率问题;并行是“同时执行”,解决任务执行速度问题。关键差异在于:并发可在单核心实现,并行必须依赖多核;并发靠“切换”提升效率,并行靠“多核心”提升速度。补充说明:进程与线程的调度,既可以实现并发,也可以实现并行——单核心下,进程/线程交替执行(并发);多核下,多个进程/线程可在不同核心同时执行(并行)。进程与线程,是并发编程的“基石”,两者的核心差异在于「资源分配」和「调度开销」:进程是“资源容器”,负责占用系统资源,隔离性强、开销大,适合需要独立运行的场景;
2026-03-24 19:43:20
345
原创 深入理解并发编程:从概念到实践,一文吃透核心逻辑
并发是“交替执行”,解决的是“CPU利用率”问题;并行是“同时执行”,解决的是“任务执行速度”问题。并发可以在单核心上实现,而并行必须依赖多核心。举个编程中的例子:并发:单核心CPU上,一个线程处理用户请求,另一个线程处理日志输出,两个线程交替占用CPU,避免其中一个线程等待时CPU空闲。并行:双核心CPU上,一个核心运行用户请求线程,另一个核心运行日志输出线程,两个线程同时执行,执行效率更高。模型调度方式资源开销并发能力适用场景进程操作系统调度(内核态)大低(数量有限)
2026-03-24 19:38:19
776
原创 JVM 核心面试题全解析
加载:通过类全限定名获取字节码文件 → 将字节码转换为方法区的类结构 → 创建 Class 对象(堆中)。验证:校验字节码合法性(文件格式、元数据、字节码指令、符号引用),防止恶意字节码。准备:为类静态变量分配内存并设置默认值(如 int→0,引用→null),不执行赋值语句。解析:将符号引用(类名 / 方法名)转换为直接引用(内存地址),可延迟到初始化后。初始化:执行类构造器<clinit>()方法(静态变量赋值 + 静态代码块),线程安全(加锁)。内存结构。
2026-03-22 21:31:24
590
原创 深入浅出 SSM:从原理到实战,一篇吃透 Spring+SpringMVC+MyBatis 框架
S:Spring—— 核心容器,负责对象创建、依赖注入、事务管理—— 表现层框架,处理请求、路由、页面跳转M:MyBatis—— 持久层框架,操作数据库,替代原生 JDBC三大框架各司其职、完美配合,实现了表现层、业务层、持久层的解耦,让代码结构更清晰、维护更方便。解耦彻底:三层分离,便于维护与扩展简化开发:Spring 管理对象,MyBatis 简化 JDBC灵活高效:SQL 手写,性能可控生态成熟:文档丰富、社区强大、面试必问适用广泛:中小型 Web 项目、后台管理系统首选。
2026-03-21 14:33:56
586
原创 深度解析 JVM 方法区:从永久代到元空间的核心逻辑
方法区是JVM 规范中的一个逻辑概念,并非具体实现,它属于 “非堆” 内存(与堆内存相对),用于存储已被 JVM 加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。线程共享:方法区是所有线程共享的内存区域,类的元数据仅存储一份;逻辑永久代:方法区中的数据生命周期通常较长(如类信息、静态变量),因此也被称为 “永久代”(但这是 HotSpot 虚拟机的特有实现,并非所有 JVM 都如此);内存限制:方法区有固定大小限制(或可配置),超出限制会抛出。核心定位。
2026-03-20 13:01:22
357
原创 深度解析三色标记算法:JVM 并发 GC 的核心底层逻辑
三色标记算法将堆中的对象分为三种 “颜色”,分别代表不同的标记状态,通过颜色的转换完成并发标记:表格颜色状态定义核心特征白色未被标记的对象初始状态所有对象都是白色;标记结束后,白色对象即为 “无用对象”(待回收)灰色已被标记,但引用的子对象未完全标记标记过程中的 “中间状态”,GC 线程需要继续遍历其引用的子对象黑色已被标记,且所有引用的子对象都已标记标记完成的 “最终状态”,黑色对象是可达的(有用对象)核心定义:通过白 / 灰 / 黑三色标记对象的可达状态,实现并发可达性分析;核心问题。
2026-03-20 11:11:51
664
原创 深度拆解 G1 GC 垃圾回收全过程:从 Region 到停顿控制的核心逻辑
G1 GC 的回收流程核心是 “分区管理 + 优先回收高垃圾占比 Region + 并发标记 + 复制整理内存模型:以 Region 为基本单位,动态划分年轻代 / 老年代,打破传统分代的固定边界;回收类型:常规回收为 Young GC(仅年轻代,STW)和 Mixed GC(年轻代 + 部分老年代,低 STW),Full GC 为异常情况需避免;核心优势:通过预测停顿时间、选择性回收 Region,兼顾低延迟和吞吐量,且无内存碎片;调优核心:围绕和调整,避免 Full GC 触发。
2026-03-20 11:04:10
801
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅