成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

javascript有gc嗎

javascript中有GC(垃圾回收機制)。JavaScript是使用垃圾回收機制的語言,執行環境負責在代碼執行時管理內存,會自動將垃圾對象(沒有被引用的對象)從內存中銷毀。

javascript有gc嗎

本教程操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。

JavaScript 中的垃圾回收機制(GC)

垃圾回收相關概念

① 什么是垃圾

沒有被使用(引用)的對象就是垃圾

② 什么是垃圾回收

沒有被引用的對象被銷毀,內存被釋放,就是垃圾回收

C、C++ 等編程語言需要手動垃圾回收。

Java、JavaScript、PHP、Python 等語言自動垃圾回收。

JS中擁有自動的垃圾回收機制,會自動將這些垃圾對象從內存中銷毀,我們不需要也不能進行垃圾回收的操作。我們需要做的只是要將不再使用的對象設置為 null 即可。

為什么需要垃圾回收

  • 在C / C++中,跟蹤內存的使用和管理內存對開發者來說是很大的負擔
    • JavaScript是使用垃圾回收機制的語言,也就是說執行環境負責在代碼執行時管理內存,幫開發者卸下了這個負擔
    • 通過自動內存管理實現內存的分配和資源的回收
    • 基本思路很簡單,確定哪個變量不會再被使用了,把它的內存空間釋放
    • 這個過程是周期性的,意思是這個垃圾回收程序每隔一段時間就會運行一次
  • 像JS中的對象、字符串、對象的內存是不固定的,只有真正用到的時候才會動態分配內存
    • 這些內存需在不使用后進行釋放以便再次使用,否則在計算機可用內存耗盡后造成崩潰
  • 瀏覽器發展史上的垃圾回收法主要有
    • 引用計數法
    • 標記清除法

引用計數法

思路

  • 變量只是對值進行引用
  • 當變量引用該值時,引用次數+1
  • 當該變量的引用被覆蓋或者清除時,引用次數-1
  • 當引用次數為0時,就可以安全地釋放這塊內存。
let arr = [1, 0, 1]   // [1, 0, 1]這塊內存被arr引用  引用次數為1 arr = [0, 1, 0]  // [1, 0, 1]的內存引用次數為0被釋放                    // [0, 1, 0]的內存被arr引用   引用次數為1 const tmp = arr  // [0, 1, 0]的內存被tmp引用   引用次數為2

循環引用問題

Netscape Navigator 3.0 采用

  • 在這個例子中,ObjectA和ObjectB的屬性分別相互引用
  • 造成這個函數執行后,Object被引用的次數不會變成0,影響了正常的GC。
  • 如果執行多次,將造成嚴重的內存泄漏。
  • 而標記清除法則不會出現這個問題。
function Example(){      let ObjectA = new Object();     let ObjectB = new Object();      ObjectA.p = ObjectB;     ObjectB.p = ObjectA;     }  Example();
  • 解決方法:在函數結束時將其指向null
ObjectA = null; ObjectB = null;

標記清除法

為了解決循環引用造成的內存泄漏問題,Netscape Navigator 4.0 開始采用標記清除法

到了 2008 年,IE、Firefox、Opera、Chrome 和 Safari 都在自己的 JavaScript 實現中采用標記清理(或 其變體),只是在運行垃圾回收的頻率上有所差異。

思路

  • 在變量進入執行上下文時打上“進入”標記
  • 同時在變量離開執行上下文時也打上“離開”標記
    • 從此以后,無法訪問這個變量
    • 在下一次垃圾回收時進行內存的釋放
function Example(n){     const a = 1, b = 2, c = 3;     return n * a * b * c; } // 標記Example進入執行上下文  const n = 1;  // 標記n進入執行上下文 Example(n);   // 標記a,b,c進入執行上下文 console.log(n); // 標記a, b, c離開執行上下文,等待垃圾回收

const和let聲明提升性能

  • const和let不僅有助于改善代碼風格,同時有利于垃圾回收性能的提升
  • const和let使JS有了塊級作用域,當塊級作用域比函數作用域更早結束時,垃圾回收程序更早介入
  • 盡早回收該回收的內存,提升了垃圾回收的性能

V8引擎的垃圾回收

V8引擎的垃圾回收采用標記清除法與分代回收法

分為新生代和老生代

新生代

新生代垃圾回收采用Scavenge 算法

