一、為什么要有垃圾回收
我們每次創(chuàng)建對(duì)象都需要在棧上開(kāi)辟空間,堆上使用內(nèi)存,如果我們只是開(kāi)辟了這個(gè)空間,而不去釋放他,那么再大的內(nèi)存和空間也會(huì)有滿的一天,所以我們?cè)贘ava中引入了GC(垃圾回收機(jī)制)
二、GC如何確認(rèn)是否是垃圾
可達(dá)性分析:以代碼中的一些變量為起點(diǎn),看哪些對(duì)象能被訪問(wèn)到,標(biāo)記為可達(dá),剩下的不可達(dá)的也就是垃圾了。
這里稱為起點(diǎn)的變量(GCRoot),可以為棧內(nèi)的局部變量,常量池中的對(duì)象,方法區(qū)中的靜態(tài)引用類型的成員。
大家可以將他想成一個(gè)二叉樹(shù)
不可達(dá),就是把他們中間相互連接的這個(gè)線給抹除,無(wú)法訪問(wèn)
然后GC就認(rèn)為2是垃圾,就會(huì)去回收他
三:GC回收的方法
Java中采用分代回收的方法
?新開(kāi)辟的進(jìn)程會(huì)被放在伊甸區(qū),GC會(huì)頻繁對(duì)其進(jìn)行掃描
每次掃描,該進(jìn)程的年齡就會(huì)增加一歲
如果到了一定的年齡,該進(jìn)程任然在運(yùn)行,不是垃圾,那么就會(huì)被放到掃描頻率低一點(diǎn)的幸存區(qū)
如果在幸存區(qū)進(jìn)行反復(fù)掃描依然存活
最后就會(huì)被丟到掃描頻率最低的老年區(qū)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-563235.html
PS:一個(gè)很大的程序會(huì)被直接丟到老年區(qū)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-563235.html
到了這里,關(guān)于關(guān)于java垃圾回收的小結(jié)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!