在Java中当我们要对数据进行更底层的操作时,一般是操作数据的字节(byte)形式,这时经常会用到ByteBuffer这样一个类. ByteBuffer提供了两种静态实例方式: public static ByteBuffer allocate(int capacity) public static ByteBuffer allocateDirect(int capacity) 为什么要提供两种方式呢?这与Java的内存使用机制有关. 第一种分配方式产生的内存开销是在JVM中的,而另外一种的分配…
ByteBuffer的allocate和allocateDirect区别 在Java中当我们要对数据进行更底层的操作时,通常是操作数据的字节(byte)形式,这时常常会用到ByteBuffer这样一个类.ByteBuffer提供了两种静态实例方式: public static ByteBuffer allocate(int capacity) public static ByteBuffer allocateDirect(int capacity) 为什么要提供两种方式呢?这与Java的内存使用…
在Java中当我们要对数据进行更底层的操作时,一般是操作数据的字节(byte)形式,这时经常会用到ByteBuffer这样一个类.ByteBuffer提供了两种静态实例方式: public static ByteBuffer allocate(int capacity) public static ByteBuffer allocateDirect(int capacity) 为什么要提供两种方式呢?这与Java的内存使用机制有关.第一种分配方式产生的内存开销是在JVM中的,而另外一种的分配方式…
HeapByteBuffer,顾名思义,是写在jvm堆上面的一个buffer,底层的本质是一个数组,用类封装维护了很多的索引(limit/position/capacity等) DirectByteBuffer,底层的数据其实是维护在操作系统的内存中,而不是jvm里,DirectByteBuffer里维护了一个引用address指向了数据,从而操作数据 HeapByteBuffer优点:由于内容维护在jvm里,所以把内容写进buffer里速度会快些:并且,可以更容易回收 DirectByteBu…
java.nio.ByteBuffer 1. ByteBuffer中的参数position.limit.capacity.mark含义: position:表示当前指针的位置(下一个要操作的数据元素的位置) limit:表示当前数组最大的使用量,即有效位置的EOF位置(缓冲区数组中不可操作的下一个元素的位置,limit<=capacity) capacity:表示缓冲区最大容量(缓冲区数据的总长度) mark:用于记录当前position的前一个位置或者默认是-1 2. ByteBuffer中常…
让我们来到微观世界重新认识 Netty 在前面 Netty 源码解析系列 <聊聊 Netty 那些事儿>中,笔者带领大家从宏观世界详细剖析了 Netty 的整个运转流程.从一个网络数据包在内核中的收发过程开始聊起,总体介绍了 Netty 的 IO 线程模型,后面我们围绕着这个 IO 模型又详细介绍了整个 Reactor 模型在 Netty 中的实现. 这个宏观流程包括:Reactor模型的创建,启动,运转架构,网络连接的接收和关闭,网络数据的接收和发送,利用 pipeline 对 IO 处理逻…
目前Java中最IO有多种文件读取的方法,本文章对比Stream,NIO ByteBuffer,NIO MappedByteBuffer的性能,让我们知道到底怎么能写出性能高的文件读取代码. package com.seeyon.nio; import org.junit.Test; import java.io.*; import java.nio.ByteBuffer; import java.nio.MappedByteBuffer; import java.nio.channels.Fi…
由于HeapByteBuffer和DirectByteBuffer类都是default类型的,所以你无法字节访问到,你只能通过ByteBuffer间接访问到它,因为JVM不想让你访问到它. 分配HeapByteBuffer的方法是: ByteBuffer.allocate(int capacity);参数大小为字节的数量 分配DirectByteBuffer的方法是: ByteBuffer.allocateDirect(int capacity);//可以看到分配内存是通过unsafe.allo…
今天看到一篇jquery 事件的文章,自己写了个小例子,虽然2种方式都可以实现,但是不太明白,找了点资料 $("#box1").delegate("p","click",function(e){//函数绑定到容器 alert(this.id) }) $("#box1 p").click(function(e){ alert(this.id) }) 博客链接 : http://www.cnblogs.com/zagelover/…
1 java三大特征 1)封装:即class,把一类实体定义成类,该类有变量和方法. 2)继承:从已有的父类中派生出子类,子类实现父类的抽象方法. 3)多态:通过父类对象可以引用不同的子类,从而实现不同的业务逻辑. 2 接口和抽象类区别 1)接口需要实现用implements,抽象类需要继承用extends 2)一个类可以实现多个接口,一个类只能继承一个抽象类. 3)实现接口必须实现接口里面的所有方法,继承抽象类只需要实现有abstract修饰的方法. 4)接口默认是public修饰,抽象类可以…