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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值