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");
![](http://p.blog.csdn.net/images/p_blog_csdn_net/JustForFly/7-1.bmp)
7-1
2. 如图7-2,建立Bus和Wheel对象的关联后,意味着在Bus对象的wheels集合中存放了w1对象的引用。
b.getWheels().add(w1);
![](http://p.blog.csdn.net/images/p_blog_csdn_net/JustForFly/7-2.bmp)
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;
![](http://p.blog.csdn.net/images/p_blog_csdn_net/JustForFly/7-3.bmp)
7-3
虚拟机)会为这个对象分配一块内存空间,只要这个对象被引用变量引用,它就一直存在与内存中。如果这个对象不被任何引用变量引用,它就结束生命周期,此时
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");
![](http://p.blog.csdn.net/images/p_blog_csdn_net/JustForFly/7-1.bmp)
7-1
2. 如图7-2,建立Bus和Wheel对象的关联后,意味着在Bus对象的wheels集合中存放了w1对象的引用。
b.getWheels().add(w1);
![](http://p.blog.csdn.net/images/p_blog_csdn_net/JustForFly/7-2.bmp)
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;
![](http://p.blog.csdn.net/images/p_blog_csdn_net/JustForFly/7-3.bmp)
7-3
相关文章推荐
- Java对象在JVM中的生命周期(实例)
- JAVA:创建一个与jvm有同样生命周期的对象
- 精通Hibernate——Java对象在JVM中的生命周期
- Note(7):Java 对象在JVM中的生命周期
- JVM——java对象生命周期(引用类型 创建对象规则)(网摘)
- JVM——java对象生命周期(引用类型 创建对象规则)
- 【JVM系列】Java对象的生命周期与类型的卸载
- Java对象在JVM中的生命周期
- Note(7):Java 对象在JVM中的生命周期
- 【JAVA优化编程】内存管理之——(2)JVM中对象的生命周期
- Java对象在JVM中的生命周期
- JVM中java对象的生命周期
- Java对象创建方式及JVM对字符串处理
- Thinking in java-10 对象创建和生命周期
- java 对象生命周期
- [置顶] JVM中Java对象的创建
- 【Java】深入理解JVM学习笔记(二) —— 对象
- java 对象占用内存查看 以及JVM级别 方法修改等
- Java 对象的生命周期
- Java 对象的生命周期