相信大家都知道,但是两者的区别在什么地方呢?在不同的环境下采用哪种类型的ByteBuffer会更有效率呢?先解释一下两者的区别:Non-directByteBuffer内存是分配在堆上的,直接由Java虚拟机负责垃圾收集,你可以把它想象成一个字节数组的包装类,如下伪码所示:HeapByteBuffer extends ByteBuffer {    byte[] content;    int position, limit, capacity;    ......}而DirectByteBuf…
在Java的NIO中,我们一般采用ByteBuffer缓冲区来传输数据,一般情况下我们创建Buffer对象是通过ByteBuffer的两个静态方法: ByteBuffer.allocate(int capacity); ByteBuffer.wrap(byte[] array); 查看相关的源码得到 public static ByteBuffer allocate(int capacity) { if (capacity < 0) throw new IllegalArgumentExcept…
Tomcat开启了APR模式,而APR模式会使用堆外内存,关于堆内存可从如下链接了解一下:http://blog.csdn.net/zhouhl_cn/article/details/6573213. 完整异常信息如下: Exception in thread "http-apr-8080-Acceptor-0" java.lang.OutOfMemoryError: Direct buffer memory at java.nio.Bits.reserveMemory(Bits.ja…
ByteBuffer的源码中有这样一段注释: A byte buffer is either direct or non-direct. Given a direct byte buffer, the Java virtual machine will make a best effort to perform native I/O operations directly upon it. That is, it will attempt to avoid copying the buffer'…
Buffer 类 定义了一个可以线性存放primitive type数据的容器接口.Buffer主要包含了与类型(byte, char…)无关的功能. 值得注意的是Buffer及其子类都不是线程安全的. 每个Buffer都有以下的属性: capacity这个Buffer最多能放多少数据.capacity一般在buffer被创建的时候指定. limit在Buffer上进行的读写操作都不能越过这个下标.当写数据到buffer中时,limit一般和capacity相等,当读数据时,limit代表buf…
RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct,topic,header header模式在实际使用中较少,本文只对前三种模式进行比较. 性能排序:fanout > direct >> topic.比例大约为11:10:6 一.Direct Exchange Direct Exchange - 处理路由键.需要将一个队列绑定到交换机上,要…
ByteBuffer前前后后看过好几次了,实际使用也用了一些,总觉得条理不够清晰. <程序员的思维修炼>一本书讲过,主动学习,要比单纯看资料效果来的好,所以干脆写个详细点的文章来记录一下. 概述 ByteBuffer是NIO里用得最多的Buffer,它包含两个实现方式:HeapByteBuffer是基于Java堆的实现,而DirectByteBuffer则使用了unsafe的API进行了堆外的实现.这里只说HeapByteBuffer. 使用 ByteBuffer最核心的方法是put(byte…
ByteBuffer前前后后看过好几次了,实际使用也用了一些,总觉得条理不够清晰. <程序员的思维修炼>一本书讲过,主动学习,要比单纯看资料效果来的好,所以干脆写个详细点的文章来记录一下. 缓冲区(Buffer) 缓冲区(Buffer)就是在内存中预留指定大小的存储空间用来对输入/输出(I/O)的数据作临时存储,这部分预留的内存空间就叫做缓冲区: 使用缓冲区有这么两个好处: 1.减少实际的物理读写次数 2.缓冲区在创建时就被分配内存,这块内存区域一直被重用,可以减少动态分配和回收内存的次数 举…
mina中IOBuffer是Nio中ByteBuffer的衍生类,主要是解决Bytebuffer的两个不足 1.没有提供足够灵活的get/putXXX方法 2.它容量固定,难以写入可变长度的数据 特点: 1.通过allocate分配空间, 2.包装现有的NIOBu和array, 3.自拓展, 4自压缩, 5.衍生缓冲区, 6.可改变缓冲区的分配策略 1.先来学习下ByteBuffer你要了解的东西摘自 http://blackbeans.iteye.com/blog/836103这是一篇好文章,…
OpenGL是个专业的3D程序接口,是一个功能强大,调用方便的底层3D图形库.OpenGL的前身是SGI公司为其图形工作站开发的IRIS GL.IRIS GL是一个工业标准的3D图形软件接口,功能虽然强大但是移植性不好,于是SGI公司便在IRIS GL的基础上开发了OpenGL.OpenGL的英文全称是“Open Graphics Library”,顾名思义,OpenGL便是“开放的图形程序接口”.虽然DirectX在家用市场全面领先,但在专业高端绘图领域,OpenGL是不 能被取代的主角. O…