JAVA垃圾回收機(jī)制

生活中,我們隨處可見(jiàn)的就是垃圾回收站回收垃圾來(lái)重新利用,避免環(huán)境污染,而且會(huì)讓通過(guò)重新再利用這些垃圾,能夠節(jié)省能源和資源。

編程是源于生活。在java中,垃圾是會(huì)產(chǎn)生的,當(dāng)然也會(huì)被jvm自動(dòng)回收再利用。當(dāng)沒(méi)有對(duì)象引用指向原先分配給某個(gè)對(duì)象的內(nèi)存,該內(nèi)存便成為了垃圾,那么jvm會(huì)用一個(gè)系統(tǒng)級(jí)線程來(lái)釋放這些內(nèi)存,從而讓這塊內(nèi)存空間能夠被后來(lái)的新對(duì)象使用。另外垃圾回收也可以清除內(nèi)存記錄碎片。由于創(chuàng)建對(duì)象和垃圾回收器釋放丟棄對(duì)象所占的內(nèi)存空間,內(nèi)存會(huì)出現(xiàn)碎片。碎片是分配給對(duì)象的內(nèi)存塊之間的空閑內(nèi)存洞。碎片整理將所占用的堆內(nèi)存移到堆的一端,JVM將整理出的內(nèi)存分配給新的對(duì)象。

java中垃圾回收機(jī)制有好有壞。

垃圾回收能自動(dòng)釋放內(nèi)存空間,減輕編程的負(fù)擔(dān)。這使Java 虛擬機(jī)具有一些優(yōu)點(diǎn)。首先,它能使編程效率提高。在沒(méi)有垃圾回收機(jī)制的時(shí)候,可能要花許多時(shí)間來(lái)解決一個(gè)難懂的存儲(chǔ)器問(wèn)題。在用Java語(yǔ)言編程的時(shí)候,靠垃圾回收機(jī)制可大大縮短時(shí)間。其次是它保護(hù)程序的完整性,垃圾回收是Java語(yǔ)言安全性策略的一個(gè)重要部份。

垃圾回收的一個(gè)潛在的缺點(diǎn)是它的開銷影響程序性能。Java虛擬機(jī)必須追蹤運(yùn)行程序中有用的對(duì)象,而且最終釋放沒(méi)用的對(duì)象。這一個(gè)過(guò)程需要花費(fèi)處理器的時(shí)間。其次垃圾回收算法的不完備性,早先采用的某些垃圾回收算法就不能保證100%收集到所有的廢棄內(nèi)存。當(dāng)然隨著垃圾回收算法的不斷改進(jìn)以及軟硬件運(yùn)行效率的不斷提升,這些問(wèn)題都可以迎刃而解。

在編程的時(shí)候,可能會(huì)手動(dòng)調(diào)用gc方法來(lái)呼喚垃圾回收機(jī)制來(lái)處理垃圾等操作,之所以叫呼喚是因?yàn)?/SPAN>java的垃圾回收機(jī)制是以不定時(shí)的方式來(lái)收集垃圾的,當(dāng)調(diào)用gc的時(shí)候雖然不能后讓垃圾回收機(jī)制立即來(lái)回收垃圾等操作,但是它能夠讓垃圾回收操作容易發(fā)生,或提早發(fā)生。

在垃圾回收機(jī)制中,還有一個(gè)方法叫finalize方法是需要了解的。在jvm垃圾回收器收集一個(gè)對(duì)象之前,一般要求程序調(diào)用適當(dāng)?shù)姆椒ㄡ尫刨Y源,但在沒(méi)有明確釋放資源的情況下,Java提供了缺省機(jī)制來(lái)終止該對(duì)象心釋放資源,這個(gè)方法就是finalize。

其實(shí)對(duì)于java垃圾回收機(jī)制了解到這個(gè)程度就夠用了,因?yàn)樵诤芏鄷r(shí)候,java的垃圾回收機(jī)制其實(shí)是不用編程人員來(lái)操心的,也許在某一天你需要操心來(lái)處理java的垃圾回收機(jī)制的時(shí)候,那時(shí)候你需要認(rèn)真研究一下jdk源代碼了或者找一些更加深入剖析java的書籍來(lái)幫助你。

北大青鳥網(wǎng)上報(bào)名
北大青鳥招生簡(jiǎn)章