【问题标题】:Fatal error detected by Java Runtime Environment by a class of a projectJava Runtime Environment 由项目的类检测到的致命错误
【发布时间】:2020-07-15 17:04:31
【问题描述】:

很抱歉打扰,但我在使用 Java 方面还是个新手。我已经创建了一个包含多个类的项目,所有类都运行良好,但是自从我今天再次启动算法后,我收到了此错误消息。

我可以找到由项目的一类引起的错误,但我显然不知道问题出在哪里。我希望有人能够帮助我。

我真的很期待帮助。非常感谢。

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

在 pc=0x0000000064e7b23f、pid=13200、tid=0x00000000000063bc 时出现异常_访问权限 (0xc0000005)

JRE 版本:Java(TM) SE 运行时环境 (8.0_241-b07) (build 1.8.0_241-b07) Java VM:Java HotSpot(TM) 64 位服务器 VM(25.241-b07 混合模式 windows-amd64 压缩 oops) 有问题的框架: V[jvm.dll+0x4cb23f]

无法写入核心转储。默认情况下,在 Windows 的客户端版本上不启用小型转储

包含更多信息的错误报告文件保存为: C:\Users\marti\eclipse-workspace\IGMOTaillardLocNew\hs_err_pid13200.log

编译器回放数据保存为: C:\Users\marti\eclipse-workspace\IGMOTaillardLocNew\replay_pid13200.log

如果您想提交错误报告,请访问: http://bugreport.java.com/bugreport/crash.jsp

---------------  T H R E A D  ---------------

Current thread (0x0000000019cef000):  JavaThread "C2 CompilerThread2" 
daemon [_thread_in_native, id=25532, 
stack(0x000000001a6e0000,0x000000001a7e0000)]

siginfo: ExceptionCode=0xc0000005, reading address 0x0000000000000008

Registers:
RAX=0x0000000000000000, RBX=0x0000000000000000, RCX=0x000000001ca6b570, 
RDX=0x0000000000004000
RSP=0x000000001a7db520, RBP=0x000000001b079d30, RSI=0x000000001ca6b570, 
RDI=0x000000001a7dba60
R8 =0x0000000000000000, R9 =0x000000001e07bfc0, R10=0x000000001a7dba60, 
R11=0x000000001afe4df0
R12=0x000000001acd5a80, R13=0x000000001ce513d8, R14=0x000000001a7db608, 
R15=0x000000001a7db628
RIP=0x0000000064e7b23f, EFLAGS=0x0000000000010206

Top of Stack: (sp=0x000000001a7db520)
0x000000001a7db520:   000000001b07a038 000000001b079d30
0x000000001a7db530:   000000001dd7e290 000000001a7dba60
0x000000001a7db540:   000000001b079d30 000000001a7db678
0x000000001a7db550:   000000001a7db6d0 0000000064e7ca69
0x000000001a7db560:   000000001b07a038 00000000000003d3
0x000000001a7db570:   0000000000000001 0000000019cd9dd0
0x000000001a7db580:   000000001a7dc438 0000000064ec7490
0x000000001a7db590:   000000001d6d8500 0000000019cd9dd0
0x000000001a7db5a0:   0000000019d16cc0 000000001a7db6d0
0x000000001a7db5b0:   0000000019cd9dd0 000000000000002b
0x000000001a7db5c0:   000000001a7dba60 0000000064e7e813
0x000000001a7db5d0:   000000001a7dba60 0000000000000001
0x000000001a7db5e0:   0000000000000001 000000001a7db678
0x000000001a7db5f0:   000000001d6d8550 000000001d6e04e8
0x000000001a7db600:   0000000000247c80 0000000019cd9dd0
0x000000001a7db610:   0000000000000400 000000001b11bbf0 

Instructions: (pc=0x0000000064e7b23f)
0x0000000064e7b21f:   4c 89 64 24 50 4c 8b e0 4c 3b e8 0f 84 4f 01 00
0x0000000064e7b22f:   00 44 8b 43 28 4c 8b 8f f8 09 00 00 4b 8b 1c c1
0x0000000064e7b23f:   48 8b 43 08 48 83 38 00 75 2a 8b 57 28 0f 1f 40
0x0000000064e7b24f:   00 8b 43 28 3b c2 73 0c 8b c8 48 8b 47 30 48 8b 


Register to memory mapping:

RAX=0x0000000000000000 is an unknown value
RBX=0x0000000000000000 is an unknown value
RCX=0x000000001ca6b570 is an unknown value
RDX=0x0000000000004000 is an unknown value
RSP=0x000000001a7db520 is pointing into the stack for thread: 
0x0000000019cef000
RBP=0x000000001b079d30 is an unknown value
RSI=0x000000001ca6b570 is an unknown value
RDI=0x000000001a7dba60 is pointing into the stack for thread: 
0x0000000019cef000
R8 =0x0000000000000000 is an unknown value
R9 =0x000000001e07bfc0 is an unknown value
R10=0x000000001a7dba60 is pointing into the stack for thread: 
0x0000000019cef000
R11=0x000000001afe4df0 is an unknown value
R12=0x000000001acd5a80 is an unknown value
R13=0x000000001ce513d8 is an unknown value
R14=0x000000001a7db608 is pointing into the stack for thread: 
0x0000000019cef000
R15=0x000000001a7db628 is pointing into the stack for thread: 
0x0000000019cef000


Stack: [0x000000001a6e0000,0x000000001a7e0000],  sp=0x000000001a7db520,  
free space=1005k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
code)
V  [jvm.dll+0x4cb23f]
V  [jvm.dll+0x4cca69]
V  [jvm.dll+0x4ce813]
V  [jvm.dll+0x47e1e0]
V  [jvm.dll+0x47f013]
V  [jvm.dll+0x4618a2]
V  [jvm.dll+0xa6a62]
V  [jvm.dll+0xa73af]
V  [jvm.dll+0x2467ef]
V  [jvm.dll+0x29fd2a]
C  [msvcr100.dll+0x21d9f]
C  [msvcr100.dll+0x21e3b]
C  [KERNEL32.DLL+0x17bd4]
C  [ntdll.dll+0x6ced1]


Current CompileTask:
C2:   1511  309       4       
InsertionNeighborhoodLocNew::InsertionNeighborhood (2858 bytes)

for(int x=0; x<nFac; x++) {
    for(int y=0; y<nJob; y++) {

        if(ZZ[x][y][0]==0 && y!=0) {
            flag=y-1;
            ZZf[0][x]=ZZ[x][flag][nMachine-1];
            merkerZZf[0][x]=ZZ[x][flag][nMachine-1];
            break;
        }
            else{
                if(ZZ[x][y][0]==0 && y==0) {
                ZZf[0][x]=0;
                merkerZZf[0][x]=0;
                }
                    else {
                        if(ZZ[x][nJob-1][0]!=0) {
                        flag=nJob-1;
                        ZZf[0][x]=ZZ[x][flag][nMachine-1];
                        merkerZZf[0][x]=ZZ[x][flag][nMachine-1];
                        }
                    }

            }
    }
}

使用这段代码,我基本上是在尝试区分与我正在处理的问题相关的情况。我意识到,因为我删除了带有“merkerZZf”的行,所以我没有导致错误。我其实不知道为什么。

【问题讨论】:

  • 你看过C:\Users\marti\eclipse-workspace\IGMOTaillardLocNew\hs_err_pid13200.log中的错误报告文件吗
  • 是的,但提供的信息对我没有帮助。老实说,我什至不知道问题出在哪里。但如果有帮助,我可以附上日志文件。
  • 从头编译并再次运行。
  • 如果我将项目作为 Debug 运行,则会检测到错误。
  • 你能把它变成一个带有main() 方法和必要变量和数据的自包含类,这样代码可以被其他人运行,但仍然会出错?然后就完美了。预计您不会知道为什么会发生此错误,并且许多 Java 程序员不会理解它。它涉及并非所有人都熟悉的非常低级的机制。我只是在做基础工作(获得最简单的程序来显示错误),直到比我更聪明的人来这里。

标签: java jvm jvm-crash


【解决方案1】:

这是 JVM 中的致命错误,不是你的错。它发生在 JVM 试图将您的 InsertionNeighbourhood 代码编译为本机代码时。您可以尝试更改您的代码(修改结构但保持逻辑相同),这样C2 编译器(见下文)可能不会遇到这种情况,但这也不应该发生在第一名。

它看起来是this bug 的情况,并且由于您显然有更简单的代码,因此您应该提交一个错误报告。不要丢失您当前的代码,即导致错误的代码。


C2 编译器(除了C1)是 JVM 的内部优化编译器,负责分析正在运行的字节码,并为其确定最佳的本机代码。它还可以丢弃以前编译的代码并重新编译它,这对性能很重要。假设(简化)您的代码首先处理只有01 的数据,然后代码被编译成有效的东西。稍后您会得到0-1000000 范围内的数据,而编译后的代码并没有达到应有的效果,因此 JVM 将其丢弃并重新编译以更有效地处理该数据。

不幸的是,与任何代码一样,JVM 也不是bugfree。在这种情况下,编译会导致致命错误和错误。由于编译器会根据代码、数据和其他事物做不同的事情,因此稍微更改代码可能会导致错误出现/消失。

【讨论】:

  • 嗯,非常感谢您的回答。所以我唯一能做的就是报告错误或尝试更改代码?我创建的类包含大量循环。我在某些行中更改了代码,而且我不再遇到错误了。问题是我想在一个真正的 if 子句之后重置一个计数器变量,如果我插入这行只是 xxxcounter=0;我又遇到了。对此有合理的解释吗?
  • @masc3265 是的(该错误的逻辑原因),但它涉及的机制如此之低,以至于仅从 Java 代码中不可能知道它发生的原因。我将用 jvm 标记来标记它,看看它是否引起了 Andrei Pangin 的注意,他几乎是这些事情的首选人。不要忘记保留重现错误的代码副本。如果您想提供帮助,请尝试是否可以缩短代码并使其仍然抛出错误。或者,如果它足够短,可以在问题中发布,请立即加入。
  • @masc3265 或者您可以在问题中发布该类的代码吗?它应该是可以重现的。
  • 非常感谢您的帮助。明天我会尽量缩短代码。由于我是初学者,因此代码并不复杂,只是其中包含大量循环。明天我会继续更新。
  • 我试图通过注释掉几行代码来找到原因。我想我终于找到了导致错误的行。我会更新原来的帖子。是啊,我知道可能有更简单的方法来编写代码。;D
猜你喜欢
  • 2018-05-16
  • 1970-01-01
  • 1970-01-01
  • 2012-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多