OOM

搜索结果

在博客中搜索相关文章

24 篇文章 2

如何实现线程复用?

线程池通过维护 Worker 对象实现复用。execute 先在核心线程数范围内尝试 addWorker 创建线程,若达上限则把任务放入 workQueue。Worker 持有 Thread 并实现 Runnable,其 run 方法调用 runWorker。runWorker 在循环中先执行 firstTask,再不断从队列获取任务并执行 task.run();run 本身不再创建新线程,线程始终在同一 Thread 上循环处理任务直至关闭。于是同一线程被重复利用,完成线程复用的核心机制。

JVM(二)

本文系统阐述了JVM垃圾回收的触发时机、Full GC的减少措施以及对象可回收性的判定方法,介绍了新生代Eden/Survivor划分、对象晋升老年代的机制,并比较了标记‑清除、标记‑复制、标记‑整理等算法及其适用区域。重点说明了G1和CMS两大收集器的工作原理、优缺点,并区分了内存泄漏与内存溢出及其防治措施。

打牌记账-使用手册

打牌记账是一款基于浏览器的实时多人记账工具,支持麻将、斗地主等棋牌游戏。用户无需注册,仅输入昵称即可创建或加入最多8人的加密房间,系统自动同步、计算盈亏并保存历史。核心功能包括房间创建/密码保护、二维码或链接邀请、实时记账、自动结算、昵称修改以及“我加入的房间”历史查看。技术上采用BCrypt加密、WebSocket 异步广播,兼容手机、平板、电脑,使用 Chrome 等现代浏览器即可。手动记错可反向记账,结算后房间锁定不可再记。

面试现场【综合篇】

本篇面试指南围绕系统设计与实现展开,涵盖项目亮点、零拷贝原理、五大IO模型及NIO与多路复用区别、Future阻塞获取结果机制、ReentrantLock 与 synchronized 的实现与差异、AQS、乐观/悲观锁、Paxos 协议、B+树特性、TCP 拥塞控制、JVM 实践、数据库分库分表及其缺点、分布式事务(TCC)方案、RocketMQ 消息可靠性保证,以及常见算法题。通过概念阐释与实现细节,帮助读者系统复习面试热点。

Spring WebFlux响应式编程实战指南

随着微服务对高并发、低延迟的需求提升,传统Spring MVC的同步阻塞模型因线程耗尽和上下文切换导致性能瓶颈。文章阐述了响应式编程的优势——事件驱动、背压机制以及少量线程高效利用,并通过Project Reactor 的 Flux、Mono、操作符和 Subscriber 介绍其核心概念。随后提供了基于 Spring WebFlux 的实战步骤:环境搭建、依赖配置、R2DBC 响应式 Repository 与 Controller 编写、连接池与自定义 Scheduler 的调优。通过 JMeter 对比实验,WebFlux 在吞吐量、响应时间和 CPU 利用率上远超 MVC,适用于 I/O 密集、长耗时和流式数据场景。文末提醒避免阻塞调用、合理选用背压策略,并给出学习资源,帮助开发者平滑迁移至响应式架构。

从点击到滑动:博客图片浏览体验的进化与实现

本文介绍在博客系统中实现图片左右翻动查看的完整方案。通过 initArticleImages() 收集并过滤文章区图片,构建 Lightbox 组件并提供放大、缩放、触摸滑动、键盘方向键和 ESC 关闭等交互。核心代码包括 HTML 结构、CSS 样式以及管理图片索引、导航按钮状态、边界检查的 JavaScript,实现平滑导航、按钮禁用提示和响应式布局。文章还强调性能优化、可访问性和用户体验要点,并指出该查看器可复用于产品展示、相册等多图场景。

面试篇【三】

文章讨论Java面试常见知识点,包括GC根对象及不可达对象的回收机制、字符编码体系与UTF‑8中文字节数、静态代理与动态代理的区别、异常体系及Checked/Unchecked划分、方法解析与分派(静态/动态)、equals/hashCode的使用规则、实现多态的必要条件、对象序列化方式、反射的原理与用法、注解的定义与元注解、泛型的擦除实现、String不可变的原因与内部实现、Redis六大数据结构及适用场景、缓存穿透/击穿/雪崩的防护方案,以及Kafka、RabbitMQ、RocketMQ在性能、可靠性和可用性方面的对比。

