
gc-viz进阶玩法用step-by-step.html逐帧回放GC动画调试体验比GIF强10倍【免费下载链接】gc-vizAnimated visualizations of several garbage collection algorithms项目地址: https://gitcode.com/gh_mirrors/gc/gc-vizgc-viz 是一个把垃圾回收GC算法变成动画的开源可视化项目让你亲眼看到 Mark-Sweep、Copy 等回收算法如何在内存中运行。多数人只看过仓库里的 GIF但真正好用的进阶玩法是内置的交互式页面docs/step-by-step.html可以随意播放、暂停、逐帧观察遇到 root set、live set 关键帧自动停下还能点击任意内存格查看引用关系——调试体验比 GIF 强 10 倍。为什么 step-by-step 页面比 GIF 强 GIF 是只能看的成片而 step-by-step 页面是完整的播放器对比项GIF如 MARK_SWEEP_GC.gifstep-by-step.html播放控制固定循环播放Start / Pause / Continue 随意切换关键帧一闪而过自动暂停并显示 root set、live set 状态交互无点击内存格画出该格的引用指向线分辨率125x400 小图1201x4801 高清画布密度可调页面的核心思路很简单C 程序dkp.cc先运行一遍玩具 GC把每一步内存操作分配、赋值、复制、释放录制成脚本docs/frames.js超过 2800 行指令数据浏览器里的docs/engine.js再逐帧回放这个脚本。快速上手3 步启动 GC 动画回放 第 1 步克隆仓库git clone https://gitcode.com/gh_mirrors/gc/gc-viz cd gc-viz第 2 步生成动画数据makeMakefile默认ALGOMARK_SWEEP_GCmake 会编译dkp.cc并生成动画脚本frames.js顺带产出 GIF生成 GIF 需要 ImageMagick。第 3 步打开页面播放用浏览器直接打开docs/step-by-step.html无需服务器点击顶部的Start按钮即可。动画结束或暂停后按钮会变成 Continue再点 Start 会从头重放。认识播放器按钮、断点与状态栏页面顶部就是一行工具栏看懂它就能完整回放Start → Pause → Continue点击切换播放状态相当于给内存分配过程下断点自动断点当 GC 触发时脚本中的roots/live帧会让页面自动暂停状态栏分别显示root set根集合和live set存活集合这正是理解 GC 的两个核心概念bp 消息帧动画在line parseddata groupedranking finished等剧情节点暂停并提示方便你跟上示例程序的执行进度点击引用线在画布上点击任意内存格engine.js的draw_connection会画出一条白线告诉你这个格子里的引用到底指向谁——排查谁还活着特别直观。读懂内存格子颜色就是信息 画布由 4 层叠加而成网格、内存内容、动画效果、点击连线每个小格子代表一个内存字颜色有明确含义深灰格子被对象占用绿色字符串字符、数值内容如10白色文字类型标签如:s字符串、:n数字、:[]数组、:对象、:nil空值黄色引用值表示这个格子指向另一个地址红色闪烁GC 时刻的 root set / live set一眼看出哪些对象还活着。另外docs/engine.js第 1 行的var density ultra可改成low、medium、high、ultra四档密度小屏幕建议用 low避免格子太挤。切换 GC 算法5 种回收风格对比 Makefile提供 5 种算法开关改完重跑make再刷新页面就能逐帧对比不同 GC 的行为差异ALGO 选项算法观察重点NO_GC不回收看内存如何被占满到溢出REF_COUNT_GC引用计数看引用计数如何增减、对象何时立刻释放MARK_SWEEP_GC标记-清除默认看标记阶段如何遍历根集合与存活集MARK_COMPACT_GC标记-压缩看对象如何被搬到一起消除碎片COPY_GC复制式半空间看活对象如何整体复制到另一半空间示例程序由dkp.cc实现解析日志、分组、排序数据来自data/dkp.log-big和data/dkp.log-small两个日志文件如果想换更小的样本README 提醒你可能需要同时调整 GC 堆大小dkp.cc中的HeapSize。reference/目录下还有等价的 Rubydkp.rb、dkp-bad.rb和 Scaladkp.scala实现可作为逻辑参照。三个进阶调试技巧真正看懂 GC ️先通览再细看第一次别急着暂停让动画完整跑完一遍记住每轮 GC 前后内存占用的变化曲线卡在 root set 帧上逐个验证自动暂停后红色闪烁的就是根集合用点击引用线功能逐个确认谁被引用、谁该死这是理解标记-清除最快的路径同数据换算法对比保持data/dkp.log-big不变依次切换ALGO重新make对比 Copy GC 的对象搬家动画和 Mark-Sweep 的碎片残留——差异会非常直观。常见问题 FAQ需要起本地服务器吗不需要浏览器直接打开docs/step-by-step.html即可为什么 GIF 看起来比页面糊GIF 只是 125x400 的缩略成片页面原始画布是 1201x4801想用自己的数据怎么办修改Makefile中传给dkp.exe的日志文件如换成data/dkp.log-small数据变多时记得增大dkp.cc里的堆大小。gc-viz 的价值不在于玩具程序本身而在于把GC 到底怎么工作变成了可以暂停、点击、反复对比的动画。打开docs/step-by-step.html从 Mark-Sweep 一路玩到 Copy GC你对垃圾回收算法的理解会停留在画面里而不是停留在教科书里。【免费下载链接】gc-vizAnimated visualizations of several garbage collection algorithms项目地址: https://gitcode.com/gh_mirrors/gc/gc-viz创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考