Pregunta

Mi Java UI inesperadamente termina y se deshizo de un hs_err_pid archivo.El archivo dice "El accidente ocurrió fuera de la Máquina Virtual de Java en código nativo." JNA es el único código nativo utilizamos.¿Alguien sabe de alguna conocer los problemas o errores con cualquier JNA versión que podría causar esto.He incluido algunos de los contenidos del archivo de error a continuación.

An unexpected error has been detected by Java Runtime Environment:

EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d02bcbd, pid=312, tid=3616

 Java VM: Java HotSpot(TM) Client VM (11.0-b16 mixed mode, sharing windows-x86)<br>
 Problematic frame:
 C  [awt.dll+0x2bcbd]

 If you would like to submit a bug report, please visit:
   http://java.sun.com/webapps/bugreport/crash.jsp
 The crash happened outside the Java Virtual Machine in native code.
 See problematic frame for where to report the bug.

Current thread (0x02acf000):  JavaThread "AWT-Windows" daemon [_thread_in_native, id=3616, stack(0x02eb0000,0x02f00000)]

siginfo: ExceptionCode=0xc0000005, writing address 0xe2789280


Registers:
EAX=0x234f099c, EBX=0x00001400, ECX=0x00000100, EDX=0xe2789280
ESP=0x02eff4a4, EBP=0x00000400, ESI=0x234f099c, EDI=0xe2789280
EIP=0x6d02bcbd, EFLAGS=0x00010206

Top of Stack: (sp=0x02eff4a4)
0x02eff4a4:   02eff500 00000100 02eff584 00000100
0x02eff4b4:   6d0a5697 00000400 00000400 00000100
0x02eff4c4:   00000100 02eff700 02eff500 00000000
0x02eff4d4:   00000000 00000100 041ac3a0 00000100
0x02eff4e4:   00182620 00000400 e2789280 00000000
0x02eff4f4:   00000000 00000100 00000100 00000000
0x02eff504:   00000000 00000100 00000100 00000000
0x02eff514:   00000000 00000004 00000400 00000000

Instructions: (pc=0x6d02bcbd)
0x6d02bcad:   00 00 00 8b 4c 24 14 8b e9 c1 e9 02 8b f0 8b fa
0x6d02bcbd:   f3 a5 8b cd 83 e1 03 f3 a4 8b 74 24 18 8b 4c 24

Stack: [0x02eb0000,0x02f00000],  sp=0x02eff4a4,  free space=317k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [awt.dll+0x2bcbd]

[error occurred during error reporting (printing native stack), id 0xc0000005]

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  sun.awt.windows.WToolkit.eventLoop()V+0
j  sun.awt.windows.WToolkit.run()V+69
j  java.lang.Thread.run()V+11
v  ~StubRoutines::call_stub
¿Fue útil?

Solución

me acaba de golpear ese mismo error, es apppearantly un error en el nuevo Direct3d aceleró funcionalidad Java2D con 1.6.0_11 que sucede con las máquinas con poca RAM de vídeo. Si usted comienza su aplicación con -Dsun.java2d.d3d = false debería funcionar de nuevo. El error de seguimiento a este sol es el siguiente: http://bugs.sun.com/view_bug .do? bug_id = 6788497

Otros consejos

A juzgar por:

Stack: [0x02eb0000,0x02f00000], sp=0x02eff4a4, free space=317k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [awt.dll+0x2bcbd]

(momento en el que el seguimiento de la pila aparentemente explotó) es posible que golpear a un error en la librería AWT.

Sólo porque el único bit de código nativo a sabiendas uso es JNI/lo que sea, no significa que un accidente como el tuyo que se relaciona con él en el lugar o en el tiempo.Hay todo tipo de soporte nativo utilizado en silencio en cualquier JVM/ejecución, y yo estaba en un momento de llegar extraños accidentes causados en la final por la corrupción que había sucedido mucho antes y por la JVM sí mismo.

En mi caso me fue emocionante encontrar errores en el roscado de concurrentes GC en mi nueva y brillante multi-CPU (Niagara) cuadro, que fue dejando todo tipo de bombas que espera irse, y yo había no no JDK código nativo en mi aplicación.

Cuando el Sol de GC de equipo fijo de sus errores (y muy amablemente me ha proporcionado una prueba bootleg VM) mis problemas evaporada (bueno, después de una ronda o dos, naturalmente).

Rgds

Damon

Usted ha golpeado una violación de acceso, lo que significa que un código ha intentado acceder a una dirección que no está permitido, a menudo porque no hay ninguna memoria en la dirección indicada. Los puntos StackTrace a la ubicación que tropezó con el problema, que puede o no ser el origen del problema. La gente a veces se olvidan de esto cuando se habla de código nativo, incluso si son conscientes de ello lo contrario.

He utilizado JNA, pero nunca había tenido ningún problema con él. Si hubo una violación de acceso que fue mi culpa. He aquí algunos consejos simples.

Asegúrese de que su máquina está en buenas condiciones físicas. Pon a prueba tu memoria con Memtest86 + . No sirve de nada la caza de un error de software si se trata de un problema de hardware.

Mira el código utilizando JNA. Tenga en cuenta que incluso si las llamadas en Java no llamar la atención, estás escribiendo código de bajo nivel que puede meterse con nada. Muy posible, el código utilizando el JNA hace algo mal y corrompe la memoria. Por ejemplo, asegúrese de que se utiliza la alineación convención de llamada y los datos correctos. En caso de duda, conseguir a alguien que está cómodo con C (o, más en general, las cosas de bajo nivel) para ayudarle.

No completamente descartar otros factores. Bien puede ser que te encuentras con un error de JVM o algo así, pero tenga cuidado de qué tan probable es esto. Si escucha ruido de cascos, piensa en caballos, no cebras.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top