当前位置: 首页 > 知识库问答 >
问题:

Java 1.7/1.8 JIT 编译器坏了?

向锦
2023-03-14

我对GlazeedList 1.8中的一些代码有问题,该代码在java 1.8_05 / 64 bit / FC20下运行时会导致SIGSEGV

我有分解后的输出(-XX: Unlock诊断VMOptions'-XX: CompileCommand=print,*BoyerMooreCaseInsensitiveTextSearchStrategy.indexOf'见下文),但我不知道如何调试它。

因此,任何调试代码的帮助或向何处寻求帮助的提示都将不胜感激。

反汇编代码超过30000个字符。那么,你必须到这里来https://java.net/jira/browse/GLAZEDLISTS-564?focusedCommentId=378982

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

SIGSEGV (0xb) at pc=0x00007fdc2d93bcfc, pid=12092, tid=140582414018304

JRE版本:Java(TM) SE运行时环境(8.0_05-b13)(内部版本1 . 8 . 0 _ 05-B13)Java VM: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 bytes) @ 0x00007fdc2d93bcfc [0x00007fdc2d93baa0 0x25c]

共有1个答案

阎咏思
2023-03-14

这确实是一个即时编译器错误。我已经验证了它存在于JDK 7u67、8u11以及最新的JDK中

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)的数组访问指令上。< br >似乎JIT错误地对减量和数组加载指令进行了重新排序。

无论如何,我已经向Oracle提交了错误报告:https://bugs.openjdk.java.net/browse/JDK-8054478

 类似资料:
  • java主页: C:\users\satish.marathe>set java_home java_home=C:\construction\tools\IBM_SDK80 java版本给我: Edit1: 我忘了包含Maven-version的输出,所以这里是: C:>MVN-版本Apache Maven 3.2.5(12A6B3ACB947671F09B81F49094C53F426D8CE

  • 编译器 编译器将用一种语言编写的代码转换为另一种语言,而无需更改程序的含义。还期望编译器应该使目标代码高效且在时间和空间方面得到优化。 编译器设计原理提供了翻译和优化过程的深入视图。编译器设计涵盖了基本的转换机制以及错误检测与恢复。它包括词法,语法和语义分析作为前端,以及代码生成和优化作为后端。 为什么要学习编译器设计? 计算机是软件和硬件的平衡组合。硬件只是机械设备的一部分,其功能由兼容的软件控

  • 问题内容: 在构建战争文件时,我正在将一组罐子从某个位置复制到战争中的文件夹中。虽然文件确实会被复制,但是我认为它们已损坏,因为在战争之外被带出的jar的相同类文件会使用调试器打开,而从war文件中取出后不会打开。 这是我的战争pom.xml的一部分,我在其中复制了罐子 SomeSourceDirectory 有一些jar和其他文件结果是:myWar / somefolder / a.jar,但是

  • 词法分析器 语法分析器 语义分析及中间代码生成 代码优化 代码生成

  • 在你制作安装程序时创建了你的脚本后所要做的第二件事就是编译你的脚本。MakeNSIS.exe 就是 NSIS 编译器。它会载入你的脚本,解析并创建你的安装程序。 要编译你需要在你的 .nsi 文件上点右键并选择“Compile NSIS Script”或“Compile NSIS Script (Choose Compressor)”。这样将会使用 MakeNSISw 来引导并调用 MakeNSI