<font id="zqva1"></font>
<rt id="zqva1"></rt>
  • <tt id="zqva1"></tt>
    <cite id="zqva1"></cite>

    <cite id="zqva1"><noscript id="zqva1"></noscript></cite>
      <rp id="zqva1"><meter id="zqva1"></meter></rp>

        <cite id="zqva1"></cite>
          <b id="zqva1"></b>
          <rp id="zqva1"></rp>
          <cite id="zqva1"></cite>

          <rt id="zqva1"></rt>

        1. <rp id="zqva1"></rp>

          JavaScript 內存管理和垃圾回收

          時間:?2017-11-23閱讀:?1007標簽:?內存

          JavaScript 的內存管理和垃圾回收,是個略生僻的話題,因為在JavaScript 中不顯式執行內存操作,不過最好了解它如何工作。

          在低級語言(如 C)中,開發人員需要使用 malloc()、calloc()、realloc()和 free()方法手動分配和釋放內存。 在高級語言(如 Java 和 JavaScript)中,不需要明確分配或釋放內存。 JavaScript 值在實體(對象、字符串等)創建時分配,不再使用時自動釋放。 這個過程稱為垃圾回收(Garbage collection,GC)

          內存生命周期:

          無論何種語言(高級或低級),內存生命周期都如下面所示。


          在高級語言中,我們只明確的讀寫內存(使用內存)。 在低級語言中,開發人員需要明確的執行所有三個步驟。

          分配和回收是自動發生的,然而這并不意味著開發人員不需要關心內存管理。 不良編碼導致內存泄漏,這種情況下,內存已經不再被應用程序使用,卻未被釋放。 因此,更多地了解內存管理非常重要。


          JavaScript 的內存分配:

          聲明變量時,JavaScript 自私為變量分配內存。

          var numberVar = 100;                // 為數字分配內存
          var stringVar = 'node simplified';  // 為字符串分配內存
          var objectVar = {a: 1};             // 為對象分配內存
          var a = [1, null, 'abra'];          // 為數組分配內存
          function f(a) {
            return a + 2;
          } // 為函數分配內存

          內存不再需要時,分配的內存會被釋放。 內存泄漏,以及大多數內存相關問題,都在釋放內存時發生。 最難的環節是找出不再使用的內存,并使用垃圾回收器追蹤。


          垃圾回收:

          垃圾回收是找出應用程序不再使用的內存并釋放的過程。 為了尋找哪些內存不再使用,垃圾回收器要用到一些算法,在這一部分,我們分析主要的垃圾回收算法和它們的局限性。 我們研究以下算法:

          引用計數垃圾回收。
          標記-清除算法。


          引用計數垃圾回收:

          這是最重要的垃圾回收算法。 在引用計數算法中,如果沒有對某個對象的引用,它會自動被垃圾回收。 該算法將零引用對象視為應用程序不再使用的對象。

          Example:

          var o = { a: { b: 2 } };
          // 2 個對象被創建。其中一個被另一個作為屬性而引用。
          // 顯然,沒有對象可以被垃圾回收。
          o = 1;     // 原來作為 o 的 a 屬性的對象,已經沒有引用。可以被垃圾回收。
          

          缺陷:循環依賴

          function func() {
            var o = {};
            var o2 = {};
            o.a = o2; // o 引用 o2
            o2.a = o; // o2 引用 o
            return 'true';
          }
          func();
          

          考察上面的代碼片段,其中 o 被 o2 引用,o2 被 o 引用,形成一個循環。 離開該方法范圍時,這兩個對象是無用的。 但是,垃圾收集器無法釋放內存,因為這兩個內存仍然互相引用。 這導致應用程序的內存泄漏。


          標記-清除算法:

          垃圾回收器使用此算法在對象不可到達時釋放內存,而不是零引用對象。

          垃圾回收器首先找到所有全局對象或根對象,并找到所有對這些全局對象的引用,以及對引用對象的引用,依此類推。 使用該算法,垃圾回收器識別出可達到和不可達到對象。 所有無法到達的對象都將自動被垃圾回收。

          本文首發在 Node Simplified。 看看 Top Javascript Tips and Tricks

          如果喜歡本文,點贊并轉發給開發者朋友吧 謝謝閱讀。


          站長推薦

          1.阿里云: 本站目前使用的是阿里云主機,安全/可靠/穩定。點擊領取2000元代金券、了解最新阿里云產品的各種優惠活動點擊進入

          2.騰訊云: 提供云服務器、云數據庫、云存儲、視頻與CDN、域名等服務。騰訊云各類產品的最新活動,優惠券領取點擊進入

          3.廣告聯盟: 整理了目前主流的廣告聯盟平臺,如果你有流量,可以作為參考選擇適合你的平臺點擊進入

          鏈接: http://www.modern-decoration.com.cn/article/detial/157

          通過內存分析來解釋JavaScript數組賦值問題

          初始的內存分布,形參變量存在棧中,對象存在堆內。如圖,棧中有arr,arr0,還有fun的形參data三個變量,分別指向了堆中的兩個數組對象的首地址。

          怎樣修復Web應用程序中的內存泄漏?

          從服務器端渲染的網站切換到客戶端渲染的 SPA 時,我們突然不得不更加注意用戶設備上的資源,必須做很多工作:不要阻塞 UI 線程,不要使筆記本電腦的風扇瘋狂旋轉,不要耗盡手機的電池等。我們將交互性和“類應用程序”行為轉換成了更好的新型問題

          為什么要內存對齊

          CPU訪問內存時,并不是逐個字節訪問,而是以字長(word size)為單位訪問。比如32位的CPU,字長為4字節,那么CPU訪問內存的單位也是4字節

          JavaScript內存管理

          高級語言解釋器嵌入了“垃圾回收器”,監控著所有對象,當對象生存周期結束時會將其刪除。內嵌的垃圾回收器的問題:自動尋找是否一些內存“不再需要”的問題是無法判定的

          JavaScript的內存模型

          在我們的前端日常工作中,無時無刻不在進行著變量的聲明和賦值,你是否也曾碰到過變量聲明報錯或變量被污染的問題,如果你跟筆者一樣碰到過,那么我們應該暫時停下來好好思考問題發生的原因以及如何采取相應的補救措施

          Node.js的內存分配和垃圾回收

          Node.js是一個由JavaScript V8引擎控制的C++程序,V8的內存管理模式一個運行的程序通常是通過在內存中分配一部分空間來表示的。這部分空間被稱為駐留集(Resident Set)。

          Js內存泄露

          用戶一般不會在一個 Web 頁面停留比較久,即使有一點內存泄漏,重載頁面內存也會跟著釋放。而且瀏覽器也有自動回收內存的機制,所以我們前端其實并沒有像 C、C++ 這類語言一樣,特別關注內存泄漏的問題。

          JS內存管理

          像C語言這樣的底層語言一般都有底層的內存管理接口,比如 malloc()和free()。相反,JavaScript是在創建變量(對象,字符串等)時自動進行了分配內存,并且在不使用它們時“自動”釋放。 釋放的過程稱為垃圾回收。這個“自動”是混亂的根源

          閉包真的會導致內存泄漏?

          今天遇到一個很有爭議的問題,在這里分享一下,我相信對于即將面試前端的小伙伴會有幫助的。主要內容是圍繞下邊的問題展開的,文章涉及到的其他方面的知識點不展開敘述。

          Web 應用的內存優化

          隨著 Web 應用復雜程度越來越高,以及 NodeJS 大規模投入生產環境,許多 Web 應用都會長時間運行, JavaScript 的內存管理顯得更為重要。JavaScript 具備自動回收垃圾的機制

          內容以共享、參考、研究為目的,不存在任何商業目的。其版權屬原作者所有,如有侵權或違規,請與小編聯系!情況屬實本人將予以刪除!

          文章投稿關于web前端網站點搜索站長推薦網站地圖站長QQ:522607023

          小程序專欄: 土味情話心理測試腦筋急轉彎幽默笑話段子句子語錄成語大全運營推廣

          国产精品高清视频免费 - 视频 - 在线观看 - 影视资讯 - 唯爱网