Java 1.7/1.8 JIT编译器损坏?

Java 1.7/1.8 JIT编译器损坏?,java,jvm,fatal-error,jit,Java,Jvm,Fatal Error,Jit,我对GlazedList 1.8中的一些代码有一个问题,在java 1.8_05/64位/FC20和Windows 8下运行时,这些代码会导致SIGSEGV 我有反汇编的输出(-XX:+UnlockDiagnosticVMOptions'-XX:CompileCommand=print,*BoyerMooreCaseSensitiveTextSearchStrategy.indexOf'见下文),但我不知道如何调试它 因此,任何有关调试代码的帮助或向何处寻求帮助的提示都是非常感谢的 反汇编代码超

我对GlazedList 1.8中的一些代码有一个问题,在java 1.8_05/64位/FC20和Windows 8下运行时,这些代码会导致SIGSEGV

我有反汇编的输出(
-XX:+UnlockDiagnosticVMOptions'-XX:CompileCommand=print,*BoyerMooreCaseSensitiveTextSearchStrategy.indexOf'
见下文),但我不知道如何调试它

因此,任何有关调试代码的帮助或向何处寻求帮助的提示都是非常感谢的

反汇编代码超过30000个字符。很长时间,所以你必须到这里来阅读代码

Java运行时环境检测到一个致命错误:

SIGSEGV (0xb) at pc=0x00007fdc2d93bcfc, pid=12092, tid=140582414018304
JRE版本:Java(TM)SE运行时环境(8.0_05-b13)(构建 1.8.0_05-b13)Java虚拟机:Java热点(TM)64位服务器虚拟机(25.5-b02混合模式linux-amd64压缩oops)

有问题的框架:

J 12756 C2

GlazedList.impl.filter.BoyerMooreCaseSensitiveExtSearchStrategy.indexOf(Ljava/lang/String;)I (147字节)@0x00007fdc2d93bcfc[0x00007fdc2d93baa0+0x25c]


这确实是一个JIT编译器错误。我已经验证了它存在于JDK7U67、8u11以及最新的JDK9源代码中。以下是简化的测试用例:

public class CharArrayCrash {
    static char[] pattern0 = {0};
    static char[] pattern1 = {1};

    static void test(char[] array) {
        if (pattern1 == null) return;

        int i = 0;
        int pos = 0;
        char c = array[pos];

        while (i >= 0 && (c == pattern0[i] || c == pattern1[i])) {
            i--;
            pos--;
            if (pos != -1) {
                c = array[pos];
            }
        }
    }

    public static void main(String[] args) {
        for (int i = 0; i < 1000000; i++) {
            test(new char[1]);
        }
    }
}
公共类字符集{
静态字符[]模式0={0};
静态字符[]模式1={1};
静态无效测试(字符[]数组){
if(pattern1==null)返回;
int i=0;
int pos=0;
字符c=数组[pos];
而(i>=0&(c==pattern0[i]| | c==pattern1[i])){
我--;
pos--;
如果(位置!=-1){
c=数组[pos];
}
}
}
公共静态void main(字符串[]args){
对于(int i=0;i<1000000;i++){
测试(新字符[1]);
}
}
}
在数组偏移量非法(0xffffffff)的数组访问指令上发生崩溃。
JIT似乎错误地重新排列减量和数组加载指令


不管怎样,我已经向Oracle提交了错误报告:

您是否尝试过禁用JIT编译器来处理前面关于该问题的评论中提到的特定类?jre 1.7_21似乎也报告了这个问题,因此您关于1.8 JIT编译器被破坏的问题似乎具有误导性。这似乎是一个长期存在的问题。是的,禁用JIT编译可以消除这个问题。问题也出现在1.7.x中。您是否搜索了bug数据库/向Oracle报告了它?