【问题标题】:Java 1.7/1.8 JIT Compiler broken?Java 1.7/1.8 JIT 编译器坏了?
【发布时间】:2014-09-29 09:05:30
【问题描述】:

我对 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 运行时环境 (8.0_05-b13) (build 1.8.0_05-b13) Java 虚拟机:Java HotSpot(TM) 64 位服务器虚拟机(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 编译器被破坏的问题似乎具有误导性。这似乎是一个长期存在的问题。 java.net/jira/browse/…
  • 是的,禁用 JIT 编译可以解决问题。而且1.7.x中也存在这个问题
  • 你搜索过bug数据库/报告给Oracle了吗?

标签: java jvm fatal-error jit


【解决方案1】:

这确实是一个 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

【讨论】:

    猜你喜欢
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 2018-09-05
    • 2021-03-25
    • 2010-10-06
    相关资源
    最近更新 更多