前言
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序設(shè)計(jì)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了同江免費(fèi)建站歡迎大家使用!GC(Garbage Collection)是我們?cè)趯W(xué)習(xí) JVM 的過(guò)程中不可避免的一道坎,接下來(lái),我們就來(lái)系統(tǒng)的學(xué)習(xí)一下 GC。
做一件事情之前,我們一定要去知道我們?yōu)槭裁匆プ?,這里不僅僅指 GC,更適用我們?nèi)粘5膶W(xué)習(xí)和生活,知其然,知其所以然,方能百戰(zhàn)不殆。
下面我們先去了解為什么要有 GC,以及 GC 在 JVM 中扮演了一個(gè)什么樣的角色,起到了什么的作用?
為什么要有 GC
用過(guò) C++ 的同學(xué)可能知道,對(duì)象所占的內(nèi)存在程序結(jié)束運(yùn)行之前一直被占用,在明確釋放之前不能分配給其它對(duì)象。如果我們不去手動(dòng)的清除這些無(wú)用的對(duì)象,內(nèi)存很快就被占滿,而在 JVM 中,GC 所起到的作用就是一個(gè)清道夫,它可以幫助我們?nèi)ヅ卸男?duì)象是無(wú)用對(duì)象,怎么進(jìn)行垃圾收集,以及決定內(nèi)存分代和內(nèi)存分配的策略**。
可能有同學(xué)會(huì)問(wèn)了,既然我們的 JVM 會(huì)給我們做 GC 的工作,我們?yōu)槭裁催€要去學(xué)習(xí) GC 呢,一切交給 JVM 不好嗎?當(dāng)然,在我們的日常情況下,我們一般不會(huì)去關(guān)心 GC 的一些細(xì)節(jié),但是當(dāng)我們遇到內(nèi)存泄露,內(nèi)存溢出,高并發(fā)瓶頸的時(shí)候,我們就需要去對(duì) GC 開(kāi)刀,進(jìn)行更為細(xì)致的監(jiān)控和調(diào)節(jié)。
內(nèi)存泄露:指程序中己動(dòng)態(tài)分配的堆內(nèi)存由于某種原因程序未釋放或無(wú)法釋放,造成系統(tǒng)內(nèi)存的浪費(fèi),導(dǎo)致程序運(yùn)行速度減慢甚至系統(tǒng)崩潰等嚴(yán)重后果。
內(nèi)存溢出:應(yīng)用系統(tǒng)中存在無(wú)法回收的內(nèi)存或使用的內(nèi)存過(guò)多,最終使得程序運(yùn)行要用到的內(nèi)存大于能提供的大內(nèi)存。
那么現(xiàn)在問(wèn)題來(lái)了,我們要進(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),也就是說(shuō),當(dāng)我們的類結(jié)構(gòu)固定之后,這部分的內(nèi)存就不會(huì)再發(fā)生更改,且當(dāng)方法或線程結(jié)束的時(shí)候,內(nèi)存自然就跟隨著回收了.
而線程共享區(qū)的堆內(nèi)存和方法區(qū)則不一樣,堆內(nèi)存和方法區(qū)所用的內(nèi)存是在編譯期間無(wú)法確定的,因?yàn)橐粋€(gè)接口的不同實(shí)現(xiàn),一個(gè)方法的不同控制條件分支所執(zhí)行的代碼可能完全相反,我們只有在運(yùn)行時(shí)才知道會(huì)創(chuàng)建哪些對(duì)象,這部分的內(nèi)存的分配和回收是動(dòng)態(tài)的,而我們的 GC 關(guān)注的就是該部分的內(nèi)存。
打個(gè)比方來(lái)說(shuō):JVM 如果是一輛車(chē),線程獨(dú)占區(qū)的就像是零件,在出廠時(shí)這些零件的壽命基本上都是已知的,線程共享區(qū)就像是汽油,汽油的消耗跟我們所采用的路線有關(guān),所以我們關(guān)注的部分就是這部分會(huì)動(dòng)態(tài)變化的,比如如何開(kāi)車(chē)才能更省油~
以上就是3分鐘了解JAVA中GC的概念的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司其它相關(guān)文章!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
文章名稱:如何理解JAVA中的GC-創(chuàng)新互聯(lián)
本文來(lái)源:http://jinyejixie.com/article38/diodpp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、App設(shè)計(jì)、網(wǎng)站排名、網(wǎng)站制作、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容