小编Chr*_*des的帖子

在很多情况下优化Java switch语句?

我目前正在使用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

java performance switch-statement

7
推荐指数
2
解决办法
6049
查看次数

对rt.jar中的java.lang.String进行简单修改,导致VM段错误

重现步骤:

  1. 从JDK的src.zip中对java.lang.String进行一些简单的修改,例如添加

    private boolean dummy = false;

  2. 编译更改(Eclipse编译器)

  3. 使用新的java/lang/String.class更新rt.jar
  4. 用更新的版本替换jre/lib中的rt.jar.
  5. 运行bin/java或任何使用rt.jar的工具

每次启动时,VM都会出现段错误.

操作系统是Linux(Debian Wheezy)x86_64.同时发生JDK 1.7.0_55和1.8.0_05

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x0000000000000000, pid=13313, tid=140065468557056
#
# JRE version:  (7.0_55-b13) (build )
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.55-b03 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C  0x0000000000000000
#
# Core dump written. Default location: /home/chris/workspace/JDK7/foo/core or core.13313
#
# If you would like to …
Run Code Online (Sandbox Code Playgroud)

java segmentation-fault

1
推荐指数
1
解决办法
656
查看次数