[解密JVM-10] 直接内存

1、前言

  前面学习方法区的时候了解到:JDK8 的元空间使用的是直接内存。那么,直接内存是什么意思呢?它和虚拟机内存有什么区别吗?
  直接内存不是虚拟机运行时数据区的一部分,也不是《Java 虚拟机规范》中定义的内存区域。直接内存是在 Java 堆外的、直接向系统申请的内存区间。
[解密JVM-10] 直接内存

2、直接内存

  一般来说,Java 虚拟机里面有一个运行时数据区,JVM 运行期间产生的信息都是在 JVM 管理的内存里面,但是在一些场景里,会使用到本地的内存,例如元空间。

  我们的 JVM 要从物理磁盘中对文件进行操作,显示通过 JVM 的地址空间,然后经过操作系统的内核地址空间才操作物理磁盘。读写文件需要与磁盘交互,需要由用户态切换到内核态。如下图所示,需要两份内存存储重复数据,效率低。
[解密JVM-10] 直接内存