日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
聽(tīng)?zhēng)嵉睦洗鬆斨vJava的垃圾回收

 “哎,今天面試被面試官虐慘了,一個(gè)勁兒的問(wèn)垃圾回收的問(wèn)題。開(kāi)頭還能答幾個(gè),后來(lái)都招架不住了”

創(chuàng)新互聯(lián)從2013年成立,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站制作、做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元鄒城做網(wǎng)站,已為上家服務(wù),為鄒城各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話(huà):18980820575

剛面試完的小橙一邊走進(jìn)廁所,一邊在電話(huà)里和朋友抱怨著。

“一開(kāi)始從JVM問(wèn)我Java堆的內(nèi)存劃分,后來(lái)又問(wèn)為什么要分年輕代年老代,哪些對(duì)象會(huì)被認(rèn)為是垃圾,垃圾回收的 Root Set 有哪些。你說(shuō)咱們不都是背個(gè)年輕代年老代,再記住個(gè)Eden、Survivor這些嗎...”

聽(tīng)著小橙的抱怨,旁邊正在清理廁所地面的老大爺手中的拖把慢慢的慢了下來(lái)。

看著小橙掛斷電話(huà)還是一別「義憤填膺」的樣子,老大爺過(guò)來(lái)聊了起來(lái)。

“小伙子,還在死記硬背,看樣子你還沒(méi)理解Java 的垃圾回收呀”

“喲,您也懂Java ?” 小橙吃驚的看著老大爺,雖說(shuō)平時(shí)??吹嚼洗鬆斣诖驋邘?,但還是第一次知道他也懂編程。

“不瞞你說(shuō),我之前也做過(guò)開(kāi)發(fā)”。老大爺一邊說(shuō)著一邊望向窗外的遠(yuǎn)方,仿佛想起了以前的歲月。

“那您后來(lái)怎么不做了呢?” “老大爺~”

小橙的幾句話(huà),又把老大爺拉回到現(xiàn)實(shí)中。

“哎,以后有機(jī)會(huì)再和你說(shuō)。今天我大概給你說(shuō)說(shuō)我對(duì)Java 垃圾回收的理解吧,看看對(duì)你有沒(méi)有幫助”

“好啊” 小橙將信將疑。

伴著廁所內(nèi)空氣清新劑的味道,老大爺深吸一口氣,講了起來(lái)。

“就以我這每天打掃的廁所來(lái)說(shuō)吧。Java 里一般的「堆」內(nèi)存不是要分幾個(gè)「代」嘛,對(duì)象內(nèi)存分配盡量在年輕代進(jìn)行。”

聽(tīng)到「堆」、「年輕代」這些專(zhuān)業(yè)詞匯,感覺(jué)還真懂的樣子,小橙趕忙點(diǎn)了點(diǎn)頭。

“其實(shí)對(duì)象內(nèi)存的分配和垃圾的回收之間,并不是獨(dú)立的,回收空間的方式也影響分配的方式”

“而這一切都是為了效率,和我們平時(shí)的打掃工作類(lèi)似,如果不講究方法,就會(huì)一直忙個(gè)不停,效率還很差。你比如Java的垃圾回收過(guò)程中,為了不讓新的內(nèi)存分配影響現(xiàn)有的垃圾回收工作,會(huì)有Stop-The-World,在這段時(shí)間,垃圾回收工作,分配對(duì)象的線(xiàn)程都得停止。”

“我們保潔就像垃圾回收線(xiàn)程一樣,你們上廁所的,就像分配內(nèi)存的線(xiàn)程一樣。你應(yīng)該有印象,為了盡快打掃干凈廁所給你們使用,有時(shí)候我們保潔也會(huì)在廁所門(mén)口立個(gè)小牌子,「清掃中,請(qǐng)勿使用」。沒(méi)錯(cuò),這就是我們的STW,你們不進(jìn)來(lái)「搗亂」,我們就能很快的墩完地,擦干凈洗手池,后面你們就又能愉快的使用了”

“那每次都放個(gè)牌子,大家著急用也不方便啊”,小橙已經(jīng)進(jìn)入了這個(gè)生活的場(chǎng)景了。

“是的,所以像早上,中午大家在頻繁使用的時(shí)候,我們雖然也在打掃,但卻不能放個(gè)牌子。這個(gè)時(shí)候用過(guò)的池子我會(huì)清洗,因?yàn)橛眠^(guò)的,我能一眼看出來(lái),就像第一步的垃圾標(biāo)記一樣,在清洗的時(shí)候,不影響大家使用其他的,就像垃圾回收CMS的并行執(zhí)行一樣?!?/p>

“為了進(jìn)一步提升大家上廁所的效率,我們也給廁所分了代。左邊的一排是給大手留的,像老年代一樣,右邊一排是小手的,像年輕代。這樣大對(duì)象直接分配到大手老年代,要占用時(shí)間長(zhǎng),而「短作業(yè)」直接在右邊快速解決快速離開(kāi),短作業(yè)的區(qū)域,我們也可以再分成兩半,我中間放個(gè)牌子,這樣保證分配的時(shí)候都是連續(xù)的空間,使用完一半再開(kāi)放另一半?!?/p>

“萬(wàn)一小手解到一半要玩大的的朋友,請(qǐng)到左邊。當(dāng)然你說(shuō)像在年輕代使用的「復(fù)制算法」,在我們這兒略有點(diǎn)不適用,不能一哥們進(jìn)行到一半的時(shí)候,我說(shuō)朋友,你挪到邊上那個(gè),我把這個(gè)清洗一下。他非得打我不成。”

