Note(7):Java 對象在JVM中的生命週期

當應用程序通過new語句創建一個Java對象時,JVM(Java 虛擬機)會爲這個對象分配一塊內存空間,只要這個對象被引用變量引用,它就一直存在與內存中。如果這個對象不被任何引用變量引用,它就結束生命週期,此時JVM的垃圾回收器會在適當時候回收它佔用的內存。

 

       說明代碼如下:

Bus(部分代碼省略)

public class Bus {

       private String busName;

       private Set wheels=new HashSet();

       private String engine;

       ……

 

       Bus(){

             

       }

       Bus(String name){

              this.setBusName(name);

       }

      

       public String getBusName() {

              return busName;

       }

       public void setBusName(String busName) {

              this.busName = busName;

       }

       public void setWheels(Set wheels) {

              this.wheels = wheels;

       }

      

       public Set getWheels() {

              return wheels;

       }

public String getEngine() {

              return engine;

       }

      

       public void setEngine(String engine) {

              this.engine = engine;

       }

 

……

 

}

              它與Wheel類是一對多的關係,所以在Bus類中定義了一個屬性

private Set wheel=new HashSet();

              用來存放於Bus類關聯的Wheel對象

 

Wheel(部分代碼省略)

 

public class Wheel {

       private String wheelName;

……

      

       Wheel(){

             

       }

       Wheel(String name){

             

              this.setWheelName(name);

       }

 

       public String getWheelName() {

              return wheelName;

       }

       public void setWheelName(String wheelName) {

              this.wheelName = wheelName;

       }

       ……

}

 

測試的Main類:

 

public class Main {

 

       public static void main(String[] args) {

              Bus b=new Bus("My bus");

              Wheel w1=new Wheel("No 1");

              Wheel w2=new Wheel("No 2");

             

              b.getWheels().add(w1);

             

              w1=null;       //Mark 1

              w2=null;         //Mark 2

              b=null;           //Mark 3

       }

}

對於以上代碼,w2對象在Mark 2行結束了生命週期,而w1b對象是在Mark 3行結束生命週期。

       分析如下:

1.       如圖7-1,創建1Bus對象和2Wheel對象,並且定義了三個引用變量b,w1,w2分別引用這三個對象。

Bus b=new Bus("My bus");

              Wheel w1=new Wheel("No 1");

        Wheel w2=new Wheel("No 2");

7-1

 

2.       如圖7-2,建立BusWheel對象的關聯後,意味着在Bus對象的wheels集合中存放了w1對象的引用。

b.getWheels().add(w1);

7-2

3.       w1=null;

w1變量置爲null,儘管w1變量不再引用Wheel 1對象,由於Bus對象的wheels集合還存放了Wheel 1對象的引用,因此Wheel 1對象並沒有結束生命週期。

 

4.       w2=null;

w2變量置爲null,由於Wheel 2對象不再被任何引用變量引用,因此該對象結束了生命週期。

 

5.       如圖7-3,當把b變量置爲null時,Bus對象不再被任何引用變量引用,因此結束了自己的生命週期。相應的,Wheel 1對象也不再被任何引用變量引用,也結束了自身的生命週期。

b=null;

7-3

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章