在解釋“對象的生命周期”前,先來看下面這個例子:
有一個停車場共50個停車位,假如這個停車場是通過人工來管理停車位的使用情況,管理員有一個計數器,用來計錄當前空閑的停車位有多少個,每當有新的停車位被使用了計數器就減1,而有新的停車位空閑了計數器就加1。
我們可以把這些停車位理解為【資源空間】,可支配的最大資源數為50(即停車位數量),記錄資源使用情況的管理員可理解為資源的觀察者(每當資源發生變化就對停車位進行計數)。
那么會存在有這樣的場景,50個停車位都被使用了,如果有新來的車,那么就不允許進入停車場。這種場景可以理解為資源不足。
而計算機中的【內存】也跟【停車場】差不多,我們通常說的內存有4G、8G、16G等,那么該內存最多能夠存儲的數據量就是4G、8G、16G等,如果當前內存使用情況已達到瓶頸的話,運行的程序就會出現故障。
當內存使用達到瓶頸時,運行的程序為什么會出現故障?
因為計算機在運行一個程序的時候,會把要用到的數據先寫入內存空間。當內存不足時,程序就無法繼續對數據在內存上進行操作,此時就會導致程序故障。更具體的一些知識點,朋友們可以去查閱相關資料:程序是如何被計算機所執行的,本文不做討論研究,因為這個問題本身就有很多可討論的知識點。
上面解釋到,計算機在運行一個程序的時候,會把要用到的數據先寫入內存空間。這就相當於某些停車位被使用了(即資源空間被使用),而在內存中的表現就是占用了一塊內存空間。但是內存的空間大小是有限的,那么在程序中什么時候會占用內存空間?並且有沒有類似停車位的管理員一樣的角色,來觀察程序的相關使用情況呢?
先思考下程序中類的概念,雖然我們可以用“類”將生活中的各種事物進行抽象化來在程序中進行描述。但是“類”不能代表一個具體的東西,而這個具體的東西是以“對象”來表達,那么我們要想在程序中得到這個具體的“對象”則是需要【創建類的實例】來獲取,這也就認證了前面文章所說的“類的具體實例就叫做對象”。那么這個“創建類的實例”也就是一個具體的【對象】誕生了,此時會在內存中占用一塊空間。當這個具體的【對象】不再被使用后(相當於車離開了停車場,不需要使用停車位了),那么在程序中會有一個叫GC(垃圾回收機制)的東西來負責管理對象使用情況,類似停車場的管理員,職責就是:觀察不再被使用的具體【對象】有哪些,然后將其銷毀,騰出內存空間。GC(垃圾回收機制)管理對象的使用情況的詳細說明本文暫不作討論。
那么現在回到“生命周期”這個詞,對於人來說就是從出生到死亡的一個過程。
所以在程序中,一個“對象的生命周期”就是指:對象的創建到使用結束后被銷毀的一個過程。