利用chrome的Timeline观测系统的内存回收逻辑
生活随笔
收集整理的這篇文章主要介紹了
利用chrome的Timeline观测系统的内存回收逻辑
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
測試代碼如下:
<html> <script> var count = 0; var number = 1000; for (var i = 0; i < 900; i++) {var buggyObject = {callAgain: function() {var ref = this;var val = setTimeout(function() {ref.callAgain();var newArray = new Array();if( count > 3)number = 10000;for( var a = 0; a < number; a++)newArray[a] = a;console.log("called");count++;}, 1000); // end of val declaration} // end of call again} // end of object declaration } buggyObject.callAgain(); </script> </html>通過tab timeline觀測到在第3900ms時,系統(tǒng)有一個garbage collection的operation, 總共回收內(nèi)存425k:
garbage collection能夠生效的原因是因為在每次timer trigger并且執(zhí)行完畢后,當(dāng)前execution environment里的局部變量newArray 引用計數(shù)為0,因此可以被回收:
如果將該定義成局部變量的array改成全局變量,則GC不會再發(fā)生:
<html> <script> var count = 0; var number = 1000; var globalArray = []; for (var i = 0; i < 900; i++) {var buggyObject = {callAgain: function() {var ref = this;var val = setTimeout(function() {ref.callAgain();if( count > 3)number = 10000;for( var a = 0; a < number; a++)globalArray.push(a);console.log("called");count++;}, 1000); // end of val declaration} // end of call again} // end of object declaration } buggyObject.callAgain(); </script> </html>要獲取更多Jerry的原創(chuàng)文章,請關(guān)注公眾號"汪子熙":
總結(jié)
以上是生活随笔為你收集整理的利用chrome的Timeline观测系统的内存回收逻辑的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ChatGPT 成美反垄断机构“眼中钉”
- 下一篇: 支持应用文件夹,消息称 watchOS