Java對(duì)象在JVM中的生命周期詳解
概念
在Java中,對(duì)象的生命周期包括以下幾個(gè)階段:
- 創(chuàng)建階段(Created)
- 應(yīng)用階段(In Use)
- 不可見階段(Invisible)
- 不可達(dá)階段(Unreachable)
- 收集階段(Collected)
- 終結(jié)階段(Finalized)
- 對(duì)象空間重分配階段(De-allocated)

Java對(duì)象在JVM中的生命周期
當(dāng)你通過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之前還存在著雙向引用,但是在程序中并沒有任何引用變量來引用這兩個(gè)對(duì)象,程序也就無法訪問到這個(gè)兩個(gè)變量,最終還是被JVM的垃圾回收器當(dāng)作無用的對(duì)象所回收。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringMVC MethodArgumentResolver的作用與實(shí)現(xiàn)
這篇文章主要介紹了SpringMVC MethodArgumentResolver的作用與實(shí)現(xiàn),MethodArgumentResolver采用一種策略模式,在Handler的方法被調(diào)用前,Spring MVC會(huì)自動(dòng)將HTTP請(qǐng)求中的參數(shù)轉(zhuǎn)換成方法參數(shù)2023-04-04
java判斷String類型是否能轉(zhuǎn)換為int的方法
今天小編就為大家分享一篇java判斷String類型是否能轉(zhuǎn)換為int的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07
解決JDK異常處理No appropriate protocol問題
這篇文章主要介紹了解決JDK異常處理No appropriate protocol問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
使用SpringBoot設(shè)置虛擬路徑映射絕對(duì)路徑
這篇文章主要介紹了使用SpringBoot設(shè)置虛擬路徑映射絕對(duì)路徑的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
logback-spring.xml的內(nèi)容格式詳解
這篇文章主要介紹了logback-spring.xml的內(nèi)容格式詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的的朋友參考下吧2023-11-11
IDEA使用Tomcat運(yùn)行web項(xiàng)目教程分享
在非Spring Boot項(xiàng)目中運(yùn)行Nacos示例,需要手動(dòng)配置Tomcat容器,本文介紹了如何在IDEA中配置Tomcat,并詳細(xì)解決了配置過程中可能遇到的異常情況,步驟包括修改IDEA項(xiàng)目結(jié)構(gòu)、添加Web模塊、配置Artifacts和Tomcat Server2024-10-10
Springboot詳解線程池與多線程及阻塞隊(duì)列的應(yīng)用詳解
本例應(yīng)用線程池、多線程、阻塞隊(duì)列處理一個(gè)流程任務(wù)。本例處理一個(gè)訂單流程,主要包括生成訂單、訂單處理、訂單入庫(kù),下面我們一起看看2022-06-06

