天天看點

jvm中對象建立與記憶體配置設定機制_Java對象在JVM中的生命周期

jvm中對象建立與記憶體配置設定機制_Java對象在JVM中的生命周期

概念

在Java中,對象的生命周期包括以下幾個階段:

  1. 建立階段(Created)
  2. 應用階段(In Use)
  3. 不可見階段(Invisible)
  4. 不可達階段(Unreachable)
  5. 收集階段(Collected)
  6. 終結階段(Finalized)
  7. 對象空間重配置設定階段(De-allocated)
jvm中對象建立與記憶體配置設定機制_Java對象在JVM中的生命周期

Java對象在JVM中的生命周期

當你通過new語句建立一個java對象時,JVM就會為這個對象配置設定一塊記憶體空間,隻要這個對象被引用變量引用了,那麼這個對象就會一直駐留在記憶體中,否則,它就會結束生命周期,JVM會在合适的時候回收它所占用的記憶體。

僞代碼:

class Teacher:    //屬性    String   name;    Set students;     //有參構造函數    Teacher(String tname,  Set students );     //setter,getter省略 class Student:    //屬性    String name;    Teacher teachrer;     //有參構造函數    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;
           
  • 建立了一個Teacher對象和一個個Student對象,并且定義了2個引用變量t,s,分别引用了Teacher對象,Student對象
jvm中對象建立與記憶體配置設定機制_Java對象在JVM中的生命周期
  • 建立了Teacher對象和Student對象的雙向關聯關系,表示Student對象的teacher屬性引用了Teacher對象,Teacher對象的students集合存放了Student對象的引用。
jvm中對象建立與記憶體配置設定機制_Java對象在JVM中的生命周期
  • 把s變量置為了null,s變量不再引用Student對象了,但是Teacher對象的students仍然存放着Student對象的引用,那麼Student對象就會結束生命周期;把t變量置為null後,Teacher不再被任何引用變量所引用,自然Teacher對象的引用也不存在了,也就結束了周期。
jvm中對象建立與記憶體配置設定機制_Java對象在JVM中的生命周期

雖然最後Teacher和Student之前還存在着雙向引用,但是在程式中并沒有任何引用變量來引用這兩個對象,程式也就無法通路到這個兩個變量,最終還是被JVM的垃圾回收器當作無用的對象所回收。

參考文檔: Java對象的生命周期