当Java虚拟机启动时,会从底层操作系统取得一块内存,并以此区段来执行Java程序。
对象的生存空间堆heap存放所有的对象,方法调用及变量的生存空间stack存放方法调用和局部变量
public class TestLifeOne{
public void read(){
int s = 42; //s的范围只限与read()里面,别处无法使用
sleep();
}
public void sleep(){
s = 7; //sleep()无法存取s变量,因为它不在sleep()的堆栈快中
}
}
对象只要有引用,如果某个对象的引用已经不在它的范围中,但此引用还在,则此对象就会继续保留在堆上。如果对对象的唯一引用消失时,对象就会从堆中释放,引用变量会跟堆栈快一起解散。
有3种方法可以释放对象的引用:
引用永久性的离开它的范围:
void go(){
Life z = new Life(); //z会在方法结束时消失
}
引用被赋值到其他的对象上:
Life z = new Life();
z = new Life(); //第一个对象会在z被赋值到别处是消失
直接将引用设定为null:
Life z = new Life();
z = null;
|