摘要:把变量置为了,变量不再引用对象了,但是对象的仍然存放着对象的引用,那么对象就会结束生命周期把变量置为后,不再被任何引用变量所引用,自然对象的引用也不存在了,也就结束了周期。参考文档对象的生命周期
概念
在Java中,对象的生命周期包括以下几个阶段:
创建阶段(Created)
应用阶段(In Use)
不可见阶段(Invisible)
不可达阶段(Unreachable)
收集阶段(Collected)
终结阶段(Finalized)
对象空间重分配阶段(De-allocated)
Java对象在JVM中的生命周期当你通过new语句创建一个java对象时,JVM就会为这个对象分配一块内存空间,只要这个对象被引用变量引用了,那么这个对象就会一直驻留在内存中,否则,它就会结束生命周期,JVM会在合适的时候回收它所占用的内存。
伪代码:
class Teacher: //属性 String name; Setstudents; //有参构造函数 Teacher(String tname, Set students ); //set,get省略 class Student: //属性 String name; Teacher teachrer; //有参构造函数 Student(String sname,Teacher teacher); //set,get省略 main: Teacher t = new Teacher("张三",new hashSet()); Student s = new Studnet("李四",null); s.getTeacher(); t.setStudnet(s); s = null; t = null;
创建了一个Teacher对象和一个个Student对象,并且定义了2个引用变量t,s,分别引用了Teacher对象,Student对象
建立了Teacher对象和Student对象的双向关联关系,表示Student对象的teacher属性引用了Teacher对象,Teacher对象的students集合存放了Student对象的引用。
把s变量置为了null,s变量不再引用Student对象了,但是Teacher对象的students仍然存放着Student对象的引用,那么Student对象就会结束生命周期;把t变量置为null后,Teacher不再被任何引用变量所引用,自然Teacher对象的引用也不存在了,也就结束了周期。
虽然最后Teacher和Student之前还存在着双向引用,但是在程序中并没有任何引用变量来引用这两个对象,程序也就无法访问到这个两个变量,最终还是被JVM的垃圾回收器当作无用的对象所回收。
参考文档:Java对象的生命周期
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/74535.html
摘要:一多个类的初始化在进入正文前首先根据上面的例子试图猜测为了类中的函数能够运行需要做哪些前置工作呢这些工作是以什么顺序展开的呢为了更好的描述多个类的情形可以先试图描述一个更简单的例子把行和行和行注释掉二类从到一句话把类从介质中复制到方法区通过 一)Example: 多个类的初始化 package me; class A { static int a = 1; static...
摘要:内存泄漏总结内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。在中,内存泄漏的范围更大一些。 Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,就是该被释放的对象没有释放,一直被某个或某些实例所持有却不再被使用导致 GC 不能回收。最近自己阅读了大量相关的文档资料,打...
阅读 3409·2021-09-08 10:46
阅读 1164·2019-08-30 13:17
阅读 2332·2019-08-30 13:05
阅读 1175·2019-08-29 15:29
阅读 2866·2019-08-29 11:31
阅读 517·2019-08-26 12:13
阅读 1509·2019-08-26 11:42
阅读 1783·2019-08-23 18:37