MemoryChannel的简易类结构:
内部类MemoryTransaction的简易类结构:
一,configure(Context context)
1,capacity:MemroyChannel的容量,默认是100。
2,transCapacity:每个事务最大的容量,也就是每个事务能够获取的最大Event数量。默认也是100。
3,byteCapacityBufferPercentage:定义Channle中Event所占的百分比,需要考虑在Header中的数据。
4,byteCapacity:byteCapacity等于设置的byteCapacity值或堆的80%乘以1减去byteCapacityBufferPercentage的百分比,然后除以100。源码如下:
try {
byteCapacity = (int)((context.getLong("byteCapacity", defaultByteCapacity).longValue() * (1 - byteCapacityBufferPercentage * .01 )) /byteCapacitySlotSize);
if (byteCapacity < 1) {
byteCapacity = Integer.MAX_VALUE;
}
} catch(NumberFormatException e) {
byteCapacity = (int)((defaultByteCapacity * (1 - byteCapacityBufferPercentage * .01 )) /byteCapacitySlotSize);
}
5,keep-alive:增加和删除一个Event的超时时间(单位:秒)
6,初始化LinkedBlockingDeque对象,大小为capacity。以及各种信号量对象。
7,最后初始化计数器。
二,信号量
MemoryChannel有三个信号量用来控制事务,防止容量越界。这三个信号量分别是:
queueRemaining : 表示空闲的容量大小。
queueStored : 表示已经存储的容量大小。
bytesRemaining : 表示可以使用的内存大小。该大小就是计算后的byteCapacity值。
三,MemoryTransaction
MemoryTransaction用来