`
CshBBrain
  • 浏览: 654596 次
  • 性别: Icon_minigender_1
  • 来自: 成都
博客专栏
B7d9bf34-126e-301f-819e-81f2615b5a2a
开源WebSocket服务...
浏览量:145895
Group-logo
HTML5移动开发
浏览量:138744
社区版块
存档分类
最新评论

Direct Buffer

 
阅读更多

转自: http://code.google.com/p/hatter-source-code/wiki/Study_Java_HotSpot_DirectBuffer

 

简介及其原理

DirectBuffer 通过免去中间交换的内存拷贝, 提升IO处理速度;也就是常说的zero-copy

  • ByteBuffer
    • HeapByteBuffer
    • MappedByteBuffer
      • MappedByteBuffer.map(int mode,long position,long size);

 

READ_ONLY 只读 试图修改得到的缓冲区将导致抛出 ReadOnlyBufferException
READ_WRITE 读/写 对得到的缓冲区的更改最终将传播到文件;该更改对映射到同一文件的其他程序不一定是可见的
PRIVATE 专用 对得到的缓冲区的更改不会传播到文件,并且该更改对映射到同一文件的其他程序也不是可见的;相反,会创建缓冲区已修改部分的专用副本

 

 

分配 java.nio.ByteBuffer.allocateDirect
释放 sun.nio.ch.DirectBuffer.cleaner().clean()

 

可以通过参数 -XX:MaxDirectMemorySize= 设置其可使用的最大内存大小,当未设置时默认同 -Xmx 的大小。

各种应用

 

BigMemory http://terracotta.org/products/bigmemory BigMemory stores “big” amounts of data in machine memory for ultra-fast access
DirectMemory http://incubator.apache.org/directmemory/ Apache DirectMemory is a multi layered cache implementation featuring off-heap memory management (a-la BigMemory) to enable efficient handling of a large number of java objects without affecting jvm garbage collection performance
HugeCollections https://code.google.com/p/vanilla-java/wiki/HugeCollections If you want to efficiently store large collections of data in memory. This library can dramatically reduce Full GC times and reduce memory consumption as well

 

OutOfMemoryError

和 DirectBuffer 相关的内存泄漏参看Study_Java_HotSpot_OOME

参考资料

[1]. http://blog.csdn.net/fancyerii/article/details/7655451
[2]. http://lixjluck.iteye.com/blog/1130455
[3]. http://www.zhurouyoudu.com/index.php/archives/470/

分享到:
评论

相关推荐

    缓冲池 java

    Buffer分为两种类型:Heap Buffer和Direct Buffer。Heap Buffer存储在Java堆中,而Direct Buffer存储在系统内存中,直接与硬件交互,减少了Java虚拟机(JVM)的内存拷贝,提高了性能。然而,Direct Buffer可能会占用...

    java 中Buffer源码的分析

    Buffer 是 Java 中一个非常重要的知识点,Direct Buffer 和 Heap Buffer 是两种不同的 Buffer,Direct Buffer 可以提高效率和减少GC 的频率,而 Heap Buffer 需要进行数据复制,因此效率较低。在实际开发中,应该...

    关于java堆内存溢出的几种情况

    【情况四】:`java.lang.OutOfMemoryError: Direct buffer memory` 这种情况发生在NIO(非阻塞I/O)中,因为直接缓冲区内存分配失败。可以通过设置`-XX:MaxDirectMemorySize`参数来限制直接内存大小,如`-XX:...

    第12讲 Java有几种文件拷贝方式?哪一种最高效?1

    Heap Buffer存储在JVM堆中,而Direct Buffer则直接在操作系统分配的内存中,这使得它对内存管理的影响较小,对于大容量数据处理时,Direct Buffer通常能提供更好的性能,但会增加内存碎片的风险。 在实际应用中,...

    JAVA IO-NIO 详解

    - **Direct vs Non-Direct Buffer**: Direct Buffer直接映射到物理内存,Non-Direct Buffer在JVM堆上分配内存。 **3. Buffer的日常操作** - **put**: 向Buffer写入数据。 - **get**: 从Buffer读取数据。 - **flip*...

    系统稳定性——OutOfMemoryError常见原因及解决方法1

    【系统稳定性——OutOfMemoryError常见原因及解决方法】 在Java应用程序中,系统稳定性的一个关键因素是避免出现`OutOfMemoryError`。这种错误通常表明JVM(Java虚拟机)的内存资源已经耗尽,无法继续正常运行。...

    android opengl学习文档

    在OpenGL ES中,主要使用的是Buffer类来管理数据,它允许开发者以内存缓冲区的方式来处理大量的数据读写,并且可以避免Java垃圾回收机制的干扰,因为DirectBuffer可以直接从操作系统内存分配空间,这部分空间不会被...

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

    ByteBuffer directBuffer = ByteBuffer.allocateDirect(1024); ``` 2. **非直接缓冲区**: 非直接缓冲区是在Java堆中分配的,数据传输需要经过JVM堆。虽然它没有直接缓冲区那么高效,但在处理小数据量时,由于...

    netty-code源码

    7. **零拷贝(Zero-Copy)**:Netty通过DirectBuffer和FileRegion实现零拷贝技术,减少了数据在内存中的复制,提高了性能。 8. **ChannelFuture和Promise**:ChannelFuture表示异步操作的结果,而Promise则用于设置...

    JavaNio视频下载_百度云盘资源

    - **Direct Buffer**:直接缓冲区是在本地内存而非Java堆上分配的内存,通常用于提高性能。 - **Heap Buffer**:堆缓冲区则是在Java堆上分配的内存。 #### Channel Channel是Java NIO中的另一个核心概念,它类似于...

    androidOpenGLES笔记1-基础.pdf

    Buffer类提供了高效的数据读写方法,并且可以创建不受垃圾回收机制控制的直接缓冲区(Direct buffer),以避免不必要的性能损耗。 在使用OpenGL ES进行Android开发时,了解和熟练运用Buffer类至关重要,因为它能...

    最透彻的的Netty高性能原理和框架架构解析.docx

    3. 高性能 I/O 模型:Netty 使用了高性能的 I/O 模型,包括零拷贝和 Direct Buffer 等技术,来提高 I/O 操作的效率。 4. Pipeline 架构:Netty 的 Pipeline 架构可以使得处理逻辑清晰地分离关注点,使得开发和维护变...

    Mycat性能调优指南2

    JVM内存主要分为两大块:Java堆内存和直接内存映射(DirectBuffer占用)。推荐配置如下: - **堆内存**: 建议保持适中大小,例如在一个拥有16GB内存的服务器上,可以将Mycat的堆内存设置为4GB。 - **直接内存映射**...

    JAVA常见错误(方便开发人员查找问题,也方便测试人员对bug进行描述)

    8. java.lang.OutOfMemoryError:Direct buffer memory 该错误是由于Direct buffer memory的溢出。解决方法是调整-XX:MaxDirectMemorySize=参数。 9. java.lang.ArithmeticException 该错误是当出现异常的运算条件...

    netty4.0 关于buffe

    `UnpooledByteBufAllocator` 是一个工具类,用于创建这些 `ByteBuf` 实例,通常推荐使用 `Unpooled` 工具类中的静态方法,如 `directBuffer()` 或 `wrappedBuffer()` 来创建和管理 `ByteBuf`。 总的来说,`ByteBuf`...

    androidOpenGLES笔记1-基础参照.pdf

    在Android开发中,使用Java的NIO包(java.nio)的Buffer类来存储和传输图形数据,因为Buffer提供了高效的数据管理和内存操作,支持直接缓冲(Direct Buffer),避免了垃圾回收的开销,从而提升性能。 在实际开发中...

    Netty 25道面试题你和答案.docx

    2. **内存池设计**:使用内存池(包括Direct Buffer)减少了对象的创建和销毁,提高了IO性能,并通过二叉查找树优化内存分配。 3. **内存零拷贝**:通过Direct Buffer支持Zero-Copy机制,减少了CPU上下文切换,提升...

    mycat性能优化

    通常情况下,JVM的内存分为两大部分:Java堆内存和直接内存映射(Direct Buffer)。建议将堆内存设置为适中大小,而直接内存映射则尽可能地大。 - 对于16GB内存的服务器,推荐配置为:Mycat堆内存4GB,直接内存映射...

Global site tag (gtag.js) - Google Analytics