不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域,是堆外内存,直接向操作系统申请。也可能导致OOM异常

技巧💡

堆外内存,直接向操作系统申请内存。

  1. 访问速度比堆快,可用在性能场景,如NIO
  2. JDK1.8后的元数据区,是存储在堆外内存的,方便不受jvm内存的分配大小影响,直接与本地内存相关。

来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存。
通常,访问直接内存的速度会优于Java堆,即读写性能高。
因此出于性能考虑,读写频繁的场合可能会考虑使用直接内存
Java的NIO库允许Java程序使用直接内存,用于数据缓冲区
直接内存大小可以通过MaxDirectMemorySize设置。
如果不指定,默认与堆的最大值-Xmx参数值一致