新聞中心
前言
創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括江漢網(wǎng)站建設(shè)、江漢網(wǎng)站制作、江漢網(wǎng)頁制作以及江漢網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,江漢網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到江漢省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
GC(Garbage Collection)是我們在學(xué)習(xí) JVM 的過程中不可避免的一道坎,接下來,我們就來系統(tǒng)的學(xué)習(xí)一下 GC。
做一件事情之前,我們一定要去知道我們?yōu)槭裁匆プ?,這里不僅僅指 GC,更適用我們?nèi)粘5膶W(xué)習(xí)和生活,知其然,知其所以然,方能百戰(zhàn)不殆。
下面我們先去了解為什么要有 GC,以及 GC 在 JVM 中扮演了一個(gè)什么樣的角色,起到了什么的作用?
為什么要有 GC
用過 C++ 的同學(xué)可能知道,對象所占的內(nèi)存在程序結(jié)束運(yùn)行之前一直被占用,在明確釋放之前不能分配給其它對象。如果我們不去手動的清除這些無用的對象,內(nèi)存很快就被占滿,而在 JVM 中,GC 所起到的作用就是一個(gè)清道夫,它可以幫助我們?nèi)ヅ卸男ο笫菬o用對象,怎么進(jìn)行垃圾收集,以及決定內(nèi)存分代和內(nèi)存分配的策略**。
可能有同學(xué)會問了,既然我們的 JVM 會給我們做 GC 的工作,我們?yōu)槭裁催€要去學(xué)習(xí) GC 呢,一切交給 JVM 不好嗎?當(dāng)然,在我們的日常情況下,我們一般不會去關(guān)心 GC 的一些細(xì)節(jié),但是當(dāng)我們遇到內(nèi)存泄露,內(nèi)存溢出,高并發(fā)瓶頸的時(shí)候,我們就需要去對 GC 開刀,進(jìn)行更為細(xì)致的監(jiān)控和調(diào)節(jié)。
內(nèi)存泄露:指程序中己動態(tài)分配的堆內(nèi)存由于某種原因程序未釋放或無法釋放,造成系統(tǒng)內(nèi)存的浪費(fèi),導(dǎo)致程序運(yùn)行速度減慢甚至系統(tǒng)崩潰等嚴(yán)重后果。
內(nèi)存溢出:應(yīng)用系統(tǒng)中存在無法回收的內(nèi)存或使用的內(nèi)存過多,最終使得程序運(yùn)行要用到的內(nèi)存大于能提供的最大內(nèi)存。
那么現(xiàn)在問題來了,我們要進(jìn)行垃圾回收,首先我們需要知道垃圾在哪
垃圾在哪
前面我們講了JVM 的運(yùn)行時(shí)內(nèi)存區(qū)域,知道線程可以分為線程獨(dú)占區(qū)和線程共享區(qū),其中線程獨(dú)占區(qū)(程序計(jì)數(shù)器,虛擬機(jī)棧,本地方法棧)的內(nèi)存生命周期是和線程保持一致,且這幾個(gè)區(qū)域分配的內(nèi)存大小跟類的大小有關(guān),也就是說,當(dāng)我們的類結(jié)構(gòu)固定之后,這部分的內(nèi)存就不會再發(fā)生更改,且當(dāng)方法或線程結(jié)束的時(shí)候,內(nèi)存自然就跟隨著回收了.
而線程共享區(qū)的堆內(nèi)存和方法區(qū)則不一樣,堆內(nèi)存和方法區(qū)所用的內(nèi)存是在編譯期間無法確定的,因?yàn)橐粋€(gè)接口的不同實(shí)現(xiàn),一個(gè)方法的不同控制條件分支所執(zhí)行的代碼可能完全相反,我們只有在運(yùn)行時(shí)才知道會創(chuàng)建哪些對象,這部分的內(nèi)存的分配和回收是動態(tài)的,而我們的 GC 關(guān)注的就是該部分的內(nèi)存。
打個(gè)比方來說:JVM 如果是一輛車,線程獨(dú)占區(qū)的就像是零件,在出廠時(shí)這些零件的壽命基本上都是已知的,線程共享區(qū)就像是汽油,汽油的消耗跟我們所采用的路線有關(guān),所以我們關(guān)注的部分就是這部分會動態(tài)變化的,比如如何開車才能更省油~
以上就是3分鐘了解JAVA中GC的概念的詳細(xì)內(nèi)容,更多請關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!
文章題目:如何理解JAVA中的GC
網(wǎng)頁鏈接:http://fisionsoft.com.cn/article/pjoeei.html