Chrome查找Javascript内存泄露

Chrome查找Javascript内存泄露

javascript 内存回收

javascript内存大概也是周期性找到没有被使用的内存,然后将其回收.每个内存都会有引用计数来标示该对象,如果引用计数清零,说明内存可以被回收, 然后通过标记清除告诉内存回收器适时回收内存.

调试内存泄露

调试内存泄露一般要到解析器/VM里调,对于js来说就是browser. chrome的devtools提供了调试工具,主要由三种,Take Heap Snapshot,Record Allocation Profile和Record Allocation Timeline. 调试工具默认可能没有functioin call stack,需要在devtools的settings里勾选Record heap allocation stack traces

调试过程

使用Record Allocation Timeline可以记录整个时间段内存泄露情况, 如下图蓝色的柱子代表内存没有被回收,灰色的柱子是被回收调的内存.

选择某个时间段,可以看到这个时间段的内存使用情况,并且在Allocation Stack页签下看到function call stack. 在function call stack中inspect就可以看到那段代码引起的内存泄露.

修复后

修复后再使用Record Allocation Timeline功能抓取内存,可以看到之前泄露的内存已经在列表中消失,如下图.


访问: