直接内存(Direct Memory)

直接内存不属于运行时数据区的一部分,也不是《Java虚拟机规范》定义的内存区域。

JDK1.4新加入的NIO引入了一种基于通道(Channel)与缓冲区(Buffer)的I/O方式,可以使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆中的DirectByteBuffer对象作为这块内存的引用进行操作。

在一些场景中能显著提高新能,因为这样能避免在Java堆和Native堆中来回复制数据。

这部分内存不受Java堆大小限制,但受物理内存限制,也会出现OutOfMemoryError异常。

直接内存的回收

直接内存不能像新生代、老年代那样,发现空间不足了就主动通知收集器进行垃圾回收,

它只能等待出现Full GC时才能被垃圾收集器顺带回收。