May 30, 2017

Bootstrap源码分析

不管是客户端使用的Bootstrap还是服务端使用的ServerBootstrap都是继承自AbstractBootstrap,AbstractBootstrap的定义如下

public abstract class AbstractBootstrap<B extends AbstractBootstrap<B, C>, C extends Channel> implements Cloneable {

}

从定义中可见AbstracpBootstrap实现了Cloneable接口,能够进行复制。

Server端:ServeBootstrap

正如前文介绍的......

May 30, 2017

Java对象大小

一个Java对象的大小包括下面三个部分

1. 对象头(Header)

2. 实例数据(Instance Data)

3. 对齐填充(Padding)

对象头(Header)

对象头在32位系统上占用8bytes,在64位系统上占用16bytes。

实例数据(Instance data)

Java中原生类型(Primitive Type)的内存占用情况如下:

Primitive Type

Memory Required(bytes)

boolean

1

byte

1

short

2

char

2

int

4

long

8

float

4

d......

May 20, 2017

Redis源码学习之事件驱动

Redis基于多路复用技术实现了一套简单的事件驱动库,代码在ae.h、ae.c以及ae_epoll.c、ae_evport.c和ae_kqueue.c、ae_select.c这几个文件中。其中ae表示的是antirez eventloop的意思。

Redis里面包含两种事件类型:FileEvent和TimeEvent。

Redis采用IO多路复用技术,所有的事件都是在一个线程中进行处理。Redis的事件驱动模型可以以以下为代码进行表示:

int main(int argc,char **argv)

{

while(true) {

// 等待事件到来:wait4Ev......

May 17, 2017

Netty连接超时分析

常用用法为

Bootstrap bootstrap = new Bootstrap();

bootstrap.option(ChannelOption.CONNECT_TIMEOUT,3000);// 设置连接超时时间

ChannelFuture future = bootstrap.connect(server,port);

connect()最终执行的代码为AbstrcatNioChannel.connect()方法,实现如下:

跟踪下去会进入到doConnect()方法中,有

@Override

public final void connect(

final So......