Java 21 新功能介绍(LTS)

Java 21(2023 9月发布)是继 17 后的下一个 LTS,正式推出 15 项 JEP。核心亮点包括:虚拟线程(JEP 444)实现数百万轻量线程、资源占用极低,配合结构化并发(JEP 453)提供任务范围管理与异常传播;序列集合(JEP 431)扩展 List、Map 的顺序操作;记录模式与增强的模式匹配(JEP 440)提升解构与 switch 表达力;外部函数与内存 API(JEP 442)取代 JNI,实现安全高效的本地调用;还有字符串模板(预览)、分代 ZGC、后量子密钥封装等特性。文中指出了已弃用的 Windows 32‑bit、Applet、Security Manager 等,并给出兼容性检查、虚拟线程与 ZGC 调优建议。通过高并发 Web 服务和 ETL 场景示例,展示新并发模型的实际价值,并展望虚拟线程、模式匹配和 Project Loom 将继续驱动 Java 生态演进。开发团队应尽早评估迁移,以享受长期支持和性能提升。

Java虚拟线程(Project Loom):并发编程的新纪元

Java 21引入的虚拟线程是轻量级、由JVM调度的线程,创建和切换成本极低,可实现百万级并发。它兼容现有并发API,支持阻塞IO、结构化并发和调试监控。文章展示了在Web服务器、批量处理、微服务等场景的使用示例,提出避免pin、合理使用ThreadLocal、使用ReentrantLock等最佳实践,并提供渐进式迁移方案。虚拟线程解决了传统线程的数量、上下文切换和内存瓶颈,标志着Java并发编程进入新纪元。

Redis 缓存击穿、缓存穿透、缓存雪崩的解决方案

Redis 通过在内存中缓存 DB 数据,提高读写性能,但不当设计会出现三大问题: 1)缓存击穿:热点数据在高并发下刚好失效,所有请求冲击 DB。解决方案包括不设过期或加随机过期、预热热点、使用分布式锁防止并发 DB 读取。 2)缓存穿透:查询不存在的键,每次都落库。可在 DB 未命中时缓存空值,或使用布隆过滤器在查询前拦截不存在的键。 3)缓存雪崩:大量键同时间失效或 Redis 故障导致请求全部落库。防止措施有给过期时间加随机值、接口限流、服务熔断,以及构建 Redis 哨兵/Cluster 高可用集群。 通过上述策略,可保障缓存的高可用性,避免对后端数据库造成冲击。

面试篇【一】

文章系统梳理了面试常考的技术要点:Spring AOP 动态代理实现原理、JDK8 前后 HashMap 与 ConcurrentHashMap 的结构与扩容机制、线程池大小的 CPU/IO 区分、G1 垃圾回收特性与 OOM 排查、MySQL 事务隔离级别及默认 REPEATABLE_READ、SQL 慢查询优化、缓存穿透/击穿/雪崩的原因与防御、LRU 实现、JVM 堆参数设置、栈队列应用、InnoDB 与 B+ 树索引、MVCC 与 undo log 原理以及索引失效情形。

操作系统(四)

Linux 内存管理包括硬件层次(寄存器、CPU 缓存、主存、外存)和软件机制。通过虚拟内存把连续的虚拟地址映射到离散的物理页,使用多级页表、TLB 与大页降低转换开销。内核将页划分为 ZONE_DMA、ZONE_NORMAL、ZONE_HIGHMEM 等区域,并在 NUMA 系统中按节点独立管理。Page cache 缓解磁盘 I/O,匿名内存、回收、compact 与 OOM killer 负责内存碎片与不足的处理。段页机制实现地址空间隔离,分页提供细粒度映射;mmap 直接把文件映射到进程虚拟地址,省去 page cache 的二次拷贝。整体目标是提高访问效率、实现进程隔离并在内存紧张时保证系统稳定。