假设一个函数如:
InputStream func() {
byte[] buffer = new byte[] {0,1,2,3};
return new ByteArrayInputStream(buffer);
}
如果我调用该函数,垃圾回收器是否有可能删除'buffer'变量而InputStream不再起作用?
答案 0 :(得分:1)
垃圾回收器是否有可能删除“缓冲区” 变量和InputStream不再起作用?
否,不允许垃圾收集器删除仍在引用的对象。从ByteArrayInputStream
对象内部引用该对象(其内部buf
成员引用该对象)。
答案 1 :(得分:0)
如果您将看到ByteArrayInputStream的构造函数,则会看到以下内容
public ByteArrayInputStream(byte buf[]) {
this.buf = buf;
this.pos = 0;
this.count = buf.length;
}
因此,您可以看到对字节数组的引用存储在InputStream对象中:this.buf = buf。并且GC不会收集具有强引用的对象。没什么可担心的。