概述
我们知道JVM中一个对象实例超出作用域或无引用的时候会被垃圾回收,那么他被垃圾回收后,依赖其成员变量的其他实例是否还能正常使用呢?经过测试后发现即使一个实例被垃圾回收,如果他内部的数据被其他对象使用,是不受影响的,下面看这个示例
package test;
public class mytest {
public static void main(String[] args) throws Exception {
HandleBuffer hb = null;
{
Buffer buf = new Buffer();
hb = new HandleBuffer(buf.getBuf());
buf = null;
}
System.out.println("Has Buffer gone away?");
System.in.read();
Runtime.getRuntime().gc();
System.out.println("first gc finished!");
System.in.read();
System.out.println("Has Buffer gone away?");
Thread.currentThread().sleep(1000);
System.out.println(hb);
System.in.read();
}
}
class Buffer{
private byte[] buf = new byte[1024];
public Buffer(){
this.buf = "abc".getBytes();
}
public byte[] getBuf(){
return this.buf;
}
@Override
protected void finalize() throws Throwable {
System.out.println("Buffer gone away!");
}
}
class HandleBuffer{
byte[] buf = null;
public HandleBuffer(byte[] buf){
this.buf = buf;
}
@Override
public String toString() {
return new String(buf);
}
}
下面为程序运行输出:
Has Buffer gone away?
first gc finished!
Has Buffer gone away?
Buffer gone away! //此时对象已被垃圾回收
abc //访问数据正常
最后
以上就是耍酷犀牛为你收集整理的JAVA 对象被垃圾回收后其成员变量可用吗?的全部内容,希望文章能够帮你解决JAVA 对象被垃圾回收后其成员变量可用吗?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复