Chr*_*des 7 java performance switch-statement
我目前正在使用switch语句来处理有大约20种不同情况的传入消息类型.其中一些案例比其他案件更有可能发生数量级.
热点编译器是否能够优化检查案例的顺序以找到要执行的正确案例,或者我应该构建我的代码以便最常见的案例首先出现:
switch(messageType)
{
case MOST_COMMON:
// handle it
break;
...
case LEAST_COMMON:
// handle it
break;
}
Run Code Online (Sandbox Code Playgroud)
所有案件都是互相排斥的.
我会更好地使用策略模式和消息类型的Map查找吗?
性能是关键问题,因为我每秒处理数千条消息,并且正在尝试减少对象创建和方法调用开销.
非常感谢,
克里斯
编辑:感谢指点.messageType是一个具有较小值范围的int,因此看起来它将编译为"tableswitch"字节码,因此无需重新排序.
JVM规范的相关部分在这里http://java.sun.com/docs/books/jvms/second_edition/html/Compiling.doc.html#14942
如果情况是enum值或密集分布的int值,那么一旦 JIT 编译器启动将其全部转换为查找表,对顺序进行处理将不会对您有帮助。
如果您使用 Java7 字符串开关或稀疏分布的值,那么最常见的应该首先进行,因为它会变成一组级联的类似if测试和分支操作。
| 归档时间: |
|
| 查看次数: |
6049 次 |
| 最近记录: |