性能问答>为什么DirectByteBuffer没有被GC回收?>
1回复

为什么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有什么不为人知的处理。

2579 阅读
请先登录,再评论

因为它用的是直接内存,也就是本地内存,这里用的直接和虚拟机内存无关了。

1年前