🌱
243
一杯咖啡的时间,聊聊技术与成长
咖啡养成
连载中 3/8
从单体到微服务:一次痛苦但值得的架构演进
当我们决定把跑了五年的 Spring Boot 单体拆成微服务时,以为最大的挑战是技术。跑了三个月才发现,真正的难题是团队认知对齐和数据一致性。这篇记录了完整的心路历程。
咖啡养成
连载中 12/20
排查四件套:jstack、jmap、jstat、jcmd 的实战分工
jstack 看线程在干什么,jmap 看堆里装了什么,jstat 看运行时在变什么,jcmd 是统一入口。四把刀各管一段,配合着用没有查不动的现场。
咖啡养成
连载中 11/20
GC 日志:把回收过程翻译成人话
一行 GC 日志里塞着七种信息:谁触发的、收了哪、停了多久、活了哪些。加上 -Xlog 配置,再加上日志分析工具,GC 不再是只能盯监控曲线的黑盒。
咖啡养成
连载中 10/20
ZGC:亚毫秒停顿是怎么炼成的
百 G 大堆停顿不到一毫秒,靠的是把搬家全部挪到并发阶段——着色指针让引用自带状态,读屏障让搬运中的对象依然可访问。代价是吞吐与内存,收益是停顿与堆大小解耦。
咖啡养成
连载中 9/20
G1:把堆切成 Region 之后发生了什么
G1 不再物理分代,而是把堆划成两千多个 Region,谁垃圾多先收谁——停顿时间第一次变成可设置的参数。RSet 与混合回收,是理解 G1 的两把钥匙。
咖啡养成
连载中 8/20
经典收集器:吞吐量与停顿时间的第一次分家
Parallel 追求单位时间产量最高,CMS 追求单次停顿最短——两条路线各有代价。CMS 的四阶段并发设计很优雅,碎片与并发失败的坑也为 G1 铺了路。
咖啡养成
连载中 7/20
回收算法:清除、复制与整理的三难选择
没有完美的回收算法,只有取舍:清除省空间留碎片,复制无碎片但费内存,整理两头顾却更慢。分代收集把三种算法按对象寿命各就各位。
咖啡养成
连载中 6/20
垃圾标记:可达性分析与四种引用的分工
引用计数过不了循环引用这一关,JVM 选择了从 GC Roots 往下摸——但摸到的就都能活吗?强软弱虚四种引用各守一岗,ThreadLocal 的内存泄漏就藏在弱引用里。
咖啡养成
连载中 5/20
双亲委派:为什么类加载器要讲究先来后到
同一个 Class 文件被两个加载器加载,JVM 会当成两个不同的类——这不是 bug 是设计。三层加载器、先问爹再自己干的模型,以及那些故意打破规则的场景。