001 - 使用鸿蒙WebView创建简单浏
364 2023-04-03 02:46:52
是指程序中己动态分配的堆内存由于某种原因未释放或无法释放,那么为什么没有释放呢(1.根据JS的垃圾回收机制,当内存中引用的次数为0的时候内存才会被回收 , 2.从根部出发触及到的对象被标记为不再使用才会被释放)
泄漏前,泄漏中,通过Delta对比对象变化
function Foo(){ var stage = [] setInterval(() => { debugger this.data = { name: 'wbczxxxxxxxxxxxxxxxxxx', hobby: { phone: '11' }, } stage.push(this.data) }); } const foo = new Foo()
如果你还不能确认是闭包导致的问题,通过调试工具右下角可以发现形成了闭包
打快照发现,Js Arrays对象内存明显上升
又通过Delta发现,array数组下的对象的个数在递增,通过对象的key值,可以定位到具体代码,进而定位到由于闭包引起对外层变量的引用,内存未释放
另外如果是浏览器里可以通过Performance也可以查看内存堆随时间的变化
最后插播一则小广告~