1回复
4年前
为什么DirectByteBuffer没有被GC回收?
public class DirectMemoryTest {
public static void main(String[] args) {
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(1024);
Object obj = new Object();
obj = null;
byteBuffer = null;
//Full GC (System.gc()),obj被回收,byteBuffer不会被回收
System.gc();
System.out.println(byteBuffer);
}
}
可以看到full gc日志.Object被回收,DirectByteBuffer却不能被回收.是哪方面原因呢?JNI,虚引用?还是JVM有什么不为人知的处理。
3019 阅读