直接内存(Direct Memory)
直接内存不属于运行时数据区的一部分,也不是《Java
虚拟机规范》定义的内存区域。
在JDK1.4
新加入的NIO
引入了一种基于通道(Channel
)与缓冲区(Buffer
)的I/O
方式,可以使用Native
函数库直接分配堆外内存,然后通过一个存储在Java
堆中的DirectByteBuffer
对象作为这块内存的引用进行操作。
在一些场景中能显著提高新能,因为这样能避免在Java
堆和Native
堆中来回复制数据。
这部分内存不受Java
堆大小限制,但受物理内存限制,也会出现OutOfMemoryError
异常。
直接内存的回收
直接内存不能像新生代、老年代那样,发现空间不足了就主动通知收集器进行垃圾回收,
它只能等待出现Full GC
时才能被垃圾收集器顺带回收。