當前位置:
首頁 > 知識 > V8 新生代和老生代內存控制

V8 新生代和老生代內存控制

V8主要將內存分為:新生代 和 老生代。

1、新生代

新生代中的對象為存活時間短的對象。

它將堆內存一分為二,每一部分空間稱為 semispace,其中一個處於使用狀態(from 空間),另一個處於閑置狀態(to 空間)

內存限制:64位系統 和 32位系統分別為 32M 和 16 M (from 和 to 空間各佔一半)

對於新對象,將從 from 空間中進行分配內存 。

垃圾回收策略:Scavenge 演算法

首先檢查from空間,將存活對象複製到 to 空間,非存活對象將會被釋放。完成複製後,from 空間和 to 空間角色發生轉換。新對象始終從 from 空間中分配內存,to空間為閑置。

當再次進行垃圾回收時,也會執行和第一次同樣的複製操作,如果存在以下兩種情況之一,存活對象會被複制到老生代空間中,這個過程稱為 對象晉陞。

  • 存活對象已經經歷過一次Scavenge 回收

  • to 空間內存佔用比例超過 25% (保證新對象有足夠的內存可用)

2、老生代

老生代中的對象為存活時間長或常駐內存對象。

內存限制:64位系統 和 32位系統分別為 1400M 和 700 M

垃圾回收策略:Mark-Sweep (標記清除) 、Mark-Compact (標記整理)

Mark-Sweep 分為標記 和清除 兩個階段 。

Mark-Sweep 在標記階段,遍歷堆中的所有對象,並標記活著的對象,在清理階段,只清除沒有標記的對象。

Mark-Sweep 內存碎片問題:進行一次標記清除後,內存空間會出現不連續的狀態。這種內存碎片會對後續的內存分配造成問題 。

為了解決這個問題,Mark-Copact被提出來,它和 Mark-Sweep 的區別在於對象在標記死亡後,在整理過程中,將活著的對象往一端移動,移動完成後,直接清理掉邊界外的內存。

3、三種回收策略比較

V8 新生代和老生代內存控制

從圖中可以看出,在Mark-Sweep 和 Mark-Copact 之間,由於Mark-Copact需要移動對象,所以它的執行速度不能很快。

所以在取捨上,V8主要使用Mark-Sweep,在空間不足以對新生代中晉陞過來的對象進行分配時才使用Mark-Compact 。

4、垃圾回收引起的性能問題

為了避免出現JavaScript應用邏輯 與 垃圾回收器 產生衝突,垃圾回收的 3 種基本演算法都需要將應用邏輯暫停下來,待執行垃圾回收後再恢復執行應用邏輯,這種行為被稱為 全停頓 。

按官方說法,以1.5G的垃圾回收堆內存為例,V8做一次小的垃圾回收需要50ms以上,做一次非增量式垃圾回收甚至需要1s以上。這是垃圾回收中引起的 JavaScript 線程暫停執行時間,在這樣的時間花銷下,應用性能和響應能力都會直線下降。

在 V8 的分代式垃圾回收中,一次小垃圾回收只收集新生代,由於新生代默認配置的較小,且其中活動對象通常較少,所以,即便它是全停頓的影響也不大。

但 V8 的老生代通常配置較大,且存活對象較多,全堆垃圾回收的標記、清理、整理等動作造成的停頓就會比較嚴重。

為降低全堆垃圾回收帶來的停頓時間,V8做了以下改善措施:

【1】限制堆內存大小

新生代:64位系統 和 32位系統分別為 32M 和 16 M (from 和 to 空間各佔一半)

老生代:64位系統 和 32位系統分別為 1400M 和 700 M

【2】增量式垃圾回收

V8 先從標記階段入手,將原來一口氣停頓完成的動作改為增量標記(Incremental Marking),也就是拆分為許多小 步進,每做完一 步進,就讓JavaScript應用邏輯執行一小會兒,垃圾回收與應用邏輯交替執行直到標記階段完成。V8後續還引入Lazy Sweep(延遲清除)、Incremental Compaction (增量式整理),讓清理與整理動作也變成增量式的。同時還計劃引入並行標記與並行整理,進一步利用多核性能降低每次停頓的時間。

5、垃圾回收的觸發條件

  • 作用域: 能形成作用域的函數調用、with 以及全局作用域。

  • 閉包: V8無法主動回收內存中的閉包引用和全局變數引用。

6、內存泄漏

通常,造成內存泄漏的原因有如下幾個:

  • 隊列消費不及時

  • 作用域未釋放

中公優就業IT培訓,總有你想學的:http://xue.ujiuye.com

勤工儉學計劃,0元學IT!

http://www.ujiuye.com/zt/qgjx/?wt.bd=mmxtt

找工作太難?好漢,讓我助你一臂之力!

http://www.ujiuye.com/zt/jyfc/?wt.bd=mmxtt

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 IT優就業 的精彩文章:

認識js中的稀疏數組
於是,你就這樣拉黑了90%的好友?

TAG:IT優就業 |

您可能感興趣

十二生肖中,天生富貴命的生肖女,越老生活月美滿
5種倖存至今的「古老生物」,第3種僅生存在「中國」!
京劇老生表演,表演藝術是京劇老生的生命與核心!
新生老生都不容錯過的英國本土護膚品牌
普洱老生茶與新生茶有什麼區別?
生活在一億多年前的古老生物,第3種或在中國倖存
美國爾灣加大辦迎新會,中國留學生可向老生「取經」!
老生常談的祝福 老生常談的日子 老生常談的關懷 老生常談的周末
5種超強悍戰力的古老生物,第4種現在被當寵物餵養
5種仍未消失的古老生物,第3種最早記錄於中國
世界上現存的最古老生物 竟然是這個
遠古時期5種延續至今的古老生物,第3種僅生存在中國,瀕臨滅絕
7種倖存至今的古老生物,超半數存在中國,第4種最奇特
老生常談:愛生活 愛運動
新手篇:老生茶比新生茶有哪些明顯變化
老生常談:生活規律、飲食合理有助預防心梗!
跟蹤地球上最古老生命形式的記錄
漫威宇宙中四個最古老生物的力量,可以說是漫威中最強大的生物!
科學家找到的古老化石,是地球上最古老生命的證據
世界十大最古老生物 最老的有著28億年的歷史!