最近一段時間限府,垃圾分類很火骇吭,原因是人們發(fā)現(xiàn)扔垃圾這件小事岖常,竟然沒想象中那么簡單。
以前不管什么垃圾锅锨,都是一股腦全扔在一起,現(xiàn)在倒好恋沃,要分什么干垃圾必搞、濕垃圾、有害垃圾和可回收物囊咏,這都是什么鬼啊恕洲,為啥要搞那么復雜~
看到這里的同學塔橡,肯定會以為我接下來會講,如何區(qū)分這些分類吧霜第?NONONO!我要講的是在計算機世界葛家,如何進行垃圾回收(GC即Garbage Collection)。
咱們先來看一個段子吧泌类,是說你到過的餐廳里邊癞谒,其實都只能分為兩種,一種是吃完需要自己端盤子的末誓,另外一種就是吃完直接走人扯俱,由專門的服務員來收拾盤子的,這其實就是兩種回收機制喇澡。在編程界迅栅,前一種機制的代表語言是C++,后一種則是Java晴玖。
今天我們主要聊的就是读存,Java是如何對內(nèi)存進行垃圾回收的,咱們先看圖
從圖中可以得出呕屎,Java堆內(nèi)存是分區(qū)進行管理的让簿,主要分為2個區(qū)域-年輕代與老年代,其中年輕代又分 Eden 區(qū)和 Survivor 區(qū)秀睛,其中 Survivor 區(qū)又分 From 和 To 2個區(qū)尔当。可能這時候大家會有疑問蹂安,為什么要分這么多區(qū)椭迎,搞那么復雜(感覺和現(xiàn)實中垃圾分類好像哦,都挺復雜)~
不要急田盈,我們慢慢來看畜号,年輕代從字面意義上來講,主要存放一些新建(剛出生)不久的對象允瞧,老年代則存放的是简软,生命周期比較長的對象,中間的Surivor區(qū)是二者的過渡區(qū)述暂,也可以理解為加一層保險痹升,以防漏網(wǎng)之魚。
為什么要分區(qū)畦韭,其實這是經(jīng)過了多年摸索视卢,才演化總結(jié)出來的方法,之前對所有對象大一統(tǒng)的方法廊驼,不管怎樣總是有這樣和那樣的缺陷据过,最后發(fā)現(xiàn)分區(qū)才是最適合的方法惋砂。
每個區(qū)的處理機制不一樣,比如年輕代垃圾回收會更頻繁绳锅,老年代則很久才會做一次回收西饵,根據(jù)對象的不同生命周期分而治之,就像韋小寶一樣鳞芙,見人說人話眷柔,見鬼說鬼話,最后黑白兩道通吃原朝,到哪都有兄弟驯嘱,還抱得眾美人歸。
毫不夸張的說喳坠,正是由于采用了合理的垃圾回收機制鞠评,計算機程序才能做到,長時間的不宕機穩(wěn)定運行壕鹉,也才能有如今如火如荼的互聯(lián)網(wǎng)產(chǎn)業(yè)剃幌。
別的不談,單從計算機垃圾回收目前的機制來看晾浴,咱們在現(xiàn)實生活中實施垃圾分類负乡,長遠來看是正確的做法,因為只有分類了脊凰,才能快速找到最適合它的處理方式抖棘。