欧美1区2区3区激情无套,两个女人互添下身视频在线观看,久久av无码精品人妻系列,久久精品噜噜噜成人,末发育娇小性色xxxx

前端學(xué)習(xí)20 垃圾回收機(jī)制

在前端中,內(nèi)存管理是一個(gè)非常重要的領(lǐng)域。瀏覽器的垃圾回收機(jī)制(Garbage Collection ,GC)是現(xiàn)在瀏覽器中的核心的部分之一,它可以自動(dòng)管理內(nèi)存的分配與回收,幫助開發(fā)者避免手動(dòng)管理內(nèi)存,從而減少內(nèi)存泄露和性能問題的風(fēng)險(xiǎn)。

1.垃圾回收機(jī)制

垃圾回收是一種自動(dòng)內(nèi)存管理機(jī)制,用于識(shí)別和釋放不再使用的內(nèi)存,垃圾回收的核心目標(biāo)是釋放不在使用的內(nèi)存空間。在瀏覽器中,當(dāng)頁面中的某些對(duì)象不在被需要時(shí),垃圾回收機(jī)制會(huì)自動(dòng)將他們從內(nèi)存中移除,確保不會(huì)發(fā)生內(nèi)存泄露。

JavaScript是一種內(nèi)存自動(dòng)管理的語言,內(nèi)存管理的核心就是垃圾回收。

它主要通過兩種方式來檢測(cè)和釋放內(nèi)存:

  • 引用計(jì)數(shù)(Reference Couning):追蹤每個(gè)對(duì)象的引用次數(shù),當(dāng)一個(gè)對(duì)象的引用次數(shù)為零,就認(rèn)為該對(duì)象不再使用,可以釋放它占用的內(nèi)存。
  • 標(biāo)記清除(Mark-and-Sweep):通過標(biāo)記所有可達(dá)的對(duì)象,然后清除所有瑋柏哦記得對(duì)象來回收內(nèi)存。

引用計(jì)數(shù)曾經(jīng)是早期垃圾回收機(jī)制中的一個(gè)重要方法,但由于其無法解決循環(huán)引用、性能開銷較大以及不能有效解決內(nèi)存碎片問題,現(xiàn)代瀏覽器和大多數(shù)編程語言已經(jīng)轉(zhuǎn)向使用更高效的垃圾回收策略,如?標(biāo)記-清除算法分代回收、增量回收?和?并行回收?等。

2.垃圾回收機(jī)制的工作原理

2.1 引用計(jì)數(shù)

引用計(jì)數(shù)(Reference Counting)是一種較為基礎(chǔ)的垃圾回收算法,它通過追蹤對(duì)象的引用次數(shù)來判斷對(duì)象是否可以被回收。每個(gè)對(duì)象都維護(hù)一個(gè)計(jì)數(shù)器,表示它被多少個(gè)其他對(duì)象引用。當(dāng)一個(gè)對(duì)象的引用計(jì)數(shù)降為零時(shí),表示沒有任何引用指向該對(duì)象,可以安全地回收該對(duì)象的內(nèi)存。

工作原理:

  • 初始化引用次數(shù):每當(dāng)一個(gè)對(duì)象被創(chuàng)建并將其引用賦值給一個(gè)變量時(shí),該對(duì)象的引用計(jì)數(shù)為1。
  • 對(duì)象引用增加與減少當(dāng)一個(gè)對(duì)象被引用時(shí)(如賦值給其他變量或作為函數(shù)參數(shù)傳遞),它的引用計(jì)數(shù)增加;當(dāng)一個(gè)引用被銷毀時(shí)(如局部變量超出作用域或賦值為null),該對(duì)象的引用計(jì)數(shù)減少。
  • 回收垃圾對(duì)象:當(dāng)一個(gè)對(duì)象的引用計(jì)數(shù)降到零時(shí),意味著沒有任何引用指向該對(duì)象,垃圾回收器會(huì)回收該對(duì)象占用的內(nèi)存。
let obj1 = { name: "Object 1" };  // 引用計(jì)數(shù)為 1
let obj2 = obj1;                   // 引用計(jì)數(shù)為 2,因?yàn)?obj2 引用了 obj1
let obj3 = { ref: obj1 };          // 引用計(jì)數(shù)為 3,因?yàn)?obj3 引用了 obj1

obj2 = null;  // 引用計(jì)數(shù)為 2,obj1 的引用計(jì)數(shù)減少 1
obj3 = null;  // 引用計(jì)數(shù)為 1,obj1 的引用計(jì)數(shù)再次減少 1

obj1 = null;// 此時(shí),obj1 的引用計(jì)數(shù)變?yōu)?0,垃圾回收器可以回收 obj1

