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......

May 16, 2017

Redis内存

内存消耗

Redis里面内存统计指标

属性名

属性说明

used_memory

Redis分配器分配的内存总量,也就是内部存储的所有数据的内存占用量

used_memory_human

used_memory的可读形式

used_memory

操作系统角度显示Redis进程占用的内存总量

used_memory_peak

内存使用的最大值,表示used_memory的峰值

used_memory_peak_human

以可读的形式表示used_memory_peak

used_memory_lua

Lua引擎消耗的内存

mem_fragmentation......

May 15, 2017

close()与shutdownGracefully()

state:writing

Channel.close()与EventExecutorGroup.shutdownGracefully()

Channel.close()

Channel.close()的定义为:

/**

* Request to close this {@link Channel} and notify the {@link ChannelFuture} once the operation completes,

* either because the operation was successful or because of

* an error.

*......