摘要:把變量置為了,變量不再引用對象了,但是對象的仍然存放著對象的引用,那么對象就會結(jié)束生命周期把變量置為后,不再被任何引用變量所引用,自然對象的引用也不存在了,也就結(jié)束了周期。參考文檔對象的生命周期
概念
在Java中,對象的生命周期包括以下幾個(gè)階段:
創(chuàng)建階段(Created)
應(yīng)用階段(In Use)
不可見階段(Invisible)
不可達(dá)階段(Unreachable)
收集階段(Collected)
終結(jié)階段(Finalized)
對象空間重分配階段(De-allocated)
Java對象在JVM中的生命周期當(dāng)你通過new語句創(chuàng)建一個(gè)java對象時(shí),JVM就會為這個(gè)對象分配一塊內(nèi)存空間,只要這個(gè)對象被引用變量引用了,那么這個(gè)對象就會一直駐留在內(nèi)存中,否則,它就會結(jié)束生命周期,JVM會在合適的時(shí)候回收它所占用的內(nèi)存。
偽代碼:
class Teacher: //屬性 String name; Setstudents; //有參構(gòu)造函數(shù) Teacher(String tname, Set students ); //set,get省略 class Student: //屬性 String name; Teacher teachrer; //有參構(gòu)造函數(shù) Student(String sname,Teacher teacher); //set,get省略 main: Teacher t = new Teacher("張三",new hashSet()); Student s = new Studnet("李四",null); s.getTeacher(); t.setStudnet(s); s = null; t = null;
創(chuàng)建了一個(gè)Teacher對象和一個(gè)個(gè)Student對象,并且定義了2個(gè)引用變量t,s,分別引用了Teacher對象,Student對象
建立了Teacher對象和Student對象的雙向關(guān)聯(lián)關(guān)系,表示Student對象的teacher屬性引用了Teacher對象,Teacher對象的students集合存放了Student對象的引用。
把s變量置為了null,s變量不再引用Student對象了,但是Teacher對象的students仍然存放著Student對象的引用,那么Student對象就會結(jié)束生命周期;把t變量置為null后,Teacher不再被任何引用變量所引用,自然Teacher對象的引用也不存在了,也就結(jié)束了周期。
雖然最后Teacher和Student之前還存在著雙向引用,但是在程序中并沒有任何引用變量來引用這兩個(gè)對象,程序也就無法訪問到這個(gè)兩個(gè)變量,最終還是被JVM的垃圾回收器當(dāng)作無用的對象所回收。
參考文檔:Java對象的生命周期
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/74535.html
摘要:一多個(gè)類的初始化在進(jìn)入正文前首先根據(jù)上面的例子試圖猜測為了類中的函數(shù)能夠運(yùn)行需要做哪些前置工作呢這些工作是以什么順序展開的呢為了更好的描述多個(gè)類的情形可以先試圖描述一個(gè)更簡單的例子把行和行和行注釋掉二類從到一句話把類從介質(zhì)中復(fù)制到方法區(qū)通過 一)Example: 多個(gè)類的初始化 package me; class A { static int a = 1; static...
摘要:內(nèi)存泄漏總結(jié)內(nèi)存管理的目的就是讓我們在開發(fā)中怎么有效的避免我們的應(yīng)用出現(xiàn)內(nèi)存泄漏的問題。在中,內(nèi)存泄漏的范圍更大一些。 Android 內(nèi)存泄漏總結(jié) 內(nèi)存管理的目的就是讓我們在開發(fā)中怎么有效的避免我們的應(yīng)用出現(xiàn)內(nèi)存泄漏的問題。內(nèi)存泄漏大家都不陌生了,簡單粗俗的講,就是該被釋放的對象沒有釋放,一直被某個(gè)或某些實(shí)例所持有卻不再被使用導(dǎo)致 GC 不能回收。最近自己閱讀了大量相關(guān)的文檔資料,打...
摘要:而使用虛擬機(jī)是實(shí)現(xiàn)這一特點(diǎn)的關(guān)鍵。每個(gè)字節(jié)碼指令都由一個(gè)字節(jié)的操作碼和附加的操作數(shù)組成。字節(jié)碼可以通過以下兩種方式轉(zhuǎn)換成合適的語言解釋器一條一條地讀取,解釋并執(zhí)行字節(jié)碼執(zhí)行,所以它可以很快地解釋字節(jié)碼,但是執(zhí)行起來會比較慢。 一、什么是JVM JVM是Java Virtual Machine(Java 虛擬機(jī))的縮寫,JVM是一種用于計(jì)算設(shè)備的規(guī)范,它是一個(gè)虛構(gòu)出來的計(jì)算機(jī),是通過在實(shí)...
摘要:虛擬機(jī)學(xué)習(xí)是一個(gè)虛構(gòu)出來的計(jì)算機(jī)有自己的處理器堆棧寄存器以及相應(yīng)的指令系統(tǒng)等。類裝載器子系統(tǒng)涉及虛擬機(jī)的其它組成部分和來自庫的類。運(yùn)行中的程序的每一個(gè)線程都是一個(gè)獨(dú)立的虛擬機(jī)執(zhí)行引擎的實(shí)例。 Java虛擬機(jī)學(xué)習(xí) JVM JVM是一個(gè)虛構(gòu)出來的計(jì)算機(jī),有自己的處理器,堆棧,寄存器以及相應(yīng)的指令系統(tǒng)等。JVM是JRE的一部分,通過在實(shí)際的計(jì)算機(jī)上仿真模擬各種計(jì)算機(jī)功能,這樣就能使Java在...
閱讀 3456·2021-09-08 10:46
閱讀 1186·2019-08-30 13:17
閱讀 2362·2019-08-30 13:05
閱讀 1207·2019-08-29 15:29
閱讀 2887·2019-08-29 11:31
閱讀 539·2019-08-26 12:13
閱讀 1535·2019-08-26 11:42
閱讀 1830·2019-08-23 18:37