“標(biāo)記-清除這個(gè)是最常用的,一般在工作時(shí)間,用過(guò)的便池,我們會(huì)人工標(biāo)記一下,可能是記下來(lái),也可能是往里放個(gè)標(biāo)記,之后我們會(huì)馬上清洗?!?/p>

“標(biāo)記-整理這個(gè)倒是也有類(lèi)似的,比如我們也常會(huì)把幾個(gè)池子找個(gè)線(xiàn)分隔開(kāi)一下,大家使用時(shí)先用這邊的,我把那邊不干凈的幾個(gè)統(tǒng)一收拾完了,再全部放開(kāi)??赡苓@么說(shuō)你不好類(lèi)比。要不這么著,你就想著有個(gè)哥們他尿幾下要換一個(gè)地兒,所以他需要連續(xù)的幾個(gè)池子,所以我得把一個(gè)干凈一個(gè)臟這種不連續(xù)的清洗好了,給他們用”

“大爺,我現(xiàn)在有點(diǎn)亂兒”,聽(tīng)著老大爺說(shuō)了一籮筐的內(nèi)容,小橙一會(huì)兒明白一會(huì)糊涂。

“來(lái),我再給你捋一捋”

“你看啊,首先你記住最關(guān)鍵這一點(diǎn),不同的垃圾回收方式,也決定了內(nèi)存的分配方式,這兩個(gè)不是獨(dú)立的。同時(shí)為了更高效的完成工作,通常也會(huì)組合幾種回收方式一起用。比如「復(fù)制算法」,一般就用在年輕代這兒,因?yàn)楫吘挂话愕膶?duì)象生存周期都不長(zhǎng),同時(shí)只要把標(biāo)記出來(lái)的存活對(duì)象直接復(fù)制走就行,復(fù)制過(guò)去之后,空間還連續(xù),多好。其余的直接清除就行了。所以在年輕代復(fù)制幾輪之后該清除的也就都清了。留下來(lái)的再搬到老年代”

“那老年代回收過(guò)程中,難免會(huì)出現(xiàn)清了這個(gè)對(duì)象,但它旁邊還被占用這種情況,那下次從年輕代過(guò)來(lái)一個(gè)大塊頭,或者年輕代過(guò)來(lái)兩情侶,人家要挨著坐,放不下怎么辦?所以還得把這些不連續(xù)的空間,給整理一下,存活的都排整齊了,其它地方空出來(lái)給新來(lái)的’,這時(shí)候就會(huì)用到咱們說(shuō)的「標(biāo)記-整理」”

“所以你應(yīng)該發(fā)現(xiàn)了,不同的垃圾回收算法,因?yàn)橐龅氖虑椴煌再M(fèi)的時(shí)間也不同,針對(duì)高吞吐的和針對(duì)低延遲的必定不可兼得,只能權(quán)衡。所以你發(fā)現(xiàn)有些車(chē)站等,在人少的時(shí)候,可能會(huì)鎖上幾個(gè),或者拉個(gè)線(xiàn)標(biāo)記只能使用某部分,以此減小回收時(shí)間”

“說(shuō)了半天垃圾回收,哪些是垃圾呢?我們一般是推開(kāi)門(mén),看哪個(gè)有人在用,我們會(huì)暗暗記住,哪個(gè)有用過(guò)的「痕跡」,都認(rèn)為是垃圾。門(mén)是整個(gè)查找的「根」,每層樓里的各個(gè)廁所的門(mén),都是我們查找「垃圾」的「根」。在垃圾回收里不是也叫「根搜索算法」,也叫「可達(dá)性分析」嘛,從「根」開(kāi)始找,一直向下,能鏈接到的,叫可達(dá)對(duì)象,是存活的,沒(méi)人用的是垃圾。在 Java 里會(huì)把「虛擬機(jī)棧和本地方法棧」正在引用的對(duì)象、靜態(tài)屬性引用的對(duì)象和常量看做是「廁所的門(mén)」”。

“像一些小點(diǎn)的廁所,我們一個(gè)人打掃就行,那車(chē)站、機(jī)場(chǎng)這種大的場(chǎng)所內(nèi),一個(gè)人打掃不過(guò)來(lái),為了更快收拾好,就會(huì)同時(shí)出動(dòng)好幾個(gè)保潔,這就像垃圾回收里的 Parallel 收集器,多個(gè)線(xiàn)程一起,更快?!?/p>

“哦,對(duì)了, 垃圾回收里還有個(gè)「安全點(diǎn)」的概念,就是只有執(zhí)行到這里再進(jìn)行垃圾回收,才不會(huì)出錯(cuò),為什么呢?主要是為了讓垃圾回收的根集枚舉更精確,編譯器可以給每條指令都記一些信息,在需要STW的時(shí)候使用,可如果每個(gè)都記,代價(jià)太高,所以就選了一小部分,就是在安全點(diǎn)。如果廁所內(nèi)某個(gè)時(shí)刻視為可以暫停的點(diǎn),也就是女保潔需要清洗男廁,這個(gè)時(shí)候,需要觀(guān)察和詢(xún)問(wèn)里面有沒(méi)有人,當(dāng)某個(gè)時(shí)刻正好處于安全的時(shí)候,保潔開(kāi)始工作,大家先停止使用”

看到又有幾個(gè)小伙走進(jìn)廁所,“咱們以后有時(shí)間再聊”,說(shuō)著,老大爺又像平時(shí)一樣,快速開(kāi)始揮動(dòng)拖把,認(rèn)真的開(kāi)始了「垃圾回收」。


網(wǎng)站名稱(chēng):聽(tīng)?zhēng)嵉睦洗鬆斨vJava的垃圾回收
新聞來(lái)源:http://m.5511xx.com/article/dpjigsd.html