簡體   English   中英

Java Runtime Environment 由項目的 class 檢測到的致命錯誤

[英]Fatal error detected by Java Runtime Environment by a class of a project

很抱歉打擾,但我在使用 Java 方面還是個新手。 我創建了一個包含多個類的項目,所有類都運行良好,但是自從我今天再次啟動算法后,我收到了此錯誤消息。

我可以找到錯誤,這是由項目的一個 class 引起的,但我顯然不知道問題出在哪里。 我希望有人能夠幫助我。

我真的很期待幫助。 非常感謝。

Java 運行時環境檢測到一個致命錯誤:

EXCEPTION_ACCESS_VIOLATION (0xc0000005) 在 pc=0x0000000064e7b23f,pid=13200,tid=0x00000000000063bc

JRE版本:Java(TM)SE運行時環境(8.0_241-B07)(構建1.8.0_241-B07)ZD523878880E1EA228172D3759213759213819Z VM:框架: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”的行,所以我沒有導致錯誤。 我其實不知道為什么。

這是 JVM 中的一個致命錯誤,這不是你的錯。 當 JVM 試圖將您的InsertionNeighbourhood代碼編譯為本機代碼時,就會發生這種情況。 可以嘗試更改您的代碼(修改結構但保持邏輯相同),以便C2編譯器(見下文)可能不會遇到這種情況,但這也是不應該首先發生的事情。

它看起來是這個 bug的一個案例,因為你顯然有更簡單的代碼,你應該提交一個 bug 報告。 不要丟失您當前的代碼,即導致錯誤的代碼。


C2編譯器(除了C1之外)是 JVM 的內部優化編譯器,負責分析正在運行的字節碼,並為其確定最佳的本機代碼 它還可以丟棄以前編譯的代碼並重新編譯它,這對性能很重要。 假設(簡化)您的代碼首先處理只有01的數據,然后代碼被編譯為有效的東西。 稍后您會得到0-1000000范圍內的數據,並且編譯后的代碼沒有達到應有的效果,因此 JVM 將其丟棄並重新編譯以更有效地處理該數據。

不幸的是,與任何代碼一樣, JVM也不是沒有錯誤的。 在這種情況下,編譯會導致致命錯誤和錯誤。 由於編譯器會根據代碼、數據和其他事物執行不同的操作,因此稍微更改代碼可能會導致錯誤出現/消失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM