Java 1.7/1.8的JIT编译器是否存在问题?

8
我遇到了一个问题,涉及 GlazedList 1.8的代码,在java 1.8_05/64位/FC20和Windows 8下运行时造成了 SIGSEGV。我有反汇编输出(-XX:+UnlockDiagnosticVMOptions '-XX:CompileCommand=print,*BoyerMooreCaseInsensitiveTextSearchStrategy.indexOf' 参见下文),但我不知道如何调试它。所以任何关于调试代码或寻求帮助的提示都将不胜感激。 反汇编代码超过 30000 个字符,所以您需要转到此处https://java.net/jira/browse/GLAZEDLISTS-564?focusedCommentId=378982&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-378982阅读代码。 Java运行环境检测到了一个致命错误:
SIGSEGV (0xb) at pc=0x00007fdc2d93bcfc, pid=12092, tid=140582414018304

JRE版本:Java(TM) SE Runtime Environment(8.0_05-b13)(构建1.8.0_05-b13)Java虚拟机:Java HotSpot(TM) 64位服务器VM(25.5-b02混合模式linux-amd64压缩的oops) 问题帧: J 12756 C2 ca.odell.glazedlists.impl.filter.BoyerMooreCaseInsensitiveTextSearchStrategy.indexOf(Ljava/lang/String;)I(147字节)@ 0x00007fdc2d93bcfc [0x00007fdc2d93baa0 + 0x25c]

你尝试过禁用 JIT 编译器针对以前在该问题上发表评论中提到的特定类吗?该问题似乎也已经针对 jre 1.7_21 报告,因此你关于 1.8 JIT 编译器出现故障的问题似乎是误导性的。这似乎是一个长期存在的问题。https://java.net/jira/browse/GLAZEDLISTS-564?focusedCommentId=375729&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-375729 - Brett Okken
是的,禁用JIT编译可以消除这个问题。而且这个问题也存在于1.7.x版本中。 - cmadsen
1
你是否在错误数据库中搜索过或者向 Oracle 报告过这个问题? - Brian Knoblauch
1个回答

7

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

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]);
        }
    }
}

在数组访问指令中发生崩溃,其中数组偏移量是非法的(0xffffffff)。似乎JIT错误地重新排序了递减和数组加载指令。
无论如何,我已经向Oracle提交了错误报告:https://bugs.openjdk.java.net/browse/JDK-8054478

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接