Object obj = new Object();
obj被存放在栈中,new Object();被存放在堆中,obj是new Object();的引用变量,对不对?
网上说在没有引用变量指向对象或数组之后,堆才会释放内存,什么情况才是没有引用变量指向对象或数组?
谢谢解答……
obj被存放在栈中,new Object();被存放在堆中,obj是new Object();的引用变量,对不对?
网上说在没有引用变量指向对象或数组之后,堆才会释放内存,什么情况才是没有引用变量指向对象或数组?
谢谢解答……
解决方案 »
- org.springframework.beans.factory.BeanCreationException
- 小弟面试过的几家公司,面试回忆录。求解答。
- hibernate 测试时候的空指针 在线等
- dwr验证失败
- 关于spring中的aop问题
- struts2 URL中文参数
- ssh框架中为什么用不了lookupdiapathaction?
- 学习Spring的小小心得(重新整理版)
- spring注解管理两个接口吗
- 为什么用sqlserverjdbc读取text字段值到1596个字符后,后面变乱码了?
- 高分在线求教如何用JPA实现一棵树的增删查改
- SSH集成getHibernateTemplate查询时报空指针异常。
Object obj1 = new Object();
Object obj2 = obj1;
Object obj3 = obj2;其他引用等;当obj1、obj2、obj3生命周期结束了;
obj1 = null;
obj2 = null;
obj3 = null;等等栈中所有的变量这里是obj1、obj2、obj3,都没有堆中对象地址的引用,即new Object()的地址引用。
什么时候obj1、obj2、obj3生命周期才会结束
1、可触及状态;2、可复活状态;3、不可触及状态;
当一个对象处于不可触及的状态时,垃圾回收器(GC)才会真正回收它占用的内存
// 可触及状态
Object obj = new Object();
// 对象不再被引用,可复活状态
// 在这个状态下,GC会准备释放它占用的内存,在释放之前,会调用它及其他处于可复活状态的对象的
// finalize()方法,这些finalize()方法有可能使对象重新转到可触及状态
obj = null;
// 当Java VM 执行完所有可复活对象的finalize()方法后,假如这些方法都没有使对象转到可触及状态,那么对象就进入不可触及状态。这是GC才会真正回收它占用的空间
可以认为,当obj被赋予另外的值的时候,原指向new Object()的引用变量消失。
垃圾回收器在检查的时候就会清缓存!???不知道这么理解对不对