您的位置:首页 > 编程语言 > Java开发

Java 对象在JVM中的生命周期2

2009-04-10 17:39 597 查看
 当应用程序通过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行结束了生命周期,而w1和b对象是在Mark 3行结束生命周期。
  分析如下:
  1. 如图7-1,创建1个Bus对象和2个Wheel对象,并且定义了三个引用变量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,建立Bus和Wheel对象的关联后,意味着在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息