我的理解:
原本在方法内声明并创建的对象,它的“有效范围”应该只限于这个方法,方法运行结束,方法内对象的“生命期”也应就结束了,占用的内存理论上就不再属于这些对象。但由于Java通过垃圾回收,自动管理内存中创建的对象,那么在方法内创建的对象,其“生命期”不一定就只限于这个方法,只要它被外部引用,则会在方法结束后继续“存活”(即:Java虚拟机继续保留这块内存给这个对象使用),只到那个引用它的外部因素“死亡”。问题1:我上面的理解正确吗?问题2:如果正确。会不会有以下问题:public clase User{
}public class Test{
public void fun{
User user = new User();
abc.user = user; //abc为一个外部变量
}
}当用“Test tm = new Test();” 创建tm后,这个tm占用的内存什么时候被释放?
是不是整个tm占用的内存,都要等到那个abc失效后才会被释放?
原本在方法内声明并创建的对象,它的“有效范围”应该只限于这个方法,方法运行结束,方法内对象的“生命期”也应就结束了,占用的内存理论上就不再属于这些对象。但由于Java通过垃圾回收,自动管理内存中创建的对象,那么在方法内创建的对象,其“生命期”不一定就只限于这个方法,只要它被外部引用,则会在方法结束后继续“存活”(即:Java虚拟机继续保留这块内存给这个对象使用),只到那个引用它的外部因素“死亡”。问题1:我上面的理解正确吗?问题2:如果正确。会不会有以下问题:public clase User{
}public class Test{
public void fun{
User user = new User();
abc.user = user; //abc为一个外部变量
}
}当用“Test tm = new Test();” 创建tm后,这个tm占用的内存什么时候被释放?
是不是整个tm占用的内存,都要等到那个abc失效后才会被释放?
解决方案 »
- java中md5加密实现原理?
- js和jsp页面不能自动更新,必须重新部署项目(有时重新部署都不能更新),重起服务器才生成效,求解决方法,急急急。。。。。。
- spring+hibernate 使用SQLQuery连接了一个ORACLE数据库,现在用户退出系统,要求断开数据库连接,应该怎么写啊
- 为什么使用struts2的json-plugin 后,hibernate的延迟加载就不灵 了呢
- Hibernate annotation 多对多 双向关联 问题
- 最近,老大说准备接一两个关于portal的项目,望高手指点!
- maven jetty 环境下的Web项目在使用logback slf4j时,slf4j总是绑定java.util.logging
- 磕头求解!! 搞了两天了,我快要死了,帮我一下 神!!!
- 跪求在 J2EE 1.3 中如何配置 Cloudscape 数据库的可视化工具 Cloudview 的方法
- 紧急,救助如何设置xsl里面的变量?
- Hebernate one-to-many 中set 方法读取记录集固定多个记录
- 如何学习J2EE
理解正确2
不是,要分清楚对象,tm是tm对象,没有变量引用它,它就会被回收
而tm的方法fun所创建的对象uere依然有变量引用它,所以它不会被回收给你个例子好好理解一下吧public class Test {
public static void main(String[] args) {
B b = null;
{
A a = new A();
b = a.getB();
} //离开这个花括号,a消亡,a的属性b也不复存在(注意b是变量),但是main的b还是存在
//main的b指向a的b所指向的对象,所以在A的构造方法中new出来的b对象依然没有消亡
//a对象有自己的内存空间,b对象有自己的内存空间
//a的b属性只是一个指针,它指向b对象,即a的b属性的变量本身的内存保存b对象的地址
//所以a消亡只是a的b指针变量不复存在,并不是b对象不存在,只要还有其他变量引用b的话 System.out.println(b);
}
}class A {
B b;
public A() {
b = new B();
} public B getB() {return B;}
}class B {}