异常访问冲突 Java?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/3500378/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Exception Access Violation Java?
提问by sparkFinder
I'm currently writing a JNI project where I'm getting the following error log when trying to run my Java code. It tells me that the problematic frame is a jvm.dll one, and in trying to isolate the problem, I'm trying to work out where exactly my problem is (in the JVM vs. my native code) I've attached the thread section of the log, and can append the rest if needed. I also tried reinstalling the JVM.
我目前正在编写一个 JNI 项目,在尝试运行我的 Java 代码时,我收到以下错误日志。它告诉我有问题的框架是 jvm.dll 框架,并且在尝试隔离问题时,我试图找出我的问题究竟出在哪里(在 JVM 与我的本机代码中)我附加了线程日志的一部分,如果需要,可以附加其余部分。我也尝试重新安装JVM。
A fatal error has been detected by the Java Runtime Environment:
EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d8fefb5, pid=720, tid=3128
JRE version: 6.0_21-b07 Java VM: Java HotSpot(TM) Client VM (17.0-b17 mixed mode, sharing windows-x86 ) Problematic frame: V [jvm.dll+0xfefb5]
--------------- T H R E A D ---------------
Current thread (0x02189000): JavaThread "main" [_thread_in_vm, id=3128, stack(0x02120000,0x02170000)]
siginfo: ExceptionCode=0xc0000005, reading address 0x00000000
Registers: EAX=0x00000000, EBX=0x02189118, ECX=0x02189000, EDX=0x6da2f76c ESP=0x0216fa84, EBP=0x0216facc, ESI=0x02189000, EDI=0x00000000 EIP=0x6d8fefb5, EFLAGS=0x00010246
Top of Stack: (sp=0x0216fa84) 0x0216fa84: 0216fb38 0216fae4 34497370 0216faa0 0x0216fa94:
6d8010e0 02189000 0216fd34 0216fad0 0x0216faa4: 6d906d09 02189000 00000006 00000004 0x0216fab4:
0216fb38 0216fae8 02189000 02189a08 0x0216fac4: 000004c4 6da2f76c 0216faf0 57669c1a 0x0216fad4:
02189118 0216fbf0 00000000 0216fb04 0x0216fae4: 0216fb04 cccccccc 0216fb04 0216fb38 0x0216faf4:
576699d3 02189118 0216fbf0 00000000Instructions: (pc=0x6d8fefb5) 0x6d8fefa5: 00 00 00 74 08 8d 4d f0 e8 1e 20 09 00 8b 7d 10 0x6d8fefb5:
8b 07 c7 45 e0 0c 00 00 00 8b 48 08 0f b7 51 2aStack: [0x02120000,0x02170000], sp=0x0216fa84, free space=13e0216f568k Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) V [jvm.dll+0xfefb5] C [PNMain.dll+0x19c1a] C [PNMain.dll+0x199d3] j PNMain.optimalSideTwist2(ILjava/lang/String;Lvtk/vtkPolyDataAlgorithm;DDDDDD)[D+0 j PNMain.rotateLeftRight(Z)[D+282 j PNMain.main([Ljava/lang/String;)V+92 v ~StubRoutines::call_stub V [jvm.dll+0xf3abc] V [jvm.dll+0x1865b1] V [jvm.dll+0xf3b3d] V [jvm.dll+0xfd385] V [jvm.dll+0x104fdd] C [javaw.exe+0x2155] C [javaw.exe+0x8614] C [kernel32.dll+0x13677] C [ntdll.dll+0x39d42] C [ntdll.dll+0x39d15]
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code) j PNMain.optimalSideTwist2(ILjava/lang/String;Lvtk/vtkPolyDataAlgorithm;DDDDDD)[D+0 j PNMain.rotateLeftRight(Z)[D+282 j PNMain.main([Ljava/lang/String;)V+92 v ~StubRoutines::call_stub
Java 运行时环境检测到一个致命错误:
EXCEPTION_ACCESS_VIOLATION (0xc0000005) 在 pc=0x6d8fefb5,pid=720,tid=3128
JRE 版本:6.0_21-b07 Java VM:Java HotSpot(TM) Client VM(17.0-b17 混合模式,共享 windows-x86) 问题框架:V [jvm.dll+0xfefb5]
- - - - - - - - 线 - - - - - - - -
当前线程 (0x02189000): JavaThread "main" [_thread_in_vm, id=3128, stack(0x02120000,0x02170000)]
siginfo:ExceptionCode=0xc0000005,读取地址0x00000000
寄存器:EAX=0x00000000,EBX=0x02189118,ECX=0x02189000,EDX=0x6da2f76c ESP=0x0216fa84,EBP=0x0216facc,ESI=0x021890000000000000000000000000000000000006
栈顶的:(SP = 0x0216fa84)0x0216fa84:0216fb38 0216fae4 34497370 0216faa0 0x0216fa94:
6d8010e0 02189000 0216fd34 0216fad0 0x0216faa4:6d906d09 02189000 00000006 00000004 0x0216fab4:
0216fb38 0216fae8 02189000 02189a08 0x0216fac4:000004c4 6da2f76c 0216faf0 57669c1a 0x0216fad4:
02189118 0216fbf0 00000000 0216fb04 0x0216fae4:0216fb04 CCCCCCCC 0216fb04 0216fb38 0x0216faf4:
576699d3 02189118 0216fbf0 00000000指令:(pc=0x6d8fefb5) 0x6d8fefa5: 00 00 00 74 08 8d 4d f0 e8 1e 20 09 00 8b 7d 10 0x6d8fefb5:
8b 07 c7 450007 0c7 45007 007 b 07 e8 1e堆栈:[0x02120000,0x02170000],sp=0x0216fa84,可用空间=13e0216f568k 本机帧:(J=编译的Java代码,j=解释的,Vv=VM代码,C=本机代码)V [jvm.dll+0xfefb5] C PNMain.dll+0x19c1a] C [PNMain.dll+0x199d3] j PNMain.optimalSideTwist2(ILjava/lang/String;Lvtk/vtkPolyDataAlgorithm;DDDDDD)[D+0 j PNMain.rotateLeftRight(Z)[D+282 j PNMain ([Ljava/lang/String;)V+92 v ~StubRoutines::call_stub V [jvm.dll+0xf3abc] V [jvm.dll+0x1865b1] V [jvm.dll+0xf3b3d] V [jvm.dll+0xfd385] V [jvm.dll+0x104fdd] C [javaw.exe+0x2155] C [javaw.exe+0x8614] C [kernel32.dll+0x13677] C [ntdll.dll+0x39d42] C [ntdll.dll+0x39d15]
Java框架:(J=编译的Java代码,j=解释的,Vv=VM代码) j PNMain.optimalSideTwist2(ILjava/lang/String;Lvtk/vtkPolyDataAlgorithm;DDDDDD)[D+0 j PNMain.rotateLeftRight(Z)[D+第282话
采纳答案by Romain Hippeau
To make your debugging easier we can rule out that the JVM has a problem (in 99.99 % of cases it is not the problem), Look in your code. Start by simply stubbing out your JNI call and seeing if the mechanics are properly done. Then start adding pieces of code slowly, after you have inspected all memory allocations and deallocations carefully. You could use a debugger to access your code and go that way also.
为了让您的调试更容易,我们可以排除 JVM 有问题(在 99.99% 的情况下不是问题),查看您的代码。首先简单地删除您的 JNI 调用并查看机制是否正确完成。在仔细检查所有内存分配和释放之后,然后开始缓慢添加代码段。您可以使用调试器访问您的代码,也可以这样做。
Maybe you could reduce your DLL to the smallest piece of code that produces the problem and post the code here for others to run it and look at it if you are stuck ?
也许您可以将您的 DLL 减少到产生问题的最小代码段,并在此处发布代码供其他人运行并在您遇到问题时查看它?
The method that caused the crash is optimalSideTwist2 if that helps. That may not be the method that caused the problem. If you are alocating memory between different methods you might be freeing memory that is not yours, or you may be overwriting memory.
如果有帮助,导致崩溃的方法是optimalSideTwist2。这可能不是导致问题的方法。如果您在不同的方法之间分配内存,您可能会释放不属于您的内存,或者您可能会覆盖内存。

