更新時間:2022-08-15 來源:黑馬程序員 瀏覽量:
在Java中,當一個對象成為垃圾后仍會占用內(nèi)存空間,時間一長,就會導(dǎo)致內(nèi)存空間不足。針對這種情況,Java引入了垃圾回收機制。有了這種機制,程序員不需要過多關(guān)心垃圾對象回收的問題,Java虛擬機會自動回收垃圾對象所占用的內(nèi)存空間。
一個對象在成為垃圾后會暫時保留在內(nèi)存中,當這樣的垃圾堆積到一定程度后,Java虛擬機就會啟動垃圾回收器將這些垃圾對象從內(nèi)存中釋放,從而使程序獲得更多可用的內(nèi)存空間。除了等待Java虛擬機進行自動垃圾回收外,還可以通過調(diào)用System.gc()方法通知Java虛擬機立即進行垃圾回收。當一個對象在內(nèi)存中被釋放時,它的finalize方法會被自動調(diào)用,因此可以在類中通過定義finalize()方法觀察對象何時被釋放。
下面通過一個案例演示Java虛擬機進行垃圾回收的過程,如文件5-13所示。
文件5-13 Example13.java
class Person {
// 下面定義的finalize方法會在垃圾收回前被調(diào)用
public void finalize () {
System.out.println ("對象將被作為垃圾回收...");
}
}
public class Example13{
public static void main (String[] args) {
// 下面創(chuàng)建兩個Person對象
Person p1 = new Person ();
Person p2 = new Person ();
// 下面將變量置為null,讓對象成為垃圾
p1 = null;
p2 = null;
// 調(diào)用方法進行垃圾回收
System.gc ();
for (int i = 0; i < 1000000; i++) {
// 為了延長程序運行時間
}
}
} 文件5-13的運行結(jié)果如圖5-13所示。
果.jpg)
圖5-13 文件5-13的運行結(jié)果
在文件5-13中,第3~5行代碼定義了一個finalize()方法,該方法的返回值必須為void;第10~11行代碼創(chuàng)建了兩個對象p1和p2,然后將兩個對象設(shè)置為null,這意味著新創(chuàng)建的兩個對象成為垃圾;第16行代碼通過“System.gc()”語句通知虛擬機進行垃圾回收。需要注意的是,Java虛擬機的垃圾回收操作是在后臺完成的,程序結(jié)束后,垃圾回收的操作也將終止。因此,文件5-13的第17~19行代碼使用for循環(huán)來延長程序運行的時間,從而能夠更好地看到垃圾對象被回收的過程。
1024首播|39歲程序員逆襲記:不被年齡定義,AI浪潮里再迎春天
2025-10-241024程序員節(jié)丨10年同行,致敬用代碼改變世界的你
2025-10-24【AI設(shè)計】北京143期畢業(yè)僅36天,全員拿下高薪offer!黑馬AI設(shè)計連續(xù)6期100%高薪就業(yè)
2025-09-19【跨境電商運營】深圳跨境電商運營畢業(yè)22個工作日,就業(yè)率91%+,最高薪資達13500元
2025-09-19【AI運維】鄭州運維1期就業(yè)班,畢業(yè)14個工作日,班級93%同學(xué)已拿到Offer, 一線均薪資 1W+
2025-09-19【AI鴻蒙開發(fā)】上海校區(qū)AI鴻蒙開發(fā)4期5期,距離畢業(yè)21天,就業(yè)率91%,平均薪資14046元
2025-09-19