cma*_*sen 8 java jit jvm fatal-error
我在使用GlazedList 1.8中的一些代码时遇到问题,这些代码在java 1.8_05/64 bit/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
Run Code Online (Sandbox Code Playgroud)
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字节)@ 0x00007fdc2d93bcfc [0x00007fdc2d93baa0 + 0x25c]
这确实是一个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]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
崩溃发生在数组访问指令中,其中数组偏移是非法的(0xffffffff).
似乎JIT错误地重新排序减量和数组加载指令.
无论如何,我已经向Oracle提交了错误报告:https://bugs.openjdk.java.net/browse/JDK-8054478
| 归档时间: |
|
| 查看次数: |
798 次 |
| 最近记录: |