NOTE

2.51 堆外内存

1. 什么是堆外内存 就是内存不是分配在Java堆上的,而是在操作系统内存上的 2. NIO堆外内存 JDK NIO ByteBuffer.allocate方法分配的内存是在Java堆上面的,当数据需要传输的时候需要把堆上的这块内存数据原封不动的copy到操作系统内存中 而Java NIO Byte

Java创建于 更新于 historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 什么是堆外内存

就是内存不是分配在Java堆上的,而是在操作系统内存上的

2. NIO堆外内存

JDK NIO ByteBuffer.allocate方法分配的内存是在Java堆上面的,当数据需要传输的时候需要把堆上的这块内存数据原封不动的copy到操作系统内存中 而Java NIO ByteBuffer.allocateDirect方法分配的内存是在操作系统内存中的,因此不需要copy

3. Netty堆外内存

Netty分配内存是基于上次分配的大小来决定这次分配多少,他会把16、32、48…496以及512、1024…存到一个数组中,这个数组就是分配一次内存的大小 同时根据当前类路径下是否由Unsafe类决定是否分配堆外内存还是堆内存,如果是堆外内存那么最终调用的就是NIO ByteBuffer.allocateDirect方法,否则就是分配byte数组

4. 参考