- 博客(214)
- 收藏
- 关注
原创 JVM 跨代引用与 Card Table 机制
摘要:跨代引用是分代垃圾回收中的关键挑战,即老年代对象引用年轻代对象可能导致MinorGC时错误回收。JVM采用卡表(CardTable)和写屏障(Write Barrier)机制高效解决:将堆划分为512B卡片,通过卡表标记可能含跨代引用的区域;写屏障在引用赋值时动态更新卡表。MinorGC时仅扫描脏卡区域,避免全堆扫描。G1/ZGC进一步演进为记忆集(Remembered Set),实现更细粒度的跨区域引用追踪。该机制在保证GC正确性的同时,将MinorGC停顿控制在毫秒级,是现代JVM高效内存管理的核
2026-01-08 15:55:23
309
原创 关于堆排序的介绍
摘要:堆(Heap)是一种完全二叉树数据结构,分为大堆(父节点≥子节点)和小堆(父节点≤子节点)。堆通过数组实现,支持高效插入/删除操作(O(logn)),常用于优先队列、堆排序和Top-K问题。Java的PriorityQueue默认实现小堆,可通过比较器改为大堆。堆的核心操作包括插入时的"上浮"和删除时的"下沉",建堆时间复杂度为O(n)。注意堆与堆内存、有序数组的区别,堆只保证堆顶极值,适合流式数据处理。
2026-01-04 16:38:35
755
原创 系统常用的限流方案实践
本文系统介绍了四种主流限流方案:1)API接口级限流(基于Guava RateLimiter),适用于单体应用临时调试;2)网关层限流(Spring Cloud Gateway+Redis),推荐作为微服务架构的全局入口防护;3)AOP切面限流(自定义注解+Redis Lua脚本),适合核心业务方法精细化控制;4)拦截器限流,可作为传统单体应用的统一限流方案。文章详细分析了各方案的实现原理、适用场景及生产注意事项,建议采用分层限流策略(网关+AOP)配合监控告警,以保障系统高可用性。
2026-01-04 11:04:23
1148
原创 2025年度复盘:代码、文字与生活的三重奏
《技术写作与个人成长的2025年回顾》摘要:2025年见证了作者在优快云平台的成长蜕变,通过210篇技术文章(覆盖37个技术领域)实现了从"工具人"到"思考者"的转变。关键词"突破、沉淀、平衡"概括了这一年:系统性构建分布式架构知识体系,写作反哺深度思考;收获2393粉丝及7枚勋章,创作心态从追求曝光转向价值输出;建立"112"健康管理原则,实现工作与写作的良性循环。展望2026年,计划探索AI工程化并尝试视频化技术传播,在分
2025-12-31 17:52:20
809
原创 关于ArrayDeque的介绍
ArrayDeque是Java集合框架中高性能的双端队列实现,兼具栈、队列和双端队列功能。相比LinkedList和Stack,它在性能上具有2-5倍优势,内存占用更少且缓存友好。底层采用循环数组实现,通过位运算优化指针移动,支持自动扩容。它拒绝null元素,非线程安全但提供高效的单线程操作。典型应用包括DFS/BFS算法、滑动窗口和表达式求值等场景。使用时需注意不支持null、线程安全问题以及迭代器的弱一致性特性。
2025-12-30 14:07:03
729
原创 关于注解(Annotation)的详细介绍
本文系统介绍了Java注解的核心概念与应用。主要内容包括:1. 注解基础:定义、元注解(@Target、@Retention等)及自定义注解方法;2. 实现原理:注解在字节码中的存储方式、JVM加载机制和反射读取时的动态代理实现;3. 生命周期:SOURCE/CLASS/RUNTIME三种保留策略的区别及典型应用场景;4. 发展历程:从编译期辅助到运行时反射,再到编译时代码生成的三代演进趋势。文章还详细解析了注解默认值存储、重复注解等高级特性,并提供了框架集成和性能优化的实践建议。通过底层机制剖析,揭示了注
2025-12-29 14:35:37
892
原创 HTTP 长连接 vs 短连接:从 TCP 优化到 QUIC 时代的演进
HTTP连接复用技术从HTTP/1.0到HTTP/3经历了重大演进:HTTP/1.0采用短连接,每个请求都需新建TCP连接;HTTP/1.1引入长连接(keep-alive)实现连接复用,但存在队头阻塞问题;HTTP/2通过多路复用彻底解决该问题;HTTP/3则基于QUIC协议实现连接迁移。现代架构中,连接策略已发展为客户端连接池、服务网格等复杂形式。连接类型由客户端声明、服务端决策、协议默认值共同决定,其中Connection:close具有强制终止权。未来趋势是连接细节由基础设施透明处理,开发者将更关注
2025-12-26 17:33:25
717
原创 MySQL 分区、分表、分库:从原理到生产实践
本文系统介绍了MySQL数据分片的三种方案:分区、分表和分库。分区是数据库内置能力,逻辑透明但无法突破单机瓶颈;分表通过应用层拆分大表,适合单库容量足够但单表过大的场景;分库是真正的分布式方案,能水平扩展但复杂度高。文章详细分析了各方案的核心原理、实现方式和适用场景,对比了优缺点,并提供了分片策略设计、MyBatis集成等实践指南。最后指出90%系统通过分区+读写分离+缓存即可满足需求,只有真正遇到单机瓶颈时才需考虑分库分表,同时给出了避免热点、跨分片操作等关键建议。
2025-12-25 15:28:34
879
原创 MySQL的FEDERATED存储引擎详解
MySQL FEDERATED引擎是一种允许创建本地"虚拟表"映射远程MySQL表的技术,通过透明代理实现远程数据访问。其核心原理是本地查询自动转发到远程服务器执行并返回结果。使用需先启用引擎,在远程创建真实表,再本地创建FEDERATED表指定连接信息。虽然支持基本CRUD操作,但存在严重性能问题(全表扫描、无法利用索引)、连接管理困难、安全风险(密码明文)和可靠性差等致命缺陷。仅建议用于临时数据迁移等非核心场景,生产环境应改用应用层集成方案。MySQL 8.0已彻底移除该功能。
2025-12-25 11:03:35
878
原创 分库分表架构下的跨库 JOIN 问题的实战方案
文章摘要:本文系统探讨了分库分表环境下跨库JOIN的解决方案。首先分析了单实例跨库JOIN与分库分表跨实例JOIN的本质区别,指出后者需特殊处理。随后详细介绍了5种实战方案:业务层聚合、冗余字段、全局表、绑定表和异步宽表,并给出具体实现示例和适用场景。同时展望了HTAP数据库、向量化计算等下一代解决方案。最后强调分库分表设计的核心在于业务建模,建议优先通过合理设计避免跨库JOIN,而非依赖复杂中间件。
2025-12-24 15:04:02
1071
原创 @AutoConfigureBefore 与 @AutoConfigureAfter
本文介绍了SpringBoot中@AutoConfigureBefore和@AutoConfigureAfter注解的核心用法。这两个注解用于控制自动配置类的执行顺序,解决组件间的隐式依赖问题。文章详细说明了它们的设计目的、定义、作用域和使用场景,并通过实战示例展示了如何正确应用。同时指出了常见误区,如不能控制普通Bean顺序和避免循环依赖,并与其他顺序控制注解进行了对比。最后强调合理使用这些注解能使Starter更加健壮可靠,是构建SpringBoot自动配置的重要工具。
2025-12-15 19:33:53
1017
原创 MySQL 的 Purge 线程:事务提交后,那些被“删除”的数据去哪了?
MySQL中的DELETE操作并不会立即物理删除数据,而是通过MVCC机制标记为删除并保留在Undo Log中。Purge线程作为后台清理机制,负责异步删除不再被活跃事务引用的数据,回收表空间和Undo Log空间。其工作原理包括扫描History List、判断可清理范围、执行物理删除等步骤,并受innodb_purge_threads等参数控制。最佳实践建议包括避免长事务、增加Purge线程数、监控History List长度等,以优化性能并防止空间膨胀。Purge线程是保证MySQL高性能和ACID特
2025-12-11 13:43:35
875
原创 栈帧四要素:JVM 方法执行的完整上下文
本文深入解析了Java虚拟机栈帧的核心组成和工作原理。栈帧作为方法调用的运行时上下文,包含四个关键组件:局部变量表存储方法参数和变量,操作数栈提供计算工作区,动态链接实现多态方法绑定,返回地址确保正确执行流返回。文章详细剖析了局部变量表的内存结构、槽位复用机制,以及操作数栈与字节码指令的协同工作流程,同时阐述了动态链接如何支持运行时方法解析和返回地址的作用机制。通过实际代码示例和字节码分析,揭示了JVM方法调用的底层实现原理,包括变量存储、运算执行、多态处理和流程控制等关键环节,展现了栈帧如何支撑Java方
2025-12-05 17:52:26
732
原创 关于Redis的List 到 Stream:下一代轻量级消息队列
Redis Stream作为Redis 5.0引入的原生消息队列方案,相比传统List具有显著优势:支持消息持久化、消费者组、ACK机制和消息回溯功能,特别适合订单事件等可靠性要求高的场景。文章详细对比了List与Stream的差异,指出List存在消息丢失、无法回溯等缺陷,而Stream以90%的Kafka功能满足了中小团队对消息队列的核心需求。通过Spring Boot集成示例展示了生产环境最佳实践,包括消费者组创建、消息处理、异常处理和监控方案。最后提出技术选型建议:在10万QPS以下、已使用Redi
2025-11-28 16:31:50
1089
原创 从 1.2GB 到 200MB:用 Multi-stage Build 极致优化 Java Docker 镜像
摘要:本文探讨如何优化Java应用的Docker镜像大小,从传统的1.2GB缩减到198MB(降幅83%)。通过分析镜像组成原理,指出完整JDK、无效文件删除等常见问题,提出多阶段构建、使用轻量基础镜像(如Temurin JRE)、SpringBoot分层JAR和Distroless镜像等四步优化方案。重点介绍了Multi-stage Build技术,实现构建工具与运行环境的分离,在保证功能完整性的同时大幅减小镜像体积,提升云原生环境下的部署效率和安全性。文章包含各方案实测数据对比,为Java开发者提供了一
2025-11-27 16:43:25
1003
原创 Java 的结构化并发:告别线程混乱
本文探讨了Java传统并发模型的痛点与结构化并发的解决方案。传统模型存在子任务生命周期失控、异常传播断裂、取消机制复杂和调试困难等问题。JDK21引入的StructuredTaskScope通过作用域封闭、自动生命周期管理和异常聚合等特性,实现了"有序并发"。相比CompletableFuture,结构化并发更符合控制流思维,能自动处理任务取消和异常传播。文章建议优先使用ShutdownOnFailure策略,避免Future逃逸,并结合虚拟线程使用。作为Project Loom的重要组
2025-11-26 15:14:51
901
原创 告别内存浪费:ZGC 与 Shenandoah 如何实现真正的 JVM 弹性
JVM弹性收缩机制深度解析:云原生时代的内存管理挑战 本文深入探讨了JVM内存弹性收缩的核心机制与实现难点。在容器化环境中,传统GC(如Serial/Parallel、CMS)几乎无法有效归还内存,主要受限于连续堆布局和保守的回收策略。现代GC中,ZGC和Shenandoah凭借细粒度的Page/Region管理和自动归还机制,成为云原生场景的最佳选择。G1GC需手动配置周期性GC才能实现有限收缩。通过jstat、NMT和RSS监控可验证内存归还效果。实践建议优先选用ZGC,合理设置-Xmx和归还延迟参数,
2025-11-25 14:38:40
965
原创 时间的艺术:彻底搞懂 System.currentTimeMillis() 与 System.nanoTime()
Java时间获取机制解析:currentTimeMillis()与nanoTime()的深度对比 摘要:本文深入剖析Java中两种时间获取方式的本质区别。System.currentTimeMillis()提供真实世界时间,但存在性能陷阱和NTP同步问题;System.nanoTime()则是高精度单调计时器,适合性能测量。文章详细分析了二者的底层机制、使用场景和常见误区,指出currentTimeMillis()适用于业务时间记录,而nanoTime()专用于耗时计算。同时探讨了CachedClock的适
2025-11-24 14:39:13
1106
原创 StackOverflowError之“非显式递归”深度剖析
Java应用中StackOverflowError的深度解析与解决方案 摘要:本文深入探讨了Java开发中StackOverflowError的两种典型场景:Jackson序列化循环引用和动态代理嵌套过深问题。在无显式递归的情况下,对象图的隐式循环引用会引发Jackson序列化的无限递归调用,而Spring AOP、MyBatis等多层代理的叠加会导致方法调用链过深。文章提出了多种解决方案,包括@JsonIgnore注解打断循环、@JsonManagedReference/@JsonBackReferenc
2025-11-24 11:50:32
997
原创 深入理解 Linux 熵与 Java 随机数阻塞的本质
摘要:本文探讨了计算机系统中随机数生成的关键问题——熵的来源与收集机制。在云时代,传统物理熵源(如键盘输入、机械硬盘)的缺失导致虚拟机/容器陷入"熵荒漠",引发Java应用因随机数阻塞而启动缓慢的问题。文章详细分析了Linux熵收集器的工作原理,对比了/dev/random和/dev/urandom的特性,指出云环境中应强制使用非阻塞的/dev/urandom。最终提出解决方案:配置JVM参数"-Djava.security.egd=file:/dev/./urandom&qu
2025-11-21 17:18:49
741
原创 数据主备切换连错 IP?罪魁祸首竟是 JVM 的 DNS 缓存
JVM默认永久缓存DNS解析结果,可能导致应用无法感知DNS变更(如数据库主从切换)。解决方案包括:1)启动时设置JVM参数(推荐-Dsun.net.inetaddr.ttl=10);2)代码动态设置;3)修改java.security文件。生产环境最佳实践包括设置TTL为10秒、监控DNS解析延迟,并优先使用服务发现机制替代DNS。在K8s+ServiceMesh环境中需注意Sidecar代理的DNS处理。所有Java应用都应显式配置DNS缓存TTL,避免依赖默认永久缓存。
2025-11-21 13:58:43
1300
原创 FD泄漏:Java 生产环境的隐形杀手与防御指南
摘要:文章深入剖析了Java系统中常见的"Too many open files"故障,以电商支付系统崩溃案例为切入点,揭示了文件描述符(FD)耗尽导致系统瘫痪的机制。通过Unix"一切皆文件"的哲学思想,详细讲解了FD的本质、生命周期和限制机制,分析了Java应用中常见的FD泄漏场景(如未关闭文件流、连接池配置不当等),并提供了从系统调优到应用监控的完整解决方案。文章强调防御性编程、资源管理和FD监控的重要性,为高并发系统稳定性保障提供了实用指导。
2025-11-20 17:37:34
1143
原创 Spring Boot 分布式定时任务:从单机到高可用集群
摘要:云原生时代下,分布式定时任务的重复执行问题日益凸显。本文分析了Spring @Scheduled在集群环境下的缺陷,提出了四种解决方案:1)基于Redis分布式锁实现任务互斥;2)使用Quartz集群模式实现任务协调;3)Kubernetes CronJob实现容器化任务调度;4)数据库唯一约束保证任务单次执行。建议优先选择Redis分布式锁方案,并强调任务幂等性、监控告警等关键实践。文章为分布式环境下定时任务管理提供了实用解决方案。
2025-11-20 14:03:17
990
原创 容器技术的演进与时代使命
容器化是现代软件开发的基石,它通过Docker等技术实现了环境一致性、快速交付和高效资源利用。从物理机到容器化的演进解决了资源浪费、环境差异等痛点。Docker基于Linux内核的Namespace、Cgroups和UnionFS三大技术,实现进程隔离、资源控制和分层存储。Docker的核心组件包括镜像(只读模板)、容器(运行实例)、网络和持久化存储。通过Dockerfile定义构建过程,使用Compose编排多服务应用,借助Registry分发镜像。最佳实践包括多阶段构建、健康检查、安全加固和资源监控。容
2025-11-19 12:07:40
1170
原创 深入 Java 伪共享(False Sharing)
摘要:多核CPU环境下,伪共享(False Sharing)成为影响并发性能的关键因素。本文深入剖析伪共享的产生机制——当不同CPU核心频繁修改同一缓存行中的独立变量时,触发无效的缓存同步,导致性能不升反降。重点介绍了Java的@Contended注解解决方案,通过缓存行填充实现变量隔离,实验数据显示在24核环境下性能提升达5.4倍。文章还对比了手动填充、JCTools等替代方案,并给出多核系统设计的最佳实践,为开发高性能并发程序提供重要参考。
2025-11-18 15:25:53
902
原创 深入 JVM Safepoint:《JVM 的“交通管制点”》
摘要:本文深入探讨了JVM中Safepoint机制导致的性能问题及优化方案。当GC日志显示短暂停顿但接口却出现秒级卡顿时,其根本原因往往是Safepoint同步延迟。文章通过实例演示了无Safepoint的循环和JIT优化导致的问题,并详细解析了Safepoint的工作原理、触发时机及监控方法。同时提供了三种优化策略:使用防内联空方法、JVM参数调优和任务拆分。测试表明合理的Safepoint检查开销可忽略不计,并提出"宁可多一点Safepoint"的黄金法则。最后强调在排查卡顿问题时,
2025-11-18 14:03:01
906
原创 MySQL 索引下推(ICP)的实战,彻底提升查询性能
本文探讨MySQL索引下推(ICP)机制的优化原理与应用。ICP允许在存储引擎层直接过滤索引数据,减少无效数据传输,提升查询性能。文章通过电商订单查询案例,对比开启/关闭ICP的性能差异(提升3倍),分析其工作原理及适用场景(复合索引非前导列的等值、范围、LIKE前缀查询)。同时指出注意事项:仅InnoDB支持、避免函数操作导致索引失效,建议结合覆盖索引优化。最后澄清常见误区,如ICP不减少回表次数、仅支持前缀匹配等,并提供了索引设计的最佳实践。该机制是SQL性能优化的重要工具。
2025-11-17 16:54:14
801
原创 Java异步编程演进与线程池最佳实践
《Java异步编程演进与线程池最佳实践》 摘要:本文系统剖析Java异步编程的发展历程与技术选型。从早期危险的new Thread()方式入手,指出其资源泄漏、OOM等风险,进而深入讲解线程池(ExecutorService)的核心机制与优势。通过对比分析,提出生产环境必须遵循"线程池替代裸线程"原则,并给出ThreadPoolExecutor参数配置建议。文章还探讨异步与多线程的本质区别,介绍Java21虚拟线程特性及其在IO密集型场景的性能优势。最终总结出异步编程的最佳实践:使用有界
2025-11-17 11:24:30
623
原创 一个 UserService 的现代化演进之路
本文通过一个UserService.findUserById需求,展示了从简单实现到工业级健壮代码的六轮重构过程。从Java8的Optional处理空值、依赖注入,到引入并发缓存解决性能问题;从Java16的record简化DTO、Java17的密封类建模状态,到Java21虚拟线程处理高并发;最后通过Java9模块系统实现强封装。整个过程系统性地应用了现代Java特性,包括空安全契约、防御式编程、结构化并发等最佳实践,体现了专业开发中预见问题、约束错误的设计思维。
2025-11-14 14:14:39
1206
原创 缓存命中率从 50% 到 95%:缓存优化实战指南
本文系统介绍了构建高性能缓存体系的五级优化策略。从基础防护(空值缓存)开始,逐步演进到缓存预热、动静分离分层管理、智能预加载,最终实现AI驱动缓存。针对冷启动雪崩、缓存穿透等常见问题,提出了具体解决方案,包括异步预热、本地缓存配合Redis、基于用户行为的预加载等实用技巧。文章强调避免"一刀切"误区,建议根据数据特性和访问模式采用差异化缓存策略,通过渐进式优化将命中率从40%提升至95%+。实践表明,优秀的缓存策略需要平衡命中率与资源消耗,实现从被动响应到主动预测的转变。
2025-11-14 11:08:51
1418
原创 设计一款高效的短链服务系统
本文系统介绍了短链系统的设计与实现,重点解决长URL在传播中的可读性、安全性和可追踪性问题。设计上采用分布式ID+Base62编码生成唯一短码,通过Redis缓存和数据库存储映射关系,支持高并发跳转。系统实现了短链创建、302跳转、访问统计和过期机制,并针对安全性提出防穷举和限流策略。技术选型基于SpringBoot框架,结合异步处理、CDN边缘计算等优化手段,兼顾性能和扩展性。文章最后强调短链系统的核心价值在于提升用户体验和运营效率,而非单纯技术实现。
2025-11-13 17:17:50
1160
原创 CPU飙升之正则回溯问题探讨
摘要:本文探讨了正则表达式回溯导致的性能问题及其解决方案。以电商平台大促期间因正则回溯导致CPU飙升至100%的案例为引,详细分析了嵌套量词引发的指数级回溯原理,展示了(a+)+b等危险正则的性能危害。文章提供快速诊断方法(top+jstack定位),并提出四大防御措施:重写正则表达式、使用占有优先量词、限制输入长度与字符集、改用非正则方式处理简单逻辑。生产环境还需禁止用户输入正则、代码审查危险模式、设置匹配超时及监控CPU异常。通过优化正则写法与系统防护,可有效避免灾难性回溯造成的服务瘫痪。
2025-11-13 13:45:03
853
原创 分布式系统设计之工程实践《1》
分布式系统的设计包括:1、cap和base理论;2、分布式事务的处理;3、cpu高处理;4、常用的线上诊断工具arthas;5、接口的安全性设计等几方面;
2025-11-13 10:30:06
960
原创 Java系统设计知识整理《1》
本文摘要: 文章系统阐述了四大高并发场景的技术方案:1)秒杀系统设计通过CDN缓存、层层限流、Redis原子扣减、MQ削峰实现高并发控制;2)分布式ID生成对比Snowflake、号段模式和ULID方案,分析时钟回拨等关键问题;3)短链系统采用自增ID转62进制+布隆过滤器防冲突,实现高效映射;4)接口幂等性通过Token机制、唯一索引、状态机等方案保证重复请求安全。全文突出"原子操作+异步解耦"的设计思想,每个方案均包含工业级优化实践与性能数据支撑。
2025-11-12 15:18:39
868
原创 MQ消息中间件知识整理《1》
本文系统介绍了消息队列的核心技术与实践方案:1)Kafka架构解析,包括分区、副本、ISR机制及其高可用设计;2)Kafka端到端消息不丢失方案(生产者acks=all+消费者手动提交+Broker多副本);3)主流MQ对比(Kafka/RabbitMQ/RocketMQ)及适用场景;4)消息重复消费的幂等性解决方案(唯一ID+状态机+数据库约束);5)RocketMQ事务消息原理(半消息+本地事务+回查机制)及其最终一致性实现。重点强调了不同技术方案的适用边界和最佳实践,为分布式系统建设提供可靠的消息中间
2025-11-12 14:01:47
1000
原创 Redis的知识整理《1》
本文从六个方面全面剖析Redis核心原理及实践:1)Redis高性能源于内存操作、高效数据结构及单线程事件模型;2)详解五大基础数据类型及Bitmap等高级结构应用场景;3)提出缓存穿透(布隆过滤器)、击穿(互斥锁)、雪崩(随机过期)解决方案;4)对比RDB快照与AOF日志持久化机制,推荐4.0+混合模式;5)解析Cluster集群的Slot分片与故障转移机制;6)基于Redisson实现分布式锁,强调Lua脚本原子性及看门狗续期机制。全文贯穿版本特性(如7.0函数式API),通过电商秒杀等案例,系统阐述R
2025-11-11 16:16:07
682
原创 MySQL的索引和事务知识整理《1》
摘要:本文系统介绍了InnoDB索引、事务、MVCC等核心机制。聚簇索引存储完整行数据,非聚簇索引存储主键值,回表查询可通过覆盖索引避免。联合索引需遵循最左前缀原则,避免函数计算等8种索引失效场景。事务ACID特性由Undo/Redo Log实现,InnoDB通过MVCC+间隙锁解决幻读问题。MVCC依赖ReadView判断版本可见性,RR级别使用单一ReadView保证可重复读。慢SQL优化需分析执行计划,重点关注type和Extra字段。分库分表设计需考虑分片策略、全局ID和扩容方案,ShardingS
2025-11-10 14:52:41
904
原创 并发编程、锁、线程池知识整理<1>
本文深入探讨了Java并发编程的核心知识点。首先分析了synchronized的底层Monitor机制及锁升级过程(偏向锁→轻量级锁→重量级锁);对比了synchronized与ReentrantLock的特性差异,并解析了AQS框架的实现原理。其次详细讲解了volatile的三大作用(可见性、禁止重排序、happens-before)及其局限性,强调其无法保证复合操作的原子性。然后系统梳理了线程池的核心参数、执行流程与拒绝策略,比较了execute()与submit()的异同。接着介绍了Completab
2025-11-06 21:19:07
1047
2
原创 JVM核心知识整理《1》
摘要:JVM内存结构分为线程私有(程序计数器、虚拟机栈、本地方法栈)和线程共享(堆、方法区)。对象创建涉及类加载检查、内存分配、初始化等步骤,堆中分配通过指针碰撞或空闲列表实现。主流GC算法包括标记-清除、复制、标记-整理,CMS、G1和ZGC在延迟、堆大小适用性上各有特点。频繁FullGC排查需结合GC日志、jstat、jmap等工具分析内存泄漏或GC策略问题。调优参数如-Xmx、-XX:+UseG1GC等需根据监控数据调整。类加载遵循双亲委派模型,可通过SPI、自定义ClassLoader或模块化打破,
2025-11-05 13:20:54
659
原创 Java基础知识整理《1》
Java核心知识点摘要: String/StringBuilder/StringBuffer:String不可变基于安全性、缓存哈希值和字符串常量池优化;StringBuilder线程不安全但性能高,StringBuffer线程安全但性能稍低。 equals与==:==比较地址,equals比较内容;重写equals必须重写hashCode以维护哈希集合契约。 HashMap原理:数组+链表+红黑树结构,JDK1.8优化包括链表转红黑树和扩容机制改进;线程不安全源于数据竞争。 ConcurrentHashM
2025-11-04 16:11:56
601
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