发布于2026-07-04 阅读(0)
扫一扫,手机访问
先下几个核心判断:Ja va成员变量的生命周期,说白了就是跟所属对象的生命周期绑定的。对象活着,它就活着;对象被垃圾回收了,它也就跟着消亡了。当然,静态成员变量是个例外,它属于类级别,不归对象管。

理解这一点,很多关于变量存亡的困惑就迎刃而解了。
当你用new关键字创建对象时,JVM就会在堆内存中为这个对象(当然包括它内部所有的成员变量)分配空间。基本类型的成员变量会被赋予默认值,比如int就是0,boolean就是false;而引用类型的成员变量,初期都是null。
有几点值得注意:
这一点常常被误解。成员变量本身只是一个引用,或者说一个指针,它保存的是指向堆中某个对象的地址。它并不“拥有”那个对象。被指向的那个对象,有自己的独立生命周期,什么时候被回收,取决于它自身是否还被GC Roots引用着。
举个例子:private List
当对象不再被任何活动线程、静态字段、本地变量等GC Roots引用时,这个对象连同它内部所有的成员变量,就都成了垃圾回收的候选。GC进行清理时,这些成员变量占用的空间会被一并回收。
从实践来看,有几个场景容易触发对象不可达:
这里特别提醒一下,finalize()方法已经废弃了,千万不要依赖它来做资源清理。推荐使用try-with-resources语句或者显式调用close()方法。另外,循环引用问题也不用太担心——两个对象互相持有对方引用,但没有外部强引用时,现代JVM(比如G1、ZGC)完全有能力正确识别并回收它们。
成员变量的生命周期原理听起来简单,但在实际开发中,由于引用关系设计不当,很容易引发内存泄漏或者空指针异常,这才是问题的关键所在。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8