日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

垃圾回收与内存管理

發布時間:2023/12/13 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 垃圾回收与内存管理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

垃圾回收機制

Javascript采用 自動垃圾收集機制,執行環境會負責跟蹤代碼執行過程中使用的內存,而在C和C++類的語言中,需要開發人員手工跟蹤內存的使用情況。

該機制的實現原理:找出那些不再繼續使用的變量,然后釋放其占用的內存,為此,垃圾收集器會按照固定的時間間隔周期性的執行這一操作。

javascript的垃圾回收機制會將變量分為兩大類:函數內的局部變量 和 非局部變量。因為,局部變量只在函數執行的過程中存在,在函數執行的過程中,為局部變量在棧或堆內存上分配相應的空間,函數執行完畢,釋放局部變量占用的內存空間,變量被銷毀;而對于非局部變量,垃圾收集器就需要跟蹤變量,判斷哪些沒用了,打上標記,這種標記策略因瀏覽器而異,通常有兩種。

1. 標記清除

垃圾收集器在運行的時候給存儲在內存中的所有變量都加上標記,然后,它會去掉執行環境中的變量和已經被環境引用的變量的標記。在此之后再被加上標記的變量將被視為準備刪除的變量,原因是環境中的變量已經無法訪問到這些變量了。最后,垃圾收集器完成內存清理工作。銷毀那些帶標記的值并回收他們所占用的內存空間。

到2008年為止,IE、Fireforx、Opera、Chrome和Safari采用的都是這種垃圾收集策略,只是收集的時間間隔不同。

2. 引用計數

引用計數的含義是跟蹤記錄每個值被引用的次數,當值的引用次數為0時,將其占用的內存空間回收,當垃圾收集器下次再運行時,它就會釋放那些引用次數為0的值所占用的內存。

但該方法存在一個很大的漏洞,當遇到循環引用(對象A中包含一個指向對象B的指針,而對象B中也包含一個指向對象A的指針)時,會出現大量的內存得不到回收。

目前,大部分瀏覽器都不采用這種方式,除了IE。IE中有一部分對象并不是原生的javascript對象,例如DOM和BOM中的對象是使用C++以COM(Component Object Model,組件對象模型)對象的形式實現的。

管理內存

Javascript為了安全性以及防止運行javascript的網頁耗盡全部系統內存而導致系統崩潰,分配給Web瀏覽器的可用內存數量通常比分配給桌面應用程序的少,但是這種內存限制問題不僅會影響給變量分配內存,同時還會影響調用棧以及在一個線程中能夠同時執行的語句數量。

因此,確保占用最少的內存可以讓頁面獲得更好的性能。優化內存占用的最佳方式,就是為執行中的代碼只保存必要的數據,一旦數據不再使用,通過將其值設置為null釋放其引用,這種做法叫做解除引用,這一做法適合大多數全局變量和全局變量的屬性,局部變量會在他們離開執行環境時自動被解除引用。

轉載于:https://www.cnblogs.com/onlycare/p/9791873.html

總結

以上是生活随笔為你收集整理的垃圾回收与内存管理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。