Java 与 JVM
共 15 篇 · 按时间倒序,可连读
11-10
@Async 静默失效:自调用、异常黑洞与 MDC 丢失
导出改成异步,接口 180ms 就返回,任务却从没跑过。自调用绕过代理、void 返回值吞掉异常、默认执行器每次新建线程,三个问题互相掩护。修好之后 traceId 又丢了。
11-09
CompletableFuture 用了公共池:一次批量接口把 Tomcat 线程全占住
五个下游改并行,本地从 380ms 降到 120ms,压测 QPS 却腰斩。两百个 Tomcat 线程停在 join 上,干活的只有三个。公共池的容量、隔离与超时该怎么配。
11-08
启动 96 秒到 14 秒:Spring Boot 启动慢的分层排查
扩容时新 Pod 八十秒才 Ready,HPA 跟不上流量。从 Bean 实例化打点到收窄扫描包,再到 AlwaysPreTouch 与 JMX,每一层的收益和风险都记下来了。
11-07
堆只用了 900 MB 却被 OOMKilled:Metaspace 与堆外内存
Xmx 2g,堆使用率 46%,容器却以 Exit Code 137 被杀。差出来的 1.5 GB 在 Metaspace 和 Netty 的池化堆外内存里。NMT 与 pmap …
11-05
JVM 内存结构与 GC 调优:从 900ms 到 180ms
堆调到 8G 停顿反而变长?从分代布局讲清四类 GC 症状的判别方式,再用一次真实调优过程说明参数该怎么推。
11-05
线程池七个参数:一个无界队列引发的 OOM
newFixedThreadPool 把队列设成无界,3000 个任务直接吃满 3.2 GB。七个参数的真实作用顺序、四种拒绝策略与五个必踩的坑。
11-05
Java 线上排查工具链:从 CPU 100% 定位到方法行
CPU 高、内存涨、线程堆积、接口慢,四类现象各对应不同的第一条命令。jstack、jcmd、Arthas 的完整用法与判读方法。
11-05
Spring 事务失效的 8 个场景,每一个都踩过
@Transactional 在同类方法调用、非 public 方法、异常被吞掉、多数据源等 8 种场景下会悄悄失效。每种给出复现代码、失效原因和修法。
11-05
Spring Boot 自动配置原理与手写一个可用的 Starter
从 @EnableAutoConfiguration 到条件装配的加载顺序,再手写一个能用的 Starter。搞懂自动配置,才敢改别人的脚手架。
11-10
异常记录 java.lang.NoSuchMethodError: ‘void org.springframework.web.method.ControllerAdviceBean.<init>(java.lang.Object)'
在spring cloud 2025.0.0 + spring boot 3.5.7 + knife4j 4.5.0 集成,集成完成后没有报任何错误
12-06
Java8新特性-Optional 类
11-30
Java8新特性-Stream API
Stream到底是什么呢? 是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。 “集合讲的是数据,Stream讲的是计算!” 注意: ①Stream 自己不会存储元素。 …
09-19
Java8新特性-方法引用与构造器引用
08-17
Java8新特性-函数式接口
06-18
Java8新特性-Lambda 表达式
Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,…