`
hougechuanqi
  • 浏览: 73152 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA 估计流量大小

 
阅读更多

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. 模型学习与预测:模型...

    Java_随机流算法的软件库,又名草图.zip

    它使用哈希函数将数据映射到固定大小的空间,然后通过一系列操作(如合并、更新和查询)来处理数据流。Theta Sketch的合并操作使其在分布式系统中特别有用,因为不同的部分可以独立处理,然后将结果合并。 2. Count...

    ARQ.rar_arq java_clothingypn_everythinga8x_mine4v7_实验arq模拟

    这个“ARQ.rar”压缩包包含了一个基于Java编程语言实现的ARQ模拟实验,名为“ARQ.java”,以及可能与实验相关的其他文件,如“clothingypn”、“everythinga8x”和“mine4v7”。这些可能是特定项目、用户或版本的...

    Stream summarizer and cardinality estimator..zip

    在IT行业中,数据流处理指的是对连续不断的数据进行实时分析,而基数估计则是在大规模数据集中估算唯一元素数量的一种方法,它对于大数据分析、数据库查询优化和网络流量监控等领域非常重要。 在Java编程中,处理...

    tomcat调优监控工具-probe.rar

    Sessions :浏览 / 搜索属性,查看最后的 IP ,过期,估计大小。 jsp :浏览,查看源代码,编译。 Data Sources :查看池使用情况,执行查询。 Logs :查看内容,下载,在运行时更改级别。 Threads :查看执行...

    flink-spillable-statebackend:Apache Flink的可溢出状态后端的预览版

    但是,除了优点之外, HeapKeyedStateBackend也有其缺点,最痛苦的是难以估计要设置的最大堆大小(Xmx),一旦堆内存不足以容纳所有内存,我们将遭受GC的影响状态数据。 这种情况有多种(不可避免的)原因,包括...

    程序员需要知道的16件事

    6. **网站统计**:安装Google Analytics或其他统计工具(如Piwik),监控流量来源和用户行为。 7. **robots.txt文件**:了解robots.txt文件的作用及如何正确配置它,以控制搜索引擎爬虫的抓取行为。 8. **URL规范...

    T/TCP实现:TCP输出

    TCP(Transmission Control Protocol)是一种面向连接的、...在Java网络编程中,理解TCP和T/TCP的工作原理至关重要,特别是对于开发涉及Socket通信的应用。掌握这些概念可以帮助开发者编写出更高效、更健壮的网络应用。

    count-min-sketch:C语言中的最小计数草图实现

    Count-Min Sketch广泛应用于网络流量分析、推荐系统、广告点击率预测、日志分析等领域,尤其适用于需要快速响应且对精度要求相对宽松的问题。 综上所述,Count-Min Sketch是解决大数据流分析问题的有效工具,其...

    A Probe-Based Technique to Optimize Join Queries

    2. **数据大小估计不准确**:在进行查询计划选择时,统计假设通常无法准确反映实际数据集的大小。 3. **远程方法调用成本被忽略**:在分布式环境中,数据传输的成本(包括时间和带宽消耗)是一个重要因素,但在传统...

    计算机网络实验

    【计算机网络实验】是针对大学生,尤其是学习Java编程和电子商务专业的学生设计的一份宝贵资源。实验主要关注HTTP协议,通过使用Wireshark这样的网络分析工具,帮助学生深入理解网络通信的基础和HTTP的工作流程。 *...

    系统设计资料

    - **令牌桶算法**:通过设置一个令牌桶,当客户端请求到达时消耗一定数量的令牌,以此来控制流量。 - **滑动窗口算法**:基于固定时间窗口内的请求次数来进行限速,适用于需要更加精细控制的场景。 #### 六、线程...

    计算机科学中最重要的32个算法

    19. **最大流量算法**:在网络流问题中寻找从源点到汇点的最大流量,例如解决运输问题和电路设计。 20. **合并排序**:基于分治策略的排序算法,将数组分成两半,分别排序后再合并,保证稳定性。 21. **牛顿法**:...

    YOLO目标检测算法讲义.md

    ### YOLO目标检测算法知识点总结 #### 1. YOLO概述 ##### 1.1 什么是YOLO? YOLO(You Only Look Once)是一种...- **跨领域融合**:与其他领域的技术(如语义分割、深度估计等)相结合,实现更复杂、更精细的任务。

Global site tag (gtag.js) - Google Analytics