黑马程序员技术交流社区
标题:
对象的生命周期是多长呢?
[打印本页]
作者:
蓦然回首3Y
时间:
2015-7-5 06:54
标题:
对象的生命周期是多长呢?
对象的生命周期是多长呢?
作者:
GiveUp
时间:
2015-7-5 13:38
用完了。会被回收的。
作者:
雏鹰起飞
时间:
2015-7-5 14:11
这个不确定的,当对象不再使用时,会停留在堆内存中等待垃圾回收器的回收。
作者:
Morgan
时间:
2015-7-5 14:13
这个很难说的,因为负责垃圾回收的线程是在不定时的时间内运行。在垃圾回收线程运行的时候如果发现没有任何引用指向这个对象,那么这个对象就成为垃圾,它占用的内存空间就会被回收。
作者:
蓦然回首3Y
时间:
2015-7-5 17:51
谢谢,明白了
作者:
limingdada
时间:
2015-7-5 21:55
不用它了,系统会定时自动回收
作者:
zhuoxiuwu
时间:
2015-7-5 22:08
希望能帮助你理解
1. 创建阶段(Created)
为对象分配存储空间
开始构造对象
从父类到子类对static成员进行初始化
父类成员变量按照顺序初始化,递归调用父类的构造方法
子类成员变量按照顺序初始化,子类构造方法调用
一旦对象被创建,并有某个引用指向它,这个对象的状态就切换到了应用阶段(In Use)
2. 应用阶段(In Use)
对象至少被一个强引用持有并且对象在作用域内
3. 不可见阶段(Invisible)
程序本身不再持有该对象的任何强引用,但是这些引用可能还存在着;
一般具体是指程序的执行已经超过该对象的作用域了
4. 不可达阶段(Unreachable)
该对象不再被任何强引用所持有;
可能仍被JVM等系统下的某些已经装载的惊天变灵或者线程或JNI所持有,这些特殊的强引用被称为GC root,这种情况容易导致内存泄露,无法被回收
5. 收集阶段(Collected)
对象不可达,并且GC已经准备好对该对象占用的内存空间重新分配的时候,处于手机阶段。
如果重写了finazlie()方法,则会去执行该方法。
尽量不要重写finazlie()方法,因为有可能影响JVM的对象分配与回收速度或者可能造成该对象的再次复活
6. 终结阶段
当对象执行完finalize()方法之后,仍然处于不可达状态时,则该对象进入终结阶段。在这个阶段,内存空间等待GC进行回收
7. 对象空间的重新分配
GC对该对象占有的内存空间进行回收或者再分配,该对象彻底消失
作者:
钟志军zzj
时间:
2015-7-5 22:27
好像是堆内存满了对象用完后就自动清理
作者:
wws1214
时间:
2015-7-5 22:30
这个不好说,(个人观点)除了静态对象,其他对象都是用完就回收。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2