public class DefaultMessageSizeEstimator implements IoEventSizeEstimator {
private final ConcurrentMap<Class<?>, Integer> class2size = new ConcurrentHashMap<Class<?>, Integer>();
public DefaultMessageSizeEstimator() {
class2size.put(boolean.class, 4); // Probably an integer.
class2size.put(byte.class, 1);
class2size.put(char.class, 2);
class2size.put(short.class, 2);
class2size.put(int.class, 4);
class2size.put(long.class, 8);
class2size.put(float.class, 4);
class2size.put(double.class, 8);
class2size.put(void.class, 0);
}
/**
* {@inheritDoc}
*/
public int estimateSize(IoEvent event) {
return estimateSize((Object) event) + estimateSize(event.getParameter());
}
public int estimateSize(Object message) {
if (message == null) {
return 8;
}
int answer = 8 + estimateSize(message.getClass(), null);
if (message instanceof IoBuffer) {
answer += ((IoBuffer) message).remaining();
} else if (message instanceof WriteRequest) {
answer += estimateSize(((WriteRequest) message).getMessage());
} else if (message instanceof CharSequence) {
answer += ((CharSequence) message).length() << 1;
} else if (message instanceof Iterable<?>) {
for (Object m : (Iterable<?>) message) {
answer += estimateSize(m);
}
}
return align(answer);
}
private int estimateSize(Class<?> clazz, Set<Class<?>> visitedClasses) {
Integer objectSize = class2size.get(clazz);
if (objectSize != null) {
return objectSize;
}
if (visitedClasses != null) {
if (visitedClasses.contains(clazz)) {
return 0;
}
} else {
visitedClasses = new HashSet<Class<?>>();
}
visitedClasses.add(clazz);
int answer = 8; // basic overhead
for (Class<?> c = clazz; c != null; c = c.getSuperclass()) {
Field[] fields = c.getDeclaredFields();
for (Field f : fields) {
// ignore static fields
if ((f.getModifiers() & Modifier.STATIC) != 0) {
continue;
}
answer += estimateSize(f.getType(), visitedClasses);
}
}
visitedClasses.remove(clazz);
// some alignment
answer = align(answer);
// put the final answer
Integer tmpAnswer = class2size.putIfAbsent(clazz, answer);
if (tmpAnswer != null) {
answer = tmpAnswer;
}
return answer;
}
private static int align(int size) {
if (size % 8 != 0) {
size /= 8;
size++;
size *= 8;
}
return size;
}
}
相关推荐
这些数据可能包括不同天气、光照条件下的车辆图片,以及各种类型和大小的车辆,以确保模型在实际环境中具有良好的泛化能力。 再者,系统可能还包括数据预处理步骤,如背景减除、运动估计和目标分割,以消除干扰因素...
在最简单的形式下,线性回归模型是一元线性回归,表示为 y = ax + b,其中 y 是目标变量(车流量),a 是斜率(影响大小),x 是输入变量(例如时间),b 是截距(当输入为0时的预测值)。 3. 模型学习与预测:模型...
它使用哈希函数将数据映射到固定大小的空间,然后通过一系列操作(如合并、更新和查询)来处理数据流。Theta Sketch的合并操作使其在分布式系统中特别有用,因为不同的部分可以独立处理,然后将结果合并。 2. Count...
这个“ARQ.rar”压缩包包含了一个基于Java编程语言实现的ARQ模拟实验,名为“ARQ.java”,以及可能与实验相关的其他文件,如“clothingypn”、“everythinga8x”和“mine4v7”。这些可能是特定项目、用户或版本的...
在IT行业中,数据流处理指的是对连续不断的数据进行实时分析,而基数估计则是在大规模数据集中估算唯一元素数量的一种方法,它对于大数据分析、数据库查询优化和网络流量监控等领域非常重要。 在Java编程中,处理...
Sessions :浏览 / 搜索属性,查看最后的 IP ,过期,估计大小。 jsp :浏览,查看源代码,编译。 Data Sources :查看池使用情况,执行查询。 Logs :查看内容,下载,在运行时更改级别。 Threads :查看执行...
但是,除了优点之外, HeapKeyedStateBackend也有其缺点,最痛苦的是难以估计要设置的最大堆大小(Xmx),一旦堆内存不足以容纳所有内存,我们将遭受GC的影响状态数据。 这种情况有多种(不可避免的)原因,包括...
6. **网站统计**:安装Google Analytics或其他统计工具(如Piwik),监控流量来源和用户行为。 7. **robots.txt文件**:了解robots.txt文件的作用及如何正确配置它,以控制搜索引擎爬虫的抓取行为。 8. **URL规范...
TCP(Transmission Control Protocol)是一种面向连接的、...在Java网络编程中,理解TCP和T/TCP的工作原理至关重要,特别是对于开发涉及Socket通信的应用。掌握这些概念可以帮助开发者编写出更高效、更健壮的网络应用。
Count-Min Sketch广泛应用于网络流量分析、推荐系统、广告点击率预测、日志分析等领域,尤其适用于需要快速响应且对精度要求相对宽松的问题。 综上所述,Count-Min Sketch是解决大数据流分析问题的有效工具,其...
2. **数据大小估计不准确**:在进行查询计划选择时,统计假设通常无法准确反映实际数据集的大小。 3. **远程方法调用成本被忽略**:在分布式环境中,数据传输的成本(包括时间和带宽消耗)是一个重要因素,但在传统...
【计算机网络实验】是针对大学生,尤其是学习Java编程和电子商务专业的学生设计的一份宝贵资源。实验主要关注HTTP协议,通过使用Wireshark这样的网络分析工具,帮助学生深入理解网络通信的基础和HTTP的工作流程。 *...
- **令牌桶算法**:通过设置一个令牌桶,当客户端请求到达时消耗一定数量的令牌,以此来控制流量。 - **滑动窗口算法**:基于固定时间窗口内的请求次数来进行限速,适用于需要更加精细控制的场景。 #### 六、线程...
19. **最大流量算法**:在网络流问题中寻找从源点到汇点的最大流量,例如解决运输问题和电路设计。 20. **合并排序**:基于分治策略的排序算法,将数组分成两半,分别排序后再合并,保证稳定性。 21. **牛顿法**:...
### YOLO目标检测算法知识点总结 #### 1. YOLO概述 ##### 1.1 什么是YOLO? YOLO(You Only Look Once)是一种...- **跨领域融合**:与其他领域的技术(如语义分割、深度估计等)相结合,实现更复杂、更精细的任务。