既然DirectMemory不受jvm管理,那么这部分内存是不是不会回收呢,这次来探索这个话题。
当然还是来一段代码:
public class Jvm1_26 {
static int _2G=1020*1024*1024*2;
public static void main(String[] args) throws IOException {
ByteBuffer byteBuffer=ByteBuffer.allocateDirect(_2G);
System.out.println("内存分配完成");
System.in.read();
byteBuffer=null;
System.gc();
System.out.println("内存释放");
System.in.read();
}
}
System.in.read();//是为了阻止程序往下运行,方便我们查看内存变化。
我们运行程序,观察系统内存变化,第一次情况如下:
再往下执行
进程号都是3797,我们发现内存已经释放了,说明这部分内存还是会被回收。