分配給常用內存和新分配的小量內存

  • 內存大小

    • 32位系統16M內存
    • 64位系統32M內存
  • 分區

    • 新生代內存分為以下兩區,內存各占一半
    • From space
    • To space
  • 運行

    • 實際運行的只有From space
    • To space處于空閑狀態
  • Scavenge算法

    • 當From space內存使用將要達到上限時開始垃圾回收,將From space中的不可達對象都打上標記
    • 將From space的未標記對象復制到To space。
      • 解決了內存散落分塊的問題(不連續的內存空間)
      • 相當于用空間換時間。
    • 然后清空From space、將其閑置,也就是轉變為To space,俗稱反轉。
  • 新生代 -> 老生代

    • 新生代存放的是新分配的小量內存,如果達到以下條件中的一個,將被分配至老生代
      • 內存大小達到From space的25%
      • 經歷了From space <-> To space的一個輪回

javascript有gc嗎

老生代

老生代采用mark-sweep標記清除和mark-compact標記整理

通常存放較大的內存塊和從新生代分配過來的內存塊

  • 內存大小
    • 32位系統700M左右
    • 64位系統1.4G左右
  • 分區
    • Old Object Space
      • 字面的老生代,存放的是新生代分配過來的內存。
    • Large Object Space
      • 存放其他區域放不下的較大的內存,基本都超過1M
    • Map Space
      • 存放存儲對象的映射關系
    • Code Space
      • 存儲編譯后的代碼
  • 回收流程
    • 標記分類(三色標記)
      • 未被掃描,可回收,下面簡稱1類
      • 掃描中,不可回收,下面簡稱2類
      • 掃描完成,不可回收,下面簡稱3類
    • 遍歷
      • 采用深度優先遍歷,遍歷每個對象。
      • 首先將非根部對象全部標記為1類,然后進行深度優先遍歷。
      • 遍歷過程中將對象壓入棧,這個過程中對象被標記為2類
      • 遍歷完成對象出棧,這個對象被標記為3類
      • 整個過程直至棧空
    • Mark-sweep
      • 標記完成之后,將標記為1類的對象進行內存釋放

  • javascript有gc嗎

  • Mark-compact

    • 垃圾回收完成之后,內存空間是不連續的。

    • 這樣容易造成無法分配較大的內存空間的問題,從而觸發垃圾回收。

    • 所以,會有Mark-compact步驟將未被回收的內存塊整理為連續地內存空間。

    • 頻繁觸發垃圾回收會影響引擎的性能,內存空間不足時也會優先觸發Mark-compact

javascript有gc嗎

垃圾回收優化

  • 增量標記
    • 如果用集中的一段時間進行垃圾回收,新生代倒還好,老生代如果遍歷較大的對象,可能會造成卡頓。
    • 增量標記:使垃圾回收程序和應用邏輯程序交替運行,思想類似Time Slicing
  • 并行回收
    • 在垃圾回收的過程中,開啟若干輔助線程,提高垃圾回收效率。
  • 并發回收
    • 在邏輯程序執行的過程中,開啟若干輔助線程進行垃圾回收,清理和主線程沒有任何邏輯關系的內存。

內存泄露場景

全局變量

// exm1 function Example(){     exm = 'LeBron'    }  // exm2 function Example(){     this.exm = 'LeBron' } Example()

未清除的定時器

