多种情况下优化Java switch语句? [英] Optimising Java switch statement with many cases?

查看:57
本文介绍了多种情况下优化Java switch语句?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在使用 switch 语句来处理有 20 种左右不同情况的传入消息类型.其中一些案例比其他案例更可能发生数量级.

I am currently using a switch statement to handle types of incoming messages of which there are 20 or so different cases. Some of these cases are orders of magnitude more likely to occur than others.

热点编译器是否能够优化检查案例的顺序以找到要执行的正确案例,还是我应该构造我的代码以便最常见的案例首先出现:

Is the hotspot compiler able to optimise the order of examining cases to find the correct case to execute or should I structure my code so that the most common cases appear first:

switch(messageType)
{
    case MOST_COMMON:
        // handle it
        break;

...
    case LEAST_COMMON:
        // handle it
        break;
}

所有情况都是互斥的.

对消息类型使用策略模式和 Map 查找会更好吗?

Would I be better off using the strategy pattern and a Map lookup on message type?

性能是关键问题,因为我每秒处理数千条消息,并试图减少对象创建和方法调用开销.

Performance is the key concern as I am handling thousands of messages per second and am trying to cut down on object creation and method call overhead.

非常感谢,

克里斯

谢谢指点.messageType 是一个 int 值范围很窄,因此看起来它会编译为tableswitch"字节码,因此无需重新排序案例.

Thanks for the pointers. messageType is an int with a tight range of values so it looks like it will compile to the "tableswitch" bytecode so no need to reorder the cases.

JVM 规范的相关部分在这里 http://java.sun.com/docs/books/jvms/second_edition/html/Compiling.doc.html#14942

Relevant part of JVM spec is here http://java.sun.com/docs/books/jvms/second_edition/html/Compiling.doc.html#14942

推荐答案

除非您确定此 switch 语句会导致性能问题,否则我建议您过早地进行优化.另外,请查看接受的回答这个问题.

Unless you are sure that this switch statement is causing you performance problems, then I would suggest that you're optimizing prematurely. Also, check out the accepted answer to this question.

这篇关于多种情况下优化Java switch语句?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