java - 异常访问冲突 Java?

标签 java crash jvm java-native-interface crash-dumps

我目前正在编写一个 JNI 项目,在尝试运行我的 Java 代码时收到以下错误日志。它告诉我有问题的框架是一个 jvm.dll 框架,并且在尝试隔离问题时,我试图弄清楚我的问题到底在哪里(在 JVM 与我的 native 代码中)我附加了线程日志的一部分,如果需要可以附加其余部分。我还尝试重新安装 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 00000000

Instructions: (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 2a

Stack: [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

最佳答案

为了使您的调试更容易,我们可以排除 JVM 有问题(在 99.99% 的情况下这不是问题),请查看您的代码。首先简单地停止您的 JNI 调用并查看机制是否正确完成。然后在仔细检查所有内存分配和释放之后,开始慢慢添加代码片段。您可以使用调试器来访问您的代码,也可以这样做。

也许您可以将您的 DLL 缩减为产生问题的最小代码片段,然后将代码发布到此处供其他人运行并在遇到问题时查看它?

如果有帮助,导致崩溃的方法是 optimalSideTwist2。这可能不是导致问题的方法。如果您在不同的方法之间分配内存,您可能会释放不属于您的内存,或者您可能会覆盖内存。

关于java - 异常访问冲突 Java?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3500378/

相关文章:

objective-c - iOS7 上的 UIAlertView 崩溃私有(private)方法

java - 堆叠高度不一致 1 !=2

java - 基于 CPU 类型的 JVM 性能

java - 我是否保证每个使用 JNI 的进程只有一个 JavaVM?

java - GridBagLayout对齐

java - Hamcrest:如何测试一个对象的多个属性

java - HTML类型字符串解析问题!

java - Android 开发 - 编译正常,运行时崩溃

c++ - 字符串数组导致 C++ 程序崩溃

java - 动态更改 GWT CellTable 的样式,以在视觉上将其标记为已禁用