Java的垃圾回收機制實例分析
本文實例講述了Java的垃圾回收機制。分享給大家供大家參考,具體如下:
一 點睛
當程序創(chuàng)建對象、數(shù)組等引用類型實體時,系統(tǒng)都會在堆內(nèi)存中為之分配一塊內(nèi)存區(qū),對象就保存在這塊內(nèi)存區(qū)中,當這塊內(nèi)存不再被任何引用變量引用時,這塊內(nèi)存就變成了垃圾,等待垃圾回收機制進行回收。
垃圾回收機制的特點:
- 垃圾回收機制只負責回收堆內(nèi)存中對象,不會回收任何任何物理資源(例如數(shù)據(jù)庫連接,網(wǎng)絡IO等資源)。
- 程序無法精確控制垃圾回收的運行,垃圾回收會在合適時候進行垃圾回收。當對象永久性地失去引用后,系統(tǒng)就會在合適時候回收它所占的內(nèi)存。
- 垃圾回收機制回收任何對象之前,總會先調(diào)用它的finalize方法,該方法可能使該對象重新復活(讓一個引用變量重新引用該對象),從而導致垃圾回收機制取消回收。
二 對象在內(nèi)存中的狀態(tài)
激活狀態(tài):當一個對象被創(chuàng)建后,有一個以上的引用變量引用它。則這個對象在程序中處于激活狀態(tài),程序可通過引用變量來調(diào)用該對象的屬性和方法。
去活狀態(tài):如果程序中某個對象不再有任何引用變量引用它,它就進入了去活狀態(tài)。在這個狀態(tài)下,系統(tǒng)的垃圾回收機制準備回收該對象所占用的內(nèi)存,在回收該對象之前,系統(tǒng)會調(diào)用所有去活狀態(tài)對象的finalize方法進行資源清理,如果系統(tǒng)在調(diào)用finalize方法重新讓一個引用變量引用該對象,則這個對象會再次變?yōu)榧せ顮顟B(tài);否則該對象將進入死亡狀態(tài)。
死亡狀態(tài):當對象與所有引用變量的關聯(lián)都被切斷,且系統(tǒng)會調(diào)用所有對象的finalize方法依然沒有使該對象變成激活狀態(tài),那這個對象將永久性地失去引用,最后變成死亡狀態(tài)。只有當一個對象處于死亡狀態(tài)時,系統(tǒng)才會真正回收該對象所占有的資源。

三 實戰(zhàn)
1 代碼
public class StatusTranfer
{
public static void test()
{
String a = new String("輕量級Java EE企業(yè)應用實戰(zhàn)"); //執(zhí)行完該代碼后,此處的字符串對象處于可達狀態(tài)
a = new String("瘋狂Java講義"); //執(zhí)行完該代碼,此處的字符串對象處于可達狀態(tài),上處字符串處于可恢復狀態(tài)
}
public static void main(String[] args)
{
test();
}
}
2 說明
一個對象可以被一個方法的局部變量引用,也可以被其他類的類變量引用,或被其他對象的實例變量引用。當某個對象被其他類的類變量引用時,只有該類被銷毀后,該對象才會進入可恢復狀態(tài);當某個對象被其他對象的實例變量引用后,只有當該對象被銷毀后,該對象才會進入可恢復狀態(tài)。
更多java相關內(nèi)容感興趣的讀者可查看本站專題:《Java面向對象程序設計入門與進階教程》、《Java數(shù)據(jù)結構與算法教程》、《Java操作DOM節(jié)點技巧總結》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設計有所幫助。
相關文章
Java中l(wèi)ist集合的clear方法及空字符串的區(qū)別
這篇文章主要介紹了Java中l(wèi)ist集合的clear方法及空字符串的區(qū)別,在使用list?結合的時候習慣了?list=null?;在創(chuàng)建這樣的方式,但是發(fā)現(xiàn)使用list的clear?方法很不錯,尤其是有大量循環(huán)的時候<BR>list.clear()與list?=?null?區(qū)別,需要的朋友可以參考下2023-08-08
Java+Eclipse+Selenium環(huán)境搭建的方法步驟
這篇文章主要介紹了Java+Eclipse+Selenium環(huán)境搭建的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-06-06
JAVA使用POI(XSSFWORKBOOK)讀取EXCEL文件過程解析
這篇文章主要介紹了JAVA使用POI(XSSFWORKBOOK)讀取EXCEL文件過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-08-08
Java經(jīng)典設計模式之模板方法模式定義與用法示例
這篇文章主要介紹了Java經(jīng)典設計模式之模板方法模式,簡單說明了模板方法模式的原理、定義,并結合實例形式分析了java模板方法模式的具體使用方法,需要的朋友可以參考下2017-08-08
JavaScript base64 與 File 之間的互轉(操作方法)
在JavaScript 中,可以使用 Blob 對象將 base64 字符串轉換為 File 對象,這篇文章主要介紹了JavaScript base64 與 File之間的互轉,需要的朋友可以參考下2024-05-05
SpringBoot 異步線程間數(shù)據(jù)傳遞的實現(xiàn)
本文主要介紹了SpringBoot 異步線程間數(shù)據(jù)傳遞的實現(xiàn),包括異步線程的基本概念、數(shù)據(jù)傳遞的方式、具體實現(xiàn)方式等,具有一定的參考價值,感興趣的可以了解一下2024-03-03
Spring-webflux訪問關系型數(shù)據(jù)庫實戰(zhàn)
這篇文章主要為大家介紹了Spring-webflux訪問關系型數(shù)據(jù)庫實戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07
SpringBoot實現(xiàn)devtools實現(xiàn)熱部署過程解析
這篇文章主要介紹了SpringBoot實現(xiàn)devtools實現(xiàn)熱部署過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03

