博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DirectByteBuffer
阅读量:7222 次
发布时间:2019-06-29

本文共 2081 字,大约阅读时间需要 6 分钟。

hot3.png

DirectByteBuffer 博客分类: java

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 BigMemory stores “big” amounts of data in machine memory for ultra-fast access
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 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 相关的内存泄漏参看

参考资料

[1].

[2].
[3].

 

import java.lang.reflect.Method;import java.nio.ByteBuffer;import java.security.AccessController;import java.security.PrivilegedAction;/** * {@link DirectByteBufferCleaner} * * @author zhongl * @created 2011-1-14 */public final class DirectByteBufferCleaner {  private DirectByteBufferCleaner() {}  public static void clean(final ByteBuffer byteBuffer) {    if (!byteBuffer.isDirect()) return;    try {      Object cleaner = invoke(byteBuffer, "cleaner");      invoke(cleaner, "clean");    } catch (Exception e) { /* ignore */ }  }  private static Object invoke(final Object target, String methodName) throws Exception {    final Method method = target.getClass().getMethod(methodName);    return AccessController.doPrivileged(new PrivilegedAction() {      @Override      public Object run() {        try {          return method.invoke(target);        } catch (Exception e) {          throw new RuntimeException(e);        }      }    });  }}

 

转载于:https://my.oschina.net/xiaominmin/blog/1598158

你可能感兴趣的文章
异常备忘:java.lang.UnsupportedClassVersionError: Bad version number in .class file
查看>>
最全三大框架整合(使用映射)——applicationContext.xml里面的配置
查看>>
初步理解Java的三大特性——封装、继承和多态
查看>>
知识点积累(一)
查看>>
iphone-common-codes-ccteam源代码 CCFile.m
查看>>
python:浅析python 中__name__ = '__main__' 的作用
查看>>
修改tomcat端口后不能IP访问问题
查看>>
review board
查看>>
URAL 1495 One-two, One-two 2
查看>>
牛客国庆集训派对Day3 G Stones
查看>>
虚函数简单总结
查看>>
插入排序--算法导论
查看>>
NoSQL -- Redis使用
查看>>
处理iphone的 .play() 不能播放问题
查看>>
jetty404web界面服务器信息隐藏
查看>>
22个Photoshop网页设计教程网站推荐
查看>>
如何让程序员更容易的开发Web界面?重构SmartAdmin展示TinyUI
查看>>
centos7 python2和python3共存
查看>>
rhel6.2配置在线yum源
查看>>
分级聚类算法
查看>>