const timer = setInterval(() => {     //... }, 1000)  // clearInterval(timer)

閉包

function debounce(fn, time) {   let timeout = null;    return function () {     if (timeout) {       clearTimeout(timeout);     }      timeout = setTimeout(() => {       fn.apply(this, arguments);     }, time);   }; }  const fn = debounce(handler, 1000); // fn引用了timeout

未清除的DOM元素引用

const element = {     // 此處引用了DOM元素     button:document.getElementById('LeBron'),     select:document.getElementById('select') }  document.body.removeChild(document.getElementById('LeBron'))

如何檢測內存泄漏

這個其實不難,瀏覽器原帶的開發者工具Performance就可以

  • 步驟
    • F12打開開發者工具
    • 選擇Performance工具欄
    • 勾選屏幕截圖和Memory
    • 點擊開始錄制
    • 一段時間之后結束錄制
  • 結果
    • 堆內存會周期性地分配和釋放
    • 如果堆內存的min值在逐漸上升則存在內存泄漏

javascript有gc嗎

優化內存使用

1、盡量不在for循環中定義函數

// exm const fn = (idx) => {     return idx * 2; }  function Example(){     for(let i=0;i<1000;i++){         //const fn = (idx) => {         //    return idx * 2;         // }         const res = fn(i);     } }

2、盡量不在for循環中定義對象

function Example() {   const obj = {};   let res = "";   for (let i = 0; i < 1000; i++) {     // const obj = {     //   a: i,     //   b: i * 2,     //   c: i * 3,     // };     obj.a = i;     obj.b = i * 2;     obj.c = i * 3;     res += JSON.stringify(obj);   }   return res }

3、清空數組

arr = [0, 1, 2] arr.length = 0; // 清空了數組,數組類型不變 // arr = []  // 重新申請了一塊空數組對象內存

【推薦學習:javascript高級教程】

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
人妻被按摩师玩弄到潮喷| 爽一点搔一点叫大声点| 日韩精品一区二区三区中文| 色欲久久久天天天综合网| 婷婷五月六月激情综合色中文字幕| 无人区一码一码二码三码区别| 亚洲AV无码一区二区二三区软件| 亚洲日韩AV无码中文字幕美国| 曰韩一区二区三区视频| japanese日本护士18| 穿着旗袍方便C英语老师| 国产精品视频永久免费播放| 激情无码人妻又粗又大中国人| 久久久久亚洲AV成人人电影软件| 女人张开腿让男桶喷水高潮| 日韩无码视频一区二区三区| 香蕉免费一区二区三区在| 亚洲孕妇精品无码av| A∨天堂亚洲区无码先锋影音| 成人无码区免费A∨电影| 国产肉体XXXX裸体784大胆| 久久精品日日躁夜夜躁欧美| 欧美成人精品在线| 天天综合网网欲色| 亚洲欧美成人A∨在线观看| 97人妻碰碰碰久久久久禁片| 大明荫蒂女人毛茸茸| 狠狠色噜噜狠狠狠7777奇米| 免费看成人A级毛片| 日韩精品东京热无码视频| 亚洲AV永久中文无码精品综合| 伊伊人成亚洲综合人网7777| 波多野结衣高潮AV在线播放| 国产一区二区三区影院| 麻豆果冻视频传媒APP下载| 色婷婷粉嫩AV精品综合在线 | 动漫AV纯肉无码AV在线播放| 狠狠色噜噜狠狠狠7777米奇| 欧美日韩亚洲国产综合乱| 无码专区永久免费AV网站| 又爽又黄又无遮挡激情视频免费| 东京热一区二区三区| 精品亚洲成a人无码成a在线观看| 去掉小内打扑克的视频| 亚洲AV五十路在线观看| JLZZJLZZ全部女高潮| 黑人AV免费电影| 人妻少妇乱子伦精品无码专区毛片| 亚洲AV无码乱码在线观看代蜜桃| A级毛片毛片免费观看久潮喷| 国产美女被遭强高潮网站免费| 奶头被吃得又翘又硬| 亚洲 欧美 变态 另类 综合| EEUSS影院WWW在线观看| 极品VPSWINDOWS少妇| 人妻无码久久中文字幕专区 | MD豆传媒APP网址| 精东视频影视传媒制作| 日韩丰满少妇无吗视频激情内射| 亚洲色欲色欲综合网站色偷偷| 大爷你的太大了我| 麻豆极品JK丝袜自慰喷水久久| 挽起裙子迈开腿坐上去C黄| 18级成人毛片免费观看| 果冻传媒AⅤ毛片无码蜜桃| 日本成AⅤ人片日本伦| 亚洲一区二区三区在线网址| 国产成人 综合 亚洲欧美| 女的被弄到高潮娇喘喷水视频| 亚洲AⅤ永久无码一区二区三区 | 日日AV色欲香天天综合网| 一边喂奶一边挨CAO| 国产精品∧V在线观看| 护士被弄到高潮喷水抽搐| 日本少妇三级HD激情在线观看| 搡老女人911熟妇老熟女| 一本一道波多野结衣一区| 国产精品乱码久久久久久软件| 欧美性猛交╳XXX乱大交| 野花高清视频免费观看完整版中文 | 久久精品AⅤ无码中文字字幕蜜桃 久久精品AⅤ无码中文字字幕 | 日本WWW一道久久久免费榴莲| 一二三四社区在线高清观看| 国产精品一区二区久久不卡| 日本XXXX裸体XXXX| 中文字幕无码乱人伦 | 亚洲国产成人精品无码区在线网站 | 18禁黄网站禁片免费观看女女| 国自产精品手机在线观看视频| 熟妇高潮精品一区二区三区 | 欧洲免费无线码在线一区| 尹人香蕉久久99天天拍| 狠狠色综合久久久久尤物| 偷拍 拍自 欧美色区| 潮喷失禁大喷水AⅤ无码| 欧美Z0ZO人禽交| 一区二区在线视频| 久久99精品网久久| 亚洲AV午夜福利精品一区二区| 国产成人精品无码一区二区三区| 日本黑人乱偷人妻中文字幕 | 国产曰的好深好爽免费视频 | 一本大道无码AV天堂| 黑人xxx欧美性爱| 无人高清视频免费观看在线| 大象国精产品一品二品在线| 强 暴 疼 哭 处 女| 97久久国产亚洲精品超碰热| 鲁大师在线影院免费观看| 亚洲日韩精品无码AV成人小说| 国自产精品手机在线观看视频| 性啪啪CHINESE东北女人| 国产成人影院一区二区三区| 色偷偷偷久久伊人大杳蕉| 潮喷无码正在播放| 日本少妇人妻XXXXX18免费| 扒掉内裤露出打嫩嫩的屁股| 秋霞在线观看视频| S货叫大点声C烂你的SB| 欧美一区二区三区放荡人妇| CHINSEFUCKGAY无套| 欧美猛片BBBBBⅩXXXX| 92国产精品午夜福利| 男女无遮挡猛进猛出免费观看视频| 在公交上被灌满白浆的视频| 老头老太太GMBGMBGM| 中文人妻无码一区二区三区在线| 两根大肉大捧一进一出好爽视频| 野花香高清在线观看视频播放免费 | 亚洲精品美女久久7777777| 精品久久久久久无码专区| 亚洲精品TY久久久久久久久久| 精品少妇爆乳无码AⅤ区| 亚洲国产欧美在线人成| 久久国产香蕉一区精品蜜桃| 野花社区WWW官网在线观看| 老汉扛起娇妻玉腿进入| 19岁MACBOOKPRO免费| 欧美精品视频一区二区三区| XXX片黑人又大又粗又长| 日本人XXXX裸体XXXX| 丰满少妇被猛烈高清播放| 挽起裙子迈开腿坐上MBA| 国产午夜精品久久久久免费视| 亚洲VA欧美VA国产VA综合| 精品国模一区二区三区| 一区国产情侣宾馆射| 欧美老人巨大XXXX做受视频| 草草浮力院禁止18进入| 熟女无套高潮内谢吼叫免费| 国产乱子夫妻XX黑人XYX真爽| 亚洲AV永久无码精品秋霞电影秋| 久久R热这里只有精品| 中文字幕亚洲综合久久2020| 欧洲AV无码放荡人妇网站| 丰满少妇大力进入| 亚洲AⅤ久久久噜噜噜噜| 久久精品无码一区二区小草| 2014AV天堂网| 色老头BGMBGMBGM| 国产偷国产偷精品高清尤物| 亚洲日韩欧美一区二区三区| 妺妺窝人体色WWW网| 大J8黑人W巨大888A片| 午夜在线观看的免费网站| 久久精品99久久香蕉国产色戒 | 亚洲色成人网站WWW永久男男| 裸体美女扒开下部无遮挡网站免费| JEAⅠOUSVUE成熟HD| 婷婷伊人久久大香线蕉AV| 精品人妻少妇嫩草Av无码专区| 中文字幕在线无码一区二区三区| 人妻夜夜爽天天爽三区麻豆AV网| 国产CHINASEX对白VIDEOS麻豆| 亚洲国产婷婷香蕉久久久久久| 蜜臀国产AV天堂久久无码蜜臀| 成年午夜免费韩国做受| 亚洲AV男人的天堂在线观看| 狂躁美女大BBBBBB视频U| 波多野结衣好大好紧好爽 | 在线观看的AV网站| 日韩欧美一区二区三区视频| 国产最新无码AⅤ在线播放| 在线看AV的网站| 色婷婷五月色综合AⅤ小说| 精品国内自产拍在线观看视频| 99热成人精品热久久6| 无码AV中文一区二区三区桃花岛| 久久精品国产亚洲AV忘忧草18| 把腿张开老子CAO烂你| 亚洲AV无码乱码在线观看性色扶 | 久久久久久成人毛片免费看| 暴躁老外玩MINECRAFT| 亚洲AV永久无码精品一区二区| 女少18XⅩXX性XXXXHD| 国产精品美女久久久久网站浪潮| 欲色欲色天天天WWW| 玩50岁四川熟女大白屁股直播| 久久久午夜成人噜噜噜| 各种少妇BBW撒尿|