摘要:那此時(shí)服務(wù)員清理垃圾以供接下來(lái)的顧客使用,便是垃圾回收。垃圾回收器引擎中,專門(mén)監(jiān)控,并釋放垃圾的小程序。就相當(dāng)于,在餐館吃飯,少點(diǎn)的垃圾,就自己收拾了唄。反正我一般都不收拾滑稽原文在博客里面,有興趣的大佬可以去支持一下小白的博客
垃圾垃圾制造者的產(chǎn)生,推動(dòng)了垃圾處理者的出現(xiàn),所以在我們現(xiàn)在的生活中,人們生產(chǎn)的垃圾都會(huì)通過(guò)相應(yīng)的手段去處理掉,而不影響現(xiàn)代人的正常生活。程序來(lái)源于生活,所以程序世界也如同現(xiàn)代世界一樣,也要產(chǎn)生垃圾。當(dāng)然,也需要垃圾回收員來(lái)處理生產(chǎn)出來(lái)的垃圾.
在程序世界中,不再被任何變量使用的對(duì)像,或者說(shuō)不再被繼續(xù)使用的變量就是垃圾。
function(){ var a=0;//聲明變量并賦值 a++;//對(duì)變量進(jìn)行操作 //下面都沒(méi)有對(duì)變量a進(jìn)行操作,也就是沒(méi)有使用變量a,那變量a就變成了垃圾. var b=0; b++; }
可以把這個(gè)函數(shù)當(dāng)作為一個(gè)餐館,變量就相當(dāng)于客人,坐在餐桌上吃飯的時(shí)候,就是在對(duì)變量進(jìn)行操作,在占用著那個(gè)餐桌。但是當(dāng)客人吃完離開(kāi)后,產(chǎn)生的垃圾還是占用了那個(gè)桌子。服務(wù)員如果不來(lái)收拾,就會(huì)一直占用著那個(gè)桌子,一直占用著那個(gè)內(nèi)存,也就成了程序中的垃圾。
垃圾回收javascript中具有自動(dòng)垃圾回收的機(jī)制,js的程序會(huì)找出那些不再被繼續(xù)使用的變量,自動(dòng)釋放不再被任何變量使用的垃圾對(duì)象的內(nèi)存空間。
function(){ //局部變量在函數(shù)結(jié)束后,便會(huì)自動(dòng)被收回內(nèi)存 var a=0; a++; }
還是餐館中,客人吃完飯后產(chǎn)生的垃圾,還是占用了那個(gè)桌子,表現(xiàn)在程序中,就還在占用著那塊內(nèi)存。那此時(shí)服務(wù)員清理垃圾以供接下來(lái)的顧客使用,便是垃圾回收。
垃圾的危害內(nèi)存中空間都是有限的,內(nèi)存占用越多,自然程序運(yùn)行的越慢,當(dāng)內(nèi)存滿了的時(shí)候,程序就無(wú)法運(yùn)行,就像餐館,如果沒(méi)有服務(wù)員,每個(gè)顧客用完餐滯留的垃圾無(wú)法清理,那餐館可供顧客進(jìn)餐的餐桌就會(huì)越來(lái)越少,等到餐桌都被垃圾占滿,那這個(gè)餐館也就無(wú)法營(yíng)業(yè)了。
垃圾回收器js引擎中,專門(mén)監(jiān)控,并釋放垃圾的小程序。它有幾個(gè)特點(diǎn)
伴隨主程序在后臺(tái)并行執(zhí)行
會(huì)記錄每個(gè)對(duì)象被幾個(gè)變量使用著
只要發(fā)現(xiàn)一個(gè)對(duì)象不再被任何變量使用,就釋放該對(duì)象所占內(nèi)存
這些特點(diǎn)也是和現(xiàn)實(shí)中餐館的服務(wù)員一樣
服務(wù)員會(huì)在餐館營(yíng)業(yè)時(shí)間一直工作(伴隨主程序),他不會(huì)打擾每位顧客的進(jìn)餐(在后臺(tái))。
當(dāng)有顧客進(jìn)來(lái)餐館的時(shí)候,他會(huì)記錄顧客的桌位,并且記錄此桌位上顧客的個(gè)數(shù)
只要發(fā)現(xiàn)餐桌上有垃圾并且沒(méi)有人在進(jìn)餐了,他就會(huì)過(guò)去清理掉這些垃圾
策略具體到瀏覽器中,垃圾回收有兩個(gè)策略,這兩個(gè)策略書(shū)上解釋的很詳細(xì),網(wǎng)上解釋的也比較多,小白我就不在此詳細(xì)解釋了,簡(jiǎn)單的說(shuō)一下就好.
標(biāo)記清除當(dāng)變量進(jìn)入環(huán)境的時(shí)候就為變量標(biāo)記為"進(jìn)入環(huán)境",當(dāng)變量離開(kāi)環(huán)境的時(shí)候,會(huì)被標(biāo)上"離開(kāi)環(huán)境"。
垃圾收集器在運(yùn)行的時(shí)候會(huì)給存儲(chǔ)在內(nèi)存中的所有變量都加上標(biāo)記。然后,它會(huì)去掉環(huán)境中的變量以及被環(huán)境中的變量引用的標(biāo)記。而在此之后再被加上標(biāo)記的變量將被視為準(zhǔn)備刪除的變量,原因是環(huán)境中的變量已經(jīng)無(wú)法訪問(wèn)到這些變量了。最后。垃圾收集器完成內(nèi)存清除工作,銷毀那些帶標(biāo)記的值,并回收他們所占用的內(nèi)存空間。
引用計(jì)數(shù)另一種不太常見(jiàn)的垃圾回收策略是引用計(jì)數(shù)。引用計(jì)數(shù)的含義是跟蹤記錄每個(gè)值被引用的次數(shù)。當(dāng)聲明了一個(gè)變量并將一個(gè)引用類型賦值給該變量時(shí),則這個(gè)值的引用次數(shù)就是1。相反,如果包含對(duì)這個(gè)值引用的變量又取得了另外一個(gè)值,則這個(gè)值的引用次數(shù)就減1。當(dāng)這個(gè)引用次數(shù)變成0時(shí),則說(shuō)明沒(méi)有辦法再訪問(wèn)這個(gè)值了,因而就可以將其所占的內(nèi)存空間給收回來(lái)。這樣,垃圾收集器下次再運(yùn)行時(shí),它就會(huì)釋放那些引用次數(shù)為0的值所占的內(nèi)存。
當(dāng)然這個(gè)存在一些問(wèn)題,這個(gè)就不過(guò)多說(shuō)了。具體可以翻閱《js高級(jí)程序設(shè)計(jì)(第三版)》的垃圾收集處。
建議雖然js有主動(dòng)垃圾回收的機(jī)制,但是程序還是需要一定的判斷,而且是有時(shí)間間隔的。服務(wù)員不可能在你吃飯的時(shí)候一直盯著你問(wèn)你,“你啥時(shí)候吃完啊,好了沒(méi)?”,所以還是建議,只要一個(gè)變量不再使用的時(shí)候,要主動(dòng)為其賦值為null。 就相當(dāng)于,在餐館吃飯,少點(diǎn)的垃圾,就自己收拾了唄。反正我一般都不收拾 (滑稽)
原文在博客里面,有興趣的大佬可以去支持一下小白的博客
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/91410.html
摘要:筆者多次參與銀行運(yùn)營(yíng)商等大型企業(yè)的性能優(yōu)化工作總結(jié)了企業(yè)級(jí)應(yīng)用最應(yīng)重視的個(gè)性能指標(biāo),主要包括商業(yè)事務(wù),外部服務(wù),垃圾回收以及應(yīng)用布局。應(yīng)用布局最后要探討的性能指標(biāo)是應(yīng)用布局。另一個(gè)需要監(jiān)測(cè)的是容器性能。 雖然很多人都曾預(yù)言 Java 將一蹶不振,但是不可否認(rèn)的是,很多重要項(xiàng)目中,尤其是銀行和政府一些大型項(xiàng)目,Java 仍在其中扮演著極其重要的角色。筆者多次參與銀行、運(yùn)營(yíng)商等大型企業(yè)的性...
摘要:會(huì)解釋怎樣使用邏輯回歸,隨機(jī)森林,和自動(dòng)化腳本,但都不會(huì)深入。這使我在紐約地區(qū)積累了超過(guò)名粉絲,并且仍在快速增長(zhǎng)。我收集了個(gè)帳戶,這些帳戶發(fā)布了許多關(guān)于紐約的優(yōu)質(zhì)圖片。以下面這兩篇帖子為例這兩個(gè)帖子來(lái)自同一個(gè)紐約的帳戶。 showImg(https://segmentfault.com/img/remote/1460000019393373); 在家做飯不下館子可以減少開(kāi)支已經(jīng)是公開(kāi)的...
摘要:一前言的垃圾回收機(jī)制使用垃圾回收機(jī)制來(lái)自動(dòng)管理內(nèi)存。垃圾回收器只會(huì)針對(duì)新生代內(nèi)存區(qū)老生代指針區(qū)以及老生代數(shù)據(jù)區(qū)進(jìn)行垃圾回收。分別對(duì)新生代和老生代使用不同的垃圾回收算法來(lái)提升垃圾回收的效率。 V8 實(shí)現(xiàn)了準(zhǔn)確式 GC,GC 算法采用了分代式垃圾回收機(jī)制。因此,V8 將內(nèi)存(堆)分為新生代和老生代兩部分。 一、前言 V8的垃圾回收機(jī)制:JavaScript使用垃圾回收機(jī)制來(lái)自動(dòng)管理內(nèi)存。垃...
摘要:一垃圾回收與內(nèi)存泄漏參考內(nèi)存控制垃圾回收的垃圾回收策略主要基于分代式垃圾回收機(jī)制。內(nèi)存泄漏內(nèi)存泄漏的實(shí)質(zhì)就是應(yīng)當(dāng)回收的對(duì)象因?yàn)橐馔鉀](méi)有被回收,變成了常駐在老生代中的對(duì)象。造成內(nèi)存泄漏的主要原因有緩存隊(duì)列消費(fèi)不及時(shí)作用域未釋放。 內(nèi)容 1.內(nèi)存泄漏與垃圾回收2.cookie和session3.單線程原理4.上下左右居中的幾種實(shí)現(xiàn)。5.BFC和IFC模型。 一、垃圾回收與內(nèi)存泄漏 參考:內(nèi)...
摘要:新生代的對(duì)象為存活時(shí)間較短的對(duì)象,老生代中的對(duì)象為存活時(shí)間較長(zhǎng)或常駐內(nèi)存的對(duì)象。分別對(duì)新生代和老生代使用不同的垃圾回收算法來(lái)提升垃圾回收的效率。如果指向老生代我們就不必考慮它了。 這篇文章的所有內(nèi)容均來(lái)自 樸靈的《深入淺出Node.js》及A tour of V8:Garbage Collection,后者還有中文翻譯版V8 之旅: 垃圾回收器,我在這里只是做了個(gè)記錄和結(jié)合 垃圾回收...
閱讀 1325·2021-11-11 11:00
閱讀 3041·2021-09-24 09:47
閱讀 4950·2021-09-22 15:53
閱讀 960·2021-09-10 10:50
閱讀 3207·2021-09-01 11:40
閱讀 1160·2019-08-30 15:55
閱讀 473·2019-08-30 12:49
閱讀 1049·2019-08-29 17:12