您好,登錄后才能下訂單哦!
概念
在Java中,對(duì)象的生命周期包括以下幾個(gè)階段:
Java對(duì)象在JVM中的生命周期
當(dāng)你通過(guò)new語(yǔ)句創(chuàng)建一個(gè)java對(duì)象時(shí),JVM就會(huì)為這個(gè)對(duì)象分配一塊內(nèi)存空間,只要這個(gè)對(duì)象被引用變量引用了,那么這個(gè)對(duì)象就會(huì)一直駐留在內(nèi)存中,否則,它就會(huì)結(jié)束生命周期,JVM會(huì)在合適的時(shí)候回收它所占用的內(nèi)存。
偽代碼:
class Teacher: //屬性 String name; Set<Student> students; //有參構(gòu)造函數(shù) Teacher(String tname, Set<Student> students ); //setter,getter省略 class Student: //屬性 String name; Teacher teachrer; //有參構(gòu)造函數(shù) Student(String sname,Teacher teacher); //setter,getter省略 main: Teacher t = new Teacher("張三",new hashSet()); Student s = new Studnet("李四",null); s.getTeacher(t); t.getStudnet().add(s); s = null; t = null;
創(chuàng)建了一個(gè)Teacher對(duì)象和一個(gè)個(gè)Student對(duì)象,并且定義了2個(gè)引用變量t,s,分別引用了Teacher對(duì)象,Student對(duì)象
建立了Teacher對(duì)象和Student對(duì)象的雙向關(guān)聯(lián)關(guān)系,表示Student對(duì)象的teacher屬性引用了Teacher對(duì)象,Teacher對(duì)象的students集合存放了Student對(duì)象的引用。
把s變量置為了null,s變量不再引用Student對(duì)象了,但是Teacher對(duì)象的students仍然存放著Student對(duì)象的引用,那么Student對(duì)象就會(huì)結(jié)束生命周期;把t變量置為null后,Teacher不再被任何引用變量所引用,自然Teacher對(duì)象的引用也不存在了,也就結(jié)束了周期。
雖然最后Teacher和Student之前還存在著雙向引用,但是在程序中并沒(méi)有任何引用變量來(lái)引用這兩個(gè)對(duì)象,程序也就無(wú)法訪問(wèn)到這個(gè)兩個(gè)變量,最終還是被JVM的垃圾回收器當(dāng)作無(wú)用的對(duì)象所回收。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。