既然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,我们发现内存已经释放了,说明这部分内存还是会被回收。