中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      Javascript垃圾收集機制介紹

      時間:2024-09-08 04:34:20 JavaScript 我要投稿
      • 相關推薦

      Javascript垃圾收集機制介紹

        經常使用 Javascript 的人會琢磨其垃圾收集機制,Javascript 并不像 C,C++ 那樣需要開發者手動去清除垃圾,在編寫 Javascript 程序是,開發者無需關心內存使用問題,所需內存分配以及無用內存(垃圾)的回收完全實現了自動管理。究其根源,主要是程序收集那些不再使用的變量,并且釋放其占用的內存。因此,垃圾收集機制會按照固定時間間隔,周期性反復的執行這一操作。

      Javascript垃圾收集機制介紹

        舉例來說,局部變量只存在于函數內部,程序會為局部變量在棧內存或堆內存中分配對應的存儲空間,當函數運行結束,局部變量所占用的內存就沒有存在的必要了,這時程序會釋放局部變量所占用的內存供其他變量使用。這是程序最簡單釋放內存的方法,但是很多時候,程序中變量會一直被使用,此時垃圾收集機制必須跟蹤變量并且判斷其是否被使用,是否可以釋放其內存空間。

        垃圾收集機制主要判斷變量釋放內存空間的方法有兩個:其一是標記清除法,其二是引用計數法。

        一、標記法,每個變量都有其運行環境,變量創建后會在某種環境中運行,比如創建一個局部變量,局部變量會運行在函數體內。當函數運行時,會標記局部變量為“進入環境”,當函數體運行結束后,意味著變量脫離了其運行環境,此時則將變量標記為“離開環境”。對于“離開環境”的變量,垃圾收集機制會進行相應記錄,并且在下一個回收周期時將其釋放。

        二、引用計數法,跟蹤記錄每個值的被引用次數。聲明一個變量并將一個引用類型值賦給該變量時,這個值得引用次數就是 1。如果同一個值又被賦給另外一個變量,則該值的引用次數加 1。相反,如果包含對這個值的引用的變量又取得另外一個值,這個值得引用次數減 1。當這個值得引用次數為 0 時,則說明沒有辦法再訪問到此值,因此就可以將其占用的內存空間回收。當垃圾收集器在下一個周期運行時,會釋放引用次數為零的值所占用的內存空間。(原文解釋參考:Javascript 高級程序設計 - 第二版)

        舉個例子來說:

        復制代碼 代碼如下:

        function countMethod(){

        var object1 = new Object(); // 聲明變量,計數器由 0 變為 1

        var object2 = new Object(); // 聲明變量,計數器由 0 變為 1

        object1.method1 = object2; // object1 計數器 -1,object2 計數器 +1

        object2.method2 = object1; // object1 計數器 +1,object2 計數器 -1

        }

        此函數運行退出后,object1 的計數器讀數為 1,object2 的計數器度數為 1。所以兩個變量都不會被銷毀。如果大量的這樣的程序存在于函數體內,就會導致大量的內存被浪費而無法回收,從而導致內存的泄露。

        上述問題解決方法,手動釋放 object1 object2 所占用的內存。即:

        復制代碼 代碼如下:

        object1.method1 = null;

        object2.method2 = null;

        對比上面的例子,舉一個正常情況下的例子。

        復制代碼 代碼如下:

        function countMethod(){

        var object1 = new Object(); // 聲明變量,計數器由 0 變為 1

        var object2 = new Object(); // 聲明變量,計數器由 0 變為 1

        object1.method1 = "This is object1"; // object1 計數器 -1,object1 讀數變為0

        object2.method2 = "This is object2"; // object2 計數器 -1,object2 讀數變為0}

        通過上例看出,正常情況下,當函數運行結束后,object1 object2的讀數均為 0,在下一個垃圾收集周期時,會被回收并且釋放其所占用的內存。

      【Javascript垃圾收集機制介紹】相關文章:

      perl- javascript中class的機制05-03

      JavaScript數組常用方法介紹09-04

      javascript克隆對象深度介紹07-25

      對javascript的理解08-08

      JAVA垃圾收集算法與內存泄露的解決方法12-04

      常用的JavaScript模式09-22

      Javascript的this用法簡述08-15

      有關深入理解JavaScript中的并行處理的介紹10-14

      JavaScript學習筆記08-24

      JavaScript 基礎教學09-29

      主站蜘蛛池模板: 国产亚洲av日韩av| 成人午夜视频在线观看高清| 免费在线观看国产黄色| 大屁股少妇一区二区无码| 男人深夜影院无码观看| 国产女人体一区二区三区| 新晃| 国产精品原创永久在线观看| 亚洲av熟女天堂系列| 午夜人妻中文字幕福利| 无码人妻精品中文字幕免费 | 日本中文字幕一区二区高清在线| 中文字幕亚洲第一页在线| 亚欧免费视频一区二区三区| 泗洪县| 江川县| 菏泽市| 马关县| 江油市| 河南省| 涿州市| 久久国产精品男人的天堂av| 亚洲中文久久久久无码| 国产女主播福利一二区| 久久国产精品免费一区六九堂| 安仁县| 阳谷县| 鄂托克旗| 国产成人亚洲合集青青草原精品| 在线视频一区二区亚洲| 最新欧美一级视频| 插进去内射视频免费观看| 久久狠狠爱亚洲综合影院| 国产黑色丝袜在线观看视频| 91亚洲最新国语中文字幕| 美女丝袜诱惑一区二区三区| 国内少妇高潮嗷嗷叫在线观看 | 亚洲av乱码一区二区三区女同| 国内精品久久久久久久久蜜桃| 亚洲一区二区在线视频中文字幕 | 国产人妖免费调教视频|