Ajax記憶體流失(memory leak)的學習筆記

來源:互聯網
上載者:User

在《Ajax實戰》中第8.3.1章節講記憶體流失。書中範例程式碼與在《JavaScript進階程式設計(第2版)》第4.3.4章節中那個簡單的範例程式碼相比要複雜多了。其中第242頁中 removePet 範例程式碼應該是:

Person.prototype.removePet=function(petName){var orphan=this.pets[petName];this.pets[petName]=null;if(orphan.unassignOwner){orphan.unassignOwner(this);}}

在這一個範例程式碼中,局部變數是:給了jim一個寵物貓執行個體 whiskers 引用的那一行:

jim.addPet(new Cat("whiskers");

全域變數是:給了jim 寵物狗 fido 引用的那一行:

var fido=new Dog("fido");jim.addPet(fido);

fido 的引用佔用著寶貴的記憶體,這就是記憶體流失的問題。直到第7步解除了引用,隨後記憶體才能被釋放

上行引起來的是第243頁的最後一行最後一句。這個“隨後”是指什麼時候呢?按《JavaScript進階程式設計(第2版)》第4章的相關內容來看,是指下次 GC 啟動並執行時候。

而《Ajax實戰》書中原文說是第7步記憶體釋放了,到底記憶體釋放被 GC 回收了嗎?這裡我還心存疑義,從開全域變數空間 到解除引用,這段過程可以按書上說是發生了記憶體流失的問題。但是再到下次GC啟動並執行時候,這段過程還算不算記憶體流失呢?

(完)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.