在上述代碼中,obj1?的初始引用計(jì)數(shù)為 1,后來通過?obj2?和?obj3?增加了引用計(jì)數(shù)。當(dāng)?obj2?和?obj3,obj1?被設(shè)置為?null?時(shí),obj1?的引用計(jì)數(shù)逐漸減為 0,垃圾回收器可以回收?obj1?占用的內(nèi)存。

但是引用計(jì)數(shù)會(huì)存在一定問題:

  • 循環(huán)引用問題

引用計(jì)數(shù)的一個(gè)顯著缺點(diǎn)是無法解決循環(huán)引用問題。例如,如果兩個(gè)對(duì)象互相引用對(duì)方,它們的引用計(jì)數(shù)始終大于 0,即使它們不再被其他對(duì)象引用,垃圾回收器也無法將它們回收,從而導(dǎo)致內(nèi)存泄漏。

2.2 標(biāo)記清除

標(biāo)記清除是現(xiàn)代垃圾回收器中常用的內(nèi)存回收算法,廣泛引用與JavaScript、Java、Python等編程與原的垃圾回收機(jī)制。它的核心思想是通過標(biāo)記存活對(duì)象,并清除未標(biāo)記的對(duì)象來實(shí)現(xiàn)內(nèi)存的回收。

標(biāo)記-清除算法的基本流程可以分為兩個(gè)階段:標(biāo)記階段(Mark Phase)和清除階段(Sweep Phase)。

  • 標(biāo)記階段

在這個(gè)階段,垃圾回收器會(huì)從根對(duì)象(Root Object)開始遍歷,標(biāo)記所有可以訪問到的對(duì)象為“活躍的”。

根對(duì)象包括全局對(duì)象當(dāng)前執(zhí)行棧上的局部變量,活動(dòng)函數(shù)等。

遍歷所有可達(dá)的對(duì)象,并將這些對(duì)象標(biāo)記為“活動(dòng)”狀態(tài),意味著它們?nèi)匀槐怀绦蛩谩?/p>

  • 清除階段

在標(biāo)記階段完成后,垃圾回收器會(huì)見檢查堆中的所有對(duì)象。

所有沒有被標(biāo)記為活動(dòng)的對(duì)象,(即不再被任何其他對(duì)象引用的對(duì)象)被認(rèn)為是垃圾,可以回收并釋放內(nèi)存。

這是,垃圾回收器會(huì)刪除這些不在需要的對(duì)象,釋放他們占用的內(nèi)存空間。

function createObjects() {
    let obj1 = { name: 'Object 1' };
    let obj2 = { name: 'Object 2' };
    let obj3 = { name: 'Object 3' };
    
    obj1.ref = obj2;  // obj1 引用 obj2
    obj2.ref = obj3;  // obj2 引用 obj3
    
    // 假設(shè)程序中不再使用 obj1 和 obj3
    obj1 = null;  // 斷開 obj1 和 obj2 的引用
    obj2 = null;  // 斷開 obj2 和 obj3 的引用
}

createObjects();

在上述代碼中,obj1、obj2?和?obj3?都是對(duì)象,它們之間通過引用相互連接。在?createObjects?函數(shù)執(zhí)行完后,obj1?和?obj2?都被設(shè)置為?null,它們之間的引用被斷開。

2.3 分代回收

分代回收基于一個(gè)觀察:大多數(shù)對(duì)象的生命周期很短,只有少數(shù)對(duì)象會(huì)存活較長時(shí)間。因此,垃圾回收器將內(nèi)存分為不同的代(Generation),并對(duì)不同代采用不同的回收策略。

  • 新生代(Young Generation):存放新創(chuàng)建的對(duì)象。新生代的垃圾回收頻率較高,采用復(fù)制算法(Copying Algorithm)進(jìn)行回收。
  • 老生代(Old Generation):存放存活時(shí)間較長的對(duì)象。老生代的垃圾回收頻率較低,采用標(biāo)記-清除或標(biāo)記-整理(Mark-and-Compact)算法進(jìn)行回收。

生成垃圾回收算法基于這樣一個(gè)假設(shè):大部分對(duì)象會(huì)很快變得不可達(dá),因此,年輕代的對(duì)象會(huì)頻繁進(jìn)行垃圾回收。只有生命周期較長的對(duì)象才會(huì)進(jìn)入老年代,老年代的回收相對(duì)較少,避免頻繁回收帶來的性能損耗。

全部評(píng)論

相關(guān)推薦

評(píng)論
1
1
分享

創(chuàng)作者周榜

更多
??途W(wǎng)
??推髽I(yè)服務(wù)