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 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,…