Go 教会我们的 Java 垃圾回收课
来源:dev.to — 2026-09-19
📋 概述
Codename One 团队把 Java 到 C 的提前编译运行时 ParparVM 拿去和 Go 对比,原本以为差异来自栈分配,深入后发现 Go 运行时在「何时回收、如何分摊标记工作」上的选择更值得借鉴,于是做了一轮垃圾回收调整。测试中进程常驻内存 98 MB 而存活数据很少,他们把最小分配阈值从 24 MB 下调,吞吐与 p99 几乎没动,常驻内存却从 98 MB 降到 38 MB,这轮工作最后还牵动到图片缓存该留什么。
🔑 核心要点
- 起点是怀疑栈分配,深入后发现问题在于何时回收与如何分摊标记工作。
- 把最小分配阈值从 24 MB 下调后,进程 RSS 从 98 MB 降到 38 MB,吞吐与 p99 的变化落在噪声之内。
- 度量口径是进程 RSS,包含 Java 堆之外的内存,不是只看堆内占用。
- ParparVM 把 Java 翻译成 C 提前编译,能看到整个应用并同时掌控对象布局、引用处理与回收器,约束更接近 Go 的原生运行时。
💡 金句
我们给了垃圾回收器一块它并不需要的空间——降下来之后,常驻内存从 98 MB 变成 38 MB。
👍 0
👎 0
← 返回 dev.to 首页