<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [toc] ### 1.變量在內存中的存儲 1.棧內存stack:六個基本類型,string,number,boolean,undefined,null,symbol 2.堆內存heap:在棧中存放一個地址,堆中開辟一塊空間,如:Object + 函數在堆中的存儲: ``` 1.函數體中的代碼會以函數字符串的形式保存在堆內存 2.棧內存會存放一個地址 3.函數執行過程中,會找到堆內存的函數字符串,然后執行 ``` ### 2.什么是垃圾回收機制 v8引擎存在一個垃圾回收器,他會按照固定的時間間隔周期性的尋找不再使用的變量,并將它們從內存中釋放 ### 3.垃圾回收機制如何管理內存(gc原理) #### 1.引用計數 1.解釋:跟蹤某個值被引用的次數,如果一個值的引用次數是0的時候,就表示可以將這塊內存釋放了 2.原理:每次引用的時候次數+1,被釋放的時候-1 ```js var obj1 = {a: 1} // {a:1}的引用次數+1 var obj2 = {a: 1} // {a:1}的引用次數+1 obj1 = {} // {a:1}的引用次數-1,但是這塊空間并未完全消除,因為obj2還引用著 obj1 = null // obj1 對{a: 10}的引用次數為0 obj2 = null // obj2 對 {a: 10} 的引用次數為0,此時這塊空間也會被回收 ``` 3.bug:兩個對象互相引用時,導致引用次數一直循環存在,內存泄漏 ```js // function fn() { var obj1 = {a: 1} var obj2 = {b: 2} obj1.a = obj2 obj2.b = obj1 console.log('1', obj1); console.log('2', obj2); } fn() ``` #### 2.標記清除(常用) 1.解釋:當變量進入環境時,這個變量標記為`進入環境`,而當變量離開環境時,將其標記為`離開環境`,最后垃圾回收器會銷毀并回收被標記為`離開環境`的值所占用的空間 2.執行環境(執行上下文): + 定義了變量或函數有權訪問的其他數據 + 每個執行環境都有一個與之關聯的變量對象(variable obejct),環境中定義的所有變量和函數都保存在這個對象中 3.全局執行環境: + 瀏覽器是window,關閉網頁或者瀏覽器才會銷毀 + node中是global,關閉應用程序才會銷毀 4.局部執行環境: + 當執行流進入函數時,會將該函數的環境推到一個環境棧中。 + 當該函數執行之后,棧將其環境彈出,把控制權返回到之前的執行環境 ### 4.V8的回收策略 1.分代回收: + 新生代:存在from和to兩部分 ``` 1.from空間存放不需要回收的對象,to空間中存放需要被回收的對象 2.from空間和to空間會進行多次的一個復制和反轉,如果復制多次后依然還會存貨,將會被認為是生命周期較長的對象,隨后被移動到老生代中,也叫晉升 ``` + 老生代:連續的結構 ``` 1.標記清除:會導致連續結構不連續 2.標記合并:將存活的對象移到一邊,將回收的對象移到另一邊 ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看