NIO ByteBuffer

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/M_Joes_17/article/details/82118685

ByteBuffer有三种实现方式:

  • 堆内存储数据的 HeapByteBuffer;

       HeapByteBuffer 是将数据保存在 JVM 堆内存中

  • 堆外存储数据的 DirectByteBuffer;

       DirectByteBuffer 就是采用堆外内存来存放数据的,因此在访问性能提升的同时带来了复杂的动态内存管理问题。而动态内存管理是一项高端编程技术,涵盖了内存分配性能、内存回收、内存碎片化、内存利用率等一系列复杂问题。

  • 文件映射(数据存储到文件中)的 MappedByteBuffer。

       MappedByteBuffer说得通俗一点就是 Map 把一个磁盘文件(整体或部分内容)映射到计算机虚拟内存的一块区域,这样就可以直接操作内存当中的数据,而无须每次都通过 I/O 从物理硬盘上读取文件,所以在效率上有很大提升。

       MappedByteBuffer的原理和价值,需要掌握一点操作系统内存、文件系统、内存页与内存交换的基本知识。如下图所示,每个进程有一个虚拟地址空间,也被称为逻辑内存地址。当一个程序尝试使用虚拟地址访问内存时,操作系统连同硬件会将该分页的虚拟地址映射到某个具体的物理位置,这个位置可以是物理 RAM、页面文件(Page file 是Windows 的说法,对应 Linux 下的 swap)或文件系统中的一个普通文件。尽管每个进程都有其自己的地址空间,但程序通常无法使用所有这些空间,因为地址空间被划分为内核空间和用户空间。大部分操作系统将每个进程地址空间的一部分映射到一个通用的内核内存区域。被映射来供内核使用的地址空间部分被称为内核空间,其余部分被称为用户空间,可供用户应用程序使用。

猜你喜欢

转载自blog.csdn.net/M_Joes_17/article/details/82118685