⑤. 直接内存(Direct Memory)
- ①. 不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域
- ②. 直接内存是Java堆外的、直接向系统申请的内存区间
- ③. 代码演示:
/** * IO NIO (New IO / Non-Blocking IO) * byte[] / char[] Buffer * Stream Channel * * 查看直接内存的占用与释放 */ public class BufferTest { private static final int BUFFER = 1024 * 1024 * 1024;//1GB public static void main(String[] args){ //直接分配本地内存空间 ByteBuffer byteBuffer = ByteBuffer.allocateDirect(BUFFER); System.out.println("直接内存分配完毕,请求指示!"); Scanner scanner = new Scanner(System.in); scanner.next(); System.out.println("直接内存开始释放!"); byteBuffer = null; System.gc(); scanner.next(); } }
④. 来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存
⑤. 通常,访问直接内存的速度会优于Java堆。即读写性能高
⑥. 直接内存大小可以通过MaxDirectMemorySize设置,如果不指定,默认与堆的最大值一Xmx参数值一致
⑦. 简单理解: java process memory = java heap + native memory