Java垃圾回收新算法
Java從誕生以來(lái)以其在網(wǎng)絡(luò )應用開(kāi)發(fā)上獨特的魅力以及“一次開(kāi)發(fā),隨處運行”的可移植性引起了人們極大的興趣。Java與以往的高級語(yǔ)言如C/C++相比,在開(kāi)發(fā)方面具有很大的優(yōu)勢,其中以對象內存管理機制中的垃圾處理機制(GC)最為突出。
本文引用地址:http://dyxdggzs.com/article/150730.htm1 C/C++與Java對象內存管理差別
C/C++將內存劃分成四部分:數據區、代碼區、棧區、堆區。Java則把內存劃分成三部分即代碼區、棧區、堆區,代碼區主要用于存放程序的代碼,棧區主要用于存放局部變量、內部變量等中間性變量,堆區主要用來(lái)存放對象。
C/C++中的對象內存管理是通過(guò)語(yǔ)句new()/delete()或malloc()/free()進(jìn)行申請和釋放的。用new()或malloc()申請內存后,若不使用delete()或free()進(jìn)行釋放,則所申請的內存一直被占用,即使不使用也不能自動(dòng)釋放,必須人為釋放,導致編程工作很繁瑣。
Java中的對象內存管理則改進(jìn)了對內存的釋放過(guò)程,使用new()或其他方法申請的內存在不使用時(shí),可以自動(dòng)進(jìn)行垃圾處理,釋放內存,從而節省內存,使內存的使用更加高效、合理。
Java中可以通過(guò)三種方法來(lái)銷(xiāo)毀對象實(shí)現內存釋放,這三種方法被稱(chēng)為Java銷(xiāo)毀對象的三把利劍:垃圾回收器;finalize方法;利用System.gc方法強制啟動(dòng)垃圾回收器。
垃圾回收是一種動(dòng)態(tài)存儲管理技術(shù),它自動(dòng)地釋放不再被程序引用的對象,按照特定的垃圾收集算法實(shí)現資源自動(dòng)回收的功能系統,會(huì )自動(dòng)進(jìn)行GC策略。
2 GC概述
Java垃圾處理主要是針對堆的管理,對堆中不使用的空間進(jìn)行回收處理。判斷一個(gè)對象的內存空間是否無(wú)用的標準是:如果該對象不能再被程序中任何一個(gè)“活動(dòng)的部分”所引用,此時(shí)該對象的內存空間已經(jīng)無(wú)用。所謂“活動(dòng)的部分”,是指程序中某部分參與程序的調用,正在執行過(guò)程中,尚未執行完畢。
具體以下兩例予以說(shuō)明:
實(shí)例1:
int [][]matrix=new int [2][3];
matrix=null;
此例中,第一句是用new語(yǔ)句在堆中為數組申請了一個(gè)空間,然后用matrix來(lái)引用此空間的對象(這里數組可以理解為對象),此時(shí)這個(gè)內存空間就是有用的。第二句是給matrix賦空值,matrix則不再引用此數組。此時(shí),這個(gè)空間就是無(wú)用的。
實(shí)例2:
int [][] m1=new int[2][3];
int [][] m2=new int[2][3];
m1=m2;
此例中,第一句是用new語(yǔ)句在堆中為數組申請了一個(gè)空間,用m1引用這個(gè)數組。第二句是用new語(yǔ)句在堆中為數組申請了一個(gè)空間,用m2引用這個(gè)數組。第三句是改變引用對象,把m2的引用賦給m1,則此時(shí)m1也引用m2引用的對象數組,因此,m1原來(lái)引用的數組無(wú)人引用,成為垃圾。
評論