Java這門世界上公認(rèn)的開發(fā)語言,一直在開發(fā)界都是有著很高的地位的,而這種地位不管是有多少的編程語言都無法撼動(dòng)它的地位的。Java語言可以有著這么高的地位一直都是憑借著它本身的特點(diǎn)的,那么對于零基礎(chǔ)想要學(xué)習(xí)java的學(xué)員來說什么樣的java零基礎(chǔ)教程才是好的呢?
想要學(xué)習(xí)好java的話那么對于java的jvm運(yùn)行大家肯定是要先了解清楚的了,下面粵嵌科技的小編就帶大家一起來了解下jvm運(yùn)行時(shí)內(nèi)存是怎么樣的?Java 堆從 GC 的角度還可以細(xì)分為:新生代(Eden 區(qū)、From Survivor 區(qū)和 To Survivor 區(qū))和老年代。
新生代
是用來存放新生的對象。一般占據(jù)堆的 1/3 空間。由于頻繁創(chuàng)建對象,所以新生代會(huì)頻繁觸發(fā)MinorGC 進(jìn)行垃圾回收。新生代又分為 Eden 區(qū)、ServivorFrom、ServivorTo 三個(gè)區(qū)。
Eden 區(qū):Java 新對象的出生地(如果新創(chuàng)建的對象占用內(nèi)存很大,則直接分配到老年代)。當(dāng) Eden 區(qū)內(nèi)存不夠的時(shí)候就會(huì)觸發(fā) MinorGC,對新生代區(qū)進(jìn)行一次垃圾回收。
ServivorFrom:上一次 GC 的幸存者,作為這一次 GC 的被掃描者。
ServivorTo:保留了一次 MinorGC 過程中的幸存者。
老年代
主要存放應(yīng)用程序中生命周期長的內(nèi)存對象。老年代的對象比較穩(wěn)定,所以 MajorGC 不會(huì)頻繁執(zhí)行。在進(jìn)行 MajorGC 前一般都先進(jìn)行了一次 MinorGC,使得有新生代的對象晉身入老年代,導(dǎo)致空間不夠用時(shí)才觸發(fā)。當(dāng)無法找到足夠大的連續(xù)空間分配給新創(chuàng)建的較大對象時(shí)也會(huì)提前觸發(fā)一次 MajorGC 進(jìn)行垃圾回收騰出空間。
MajorGC 采用標(biāo)記清除算法:首先掃描一次所有老年代,標(biāo)記出存活的對象,然后回收沒有標(biāo)記的對象。MajorGC 的耗時(shí)比較長,因?yàn)橐獟呙柙倩厥铡ajorGC 會(huì)產(chǎn)生內(nèi)存碎片,為了減少內(nèi)存損耗,我們一般需要進(jìn)行合并或者標(biāo)記出來方便下次直接分配。當(dāng)老年代也滿了裝不下的時(shí)候,就會(huì)拋出 OOM(Out of Memory)異常。
零基礎(chǔ)想要學(xué)習(xí)java的話是要學(xué)習(xí)很的知識的,要先從基礎(chǔ)開始打起。如果說你想要學(xué)習(xí)java的話,那么粵嵌科技的小編歡迎大家來我們公司的java培訓(xùn)班進(jìn)行實(shí)地考察,也可以點(diǎn)擊我們文章下面的獲取試聽資格按鈕來獲取我們的java課程免費(fèi)試聽資格,在試聽中可以更加深入的了解我們粵嵌科技。