我是靠谱客的博主 耍酷犀牛,最近开发中收集的这篇文章主要介绍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 对象被垃圾回收后其成员变量可用吗?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部