java成员变量垃圾回收_JAVA 对象被垃圾回收后其成员变量可用吗? | 学步园
我們知道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 对象被垃圾回收后其成员变量可用吗? | 学步园的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: yum java 1.7_centos通
- 下一篇: 工信部:1~10 月智能手机产量同比下降