#Java

ReentrantLock 源码解析

从 lock() 一路跟到 AQS 的 acquire、tryAcquire 和 LockSupport.park,理清独占锁的获取、自旋与阻塞唤醒流程。

ReentrantLock 源码解析

一行代码引发的性能暴跌 10 倍

循环里少写了一个引用,性能掉了十倍。从 JIT 逃逸分析与标量替换的角度,解释为什么「没被使用的对象」会真的被消除掉。

一行代码引发的性能暴跌 10 倍

一个正则表达式导致 CPU 高的问题排查过程

线上 CPU 飙到 80% 以上,最后定位到一个写错的邮箱正则。记录 top -H、jstack 到正则回溯(catastrophic backtracking)的完整排查过程。

一个正则表达式导致 CPU 高的问题排查过程

手写一个简单的 JVM(二):模拟运行 JVM

接上篇,把解析出的字节码放进模拟的运行时数据区:方法区、虚拟机栈、栈帧与局部变量表,实现指令分派并跑通一个 1+2 的加法。

手写一个简单的 JVM(二):模拟运行 JVM

手写一个简单的 JVM(一):解析 Class 文件

从 javap 的输出出发,对照 JVM 规范逐个字段拆解 Class 文件的二进制结构:magic、常量池、访问标记、字段与方法表,并用 Java 代码解析出来。

手写一个简单的 JVM(一):解析 Class 文件

Java 如何实现零拷贝

传统 IO 一次读写要经历四次内存拷贝。对比 mmap、sendfile 和真正的零拷贝,说明每种方式省掉了哪一次 CPU 拷贝。

Java 如何实现零拷贝

newFixedThreadPool 线程池导致线程泄漏

线上线程数每天稳定上涨直到报警。根因是每次调用都在 new 一个线程池,空闲线程永不释放。记录现象、jstack 分析与修复方式。

newFixedThreadPool 线程池导致线程泄漏