1. 首先了解堆内内存on-heap memory
2. 定义:off-heap memory
堆外内存就是把内存对象分配在Java虚拟机的堆以外的内存。这些内存直接受操作系统管理(而不是虚拟机),
这样做的结果就是能够在一定程度上减少垃圾回收对应用程序造成的影响。
3. 特点
1、减少了垃圾回收
因为垃圾回收会暂停其他的工作。
2、加快了复制的速度
堆内在flush到远程时,会先复制到直接内存(非堆内存),然后在发送;
而堆外内存相当于省略掉了这个工作。
4. 堆外内存的管理:DirectByteBuffer
DirectByteBuffer类是在Java Heap外分配内存,对堆外内存的申请主要是通过成员变量unsafe来操作;
ByteBuffer bb = ByteBuffer.allocateDirect(1024*1024*128);
5. 其他
System.gc使用-XX:+DisableExplicitGC可以禁掉;
通过-XX:+ExplicitGCInvokesConcurrent也可以做并行gc;
最常见的场景是RMI/NIO下的堆外内存分配等;