打开工具后,点击"开始监控"按钮启动内存时间线图表。图表会实时显示堆内存的变化情况。然后点击不同的对象分配测试按钮,观察每次分配后堆内存的变化。例如点击"大数组"按钮后,您会看到堆内存明显增加;点击"释放"按钮后,堆内存会在下次垃圾回收时下降。
通过对比不同数据结构的内存开销,您可以了解哪些操作对内存影响最大。对象池(5万属性)通常比大数组(10万元素)消耗更多内存,因为每个属性都需要额外的哈希表开销。闭包(5千个)会保持对外部变量的引用,可能导致这些变量无法被垃圾回收。
快照功能是识别内存泄漏的利器。在操作前后各拍一个快照,对比两个快照的差异。如果某些对象在操作后仍然存在且数量持续增长,可能存在内存泄漏。FinalizationRegistry 可以帮助确认对象是否被正确回收:如果注册了回收回调的对象在释放后没有触发回调,说明可能存在引用未释放的问题。
开始分析前,先了解工具界面的各个部分。顶部是控制按钮区域,中间是内存时间线图表,下方是对象分配测试按钮和统计信息。点击"开始监控"启动内存追踪,图表会实时更新。然后逐一点击测试按钮观察效果:大数组按钮创建 10 万元素的连续数组,对象池按钮创建 5 万属性的单个对象,Map 按钮创建 2 万条目的映射表,闭包按钮创建 5 千个闭包函数。每种分配都会在图表上产生明显的内存增长。点击"释放所有"按钮后,观察内存是否回落。如果内存不回落,可能存在未释放的引用。使用快照功能在操作前后各拍一个快照,对比差异可以精确定位增长的对象类型。
UD5工具箱