`

直接缓冲区

 
阅读更多

原创转载请注明出处:http://agilestyle.iteye.com/blog/2360210

 

直接缓冲区( ByteBuffer.allocateDirect() )

(1)通道只接收  ByteBuffer 作为参数

(2) 操作系统的在内存区域中进行 I/O 操作。就操作系统方面而言, 这些内存区域是相连的字节序列 。于是, 只有字节缓冲区有资格参与I/O 操作 。操作系统会直接存取 JVM 进程的内存空间,以传输数据。这意味着 I/O 操作的目标内存区域必须是连续的字节序列。 在 JVM 中,字节数组可能不会在内存中连续存储 ,或者无用存储单元收集可能随时对其进行移动。在 Java 中, 数组是对象,而数据存储在对象中的方式在不同的JVM 实现中都各有不同。

引入了直接缓冲区的概念。 直接缓冲区被用于与通道和固有 I/O 例程交互。

(3)直接缓冲区是I/O 的最佳选择,但可能比创建非直接缓冲区要花费更高的成本。直接缓冲区使用的内存是通过调用本地操作系统方面的代码分配的,绕过了标准 JVM 堆栈。 建立和销毁直接缓冲区会明显比具有堆栈的缓冲区更加破费, 这取决于主操作系统以及 JVM 实现。 直接缓冲区的内存区域不受无用存储单元收集支配,因为它们位于标准JVM堆栈之外。

 

直接缓冲区是通过调用具有所需容量的  ByteBuffer.allocateDirect() 函数产生的, 注意用一个 wrap()函数所创建的被包装的缓冲区总是非直接的。

 

Reference

http://www.tuicool.com/articles/mINJve

分享到:
评论

相关推荐

    Java中的缓冲区(直接缓冲区、非直接缓冲区等).docx

    - **非直接缓冲区**:这类缓冲区通常位于JVM堆内,数据需要先从物理内存复制到JVM堆中的缓冲区,然后再进行处理,因此性能略低于直接缓冲区。非直接缓冲区通过`ByteBuffer.allocate(size)`创建。 #### 三、缓冲区的...

    缓冲区算法代码

    2. **缓冲区类型**:如直接缓冲区(Direct Buffer)与非直接缓冲区(Heap Buffer),它们在Java中是如何实现的,以及各自的优缺点。 3. **缓冲区管理**:如何创建、使用和释放缓冲区,以及在多线程环境下的同步问题...

    线缓冲区生成算法

    导入Eclipse后,你可以直接运行这个工程,观察线缓冲区生成算法的实际效果。通过阅读和理解代码,开发者可以学习到如何在实际项目中应用线缓冲区生成算法,提高图形渲染性能。 总的来说,线缓冲区生成算法是图形...

    C#缓冲区分析代码

    例如,FileStream类使用内部缓冲区,Write和Read方法实际上会与缓冲区交互,而不是直接与磁盘交互。了解这些机制可以帮助我们优化I/O操作。 5. **缓冲区大小的选择**: 缓冲区的大小对性能有很大影响。太小可能会...

    Cesium 绘制缓冲区 点 线 面缓冲区

    本主题将深入探讨如何使用Cesium绘制点、线和面的缓冲区,这在构建复杂的三维地理信息系统(GIS)应用时尤其有用。通过理解和运用这些技术,开发者能够高效地展示大量数据并提升用户体验。 首先,让我们理解“缓冲...

    Java NIO(通道+缓冲区+选择器)

    3. **直接缓冲区(DirectByteBuffer)**:直接缓冲区不经过Java堆,直接在操作系统层面分配内存,减少了数据复制,提高性能。但并非所有场景都适用,因为它可能会增加内存碎片。 **选择器(Selector)**: 1. **...

    缓冲区的个人理解

    行缓冲会在用户按下回车键时将缓冲区中的数据写入目的地,而无缓冲则是数据直接写入,不经过缓冲区。行缓冲通常适用于文本编辑器等需要实时响应的场景。 在C语言中,我们可以使用`setbuf`和`setvbuf`两个函数来自...

    缓冲区查询代码

    当需要读取或写入数据时,首先查找缓冲区,如果数据已存在于缓冲区,则直接处理;否则,从底层存储设备读取或写入,并将结果存入缓冲区。 2. **缓冲区管理**: - **缓存替换策略**:由于内存资源有限,当缓冲区满...

    java生成线缓冲区的代码

    在GIS(地理信息系统)领域,线缓冲区是一种重要的空间分析工具,它用于创建线对象周围的一个区域,这个区域根据预定义的距离参数确定。在Java编程环境下,我们可以利用特定的库来实现这一功能。本篇文章将深入探讨...

    C语言清空输入缓冲区在标准输入(stdin)情况下的使用

    在程序1中,我们可以看到,输入一个数字,然后输入一个字符,但是直接输出了“hello bit”,这是因为在点击回车(‘\n’)时,相当于输入了一个字符,那么我们需要进行清空缓冲区处理。在程序2中,我们使用了fflush...

    GIS原型系统的缓冲区分析算法讲解 可以直接拷贝运行

    值得注意的是,代码中使用了多边形来近似圆形的缓冲区,这是因为计算机图形学中通常无法直接绘制完美的圆形,而是通过足够多的顶点来逼近圆形。随着NumbPerCircle的增加,多边形将更加接近圆形,但计算量也会随之...

    多道程序缓冲区协同操作

    本项目“多道程序缓冲区协同操作”是燕山大学操作系统课程设计的一个实例,旨在让学生深入理解如何在多道程序环境下管理共享资源,特别是缓冲区的高效协作。 在多道程序系统中,缓冲区是一种常见的数据结构,用于...

    环形缓冲区实现原理

    在 CAN 通信卡设备驱动程序中,为了增强 CAN 通信卡的通信能力、提高通信效率,使用两级缓冲区结构,即直接面向 CAN 通信卡的收发缓冲区和直接面向系统调用的接收帧缓冲区。通讯中的收发缓冲区一般采用环形队列(或...

    利用缓冲区提高Java应用程序的IO性能

    - **未使用缓冲区的Java实现**:直接使用Java的基本流类,如`FileInputStream`和`FileOutputStream`。 - **手动缓冲的Java实现**:开发者自定义缓冲逻辑。 - **使用Java自带缓冲类的实现**:采用`BufferedReader`和`...

    c# AE gp 缓冲区

    在C#编程中,"AE gp 缓冲区"可能是指Adobe After Effects(AE)图形处理器(GPU)的缓冲区管理。After Effects是一款强大的视频特效和合成软件,而GPU缓冲区是其处理图形数据的核心部分。当我们谈论"缓冲区分析"时,...

    一个c++环形队列缓冲区

    ### 环形队列缓冲区的关键知识点 #### 一、环形缓冲区的基本概念与应用 环形缓冲区(Circular Buffer),又称循环队列,是一种高效的数据结构,在嵌入式系统、网络通信、多媒体处理等领域有着广泛的应用。它通过在...

    【IT十八掌徐培成】Java基础第26天-08.DirectByteBuffer2.zip

    《DirectByteBuffer2》是Java基础课程中的一个重要章节,主要探讨了Java内存管理中直接缓冲区的概念、使用及其优势。在Java编程中,内存管理对于性能优化至关重要,而直接缓冲区(Direct ByteBuffer)作为Java NIO...

    一个数据库缓冲区实现文档

    缓冲区的大小是设计数据库系统时的一个关键参数,它直接影响到系统性能。合理设置缓冲区大小可以最大化内存利用率,减少磁盘I/O操作,从而提高整体性能。 **缓冲区和帧的大小** 选择合适的缓冲区和帧大小是优化...

    Buffer_Query.zip_C#缓冲区_点线面缓冲区_线缓冲区_缓冲区_面 缓冲区

    5. 结果处理:将缓冲区保存为新的图层,或者直接在地图上显示。 在Buffer_Query项目中,你将找到示例代码,演示如何实现上述步骤。通过学习和理解这些代码,你可以掌握在C#环境中进行缓冲区分析的基本技能,从而...

Global site tag (gtag.js) - Google Analytics