2011-07-03 12 views
16

He estado trabajando en un proyecto de Java por año. Mi código había estado funcionando bien durante meses. Hace unos días, actualicé el Java SDK a la versión más reciente 1.6.0_26 en mi Mac (Snow Leopard 10.6.8). Después de la actualización, ocurre algo muy extraño. Cuando corro algunas de las clases, me sale este error:Acceso a la memoria no válida de la ubicación en Java

acceso a memoria no válida de la ubicación 0x202 0x202 = RIP

Pero, si les funciono con -Xint (interpretada) funcionan, pero el trabajo lento multa. Obtengo ese problema en las clases donde uso operadores bit a bit (bitboards para el juego Othello). No puedo poner ningún código aquí porque no obtengo un error, excepción o algo similar. Acabo de recibir ese mensaje molesto.

¿Es normal que el código no se ejecute sin -Xint pero funciona con él? ¿Que debería hacer?

Gracias de antemano

+1

muy extraño. ¿Esto se muestra como una excepción? ¿Un error de compilación? ¿Algo más? ¿Hay más texto en el mensaje de error? ¿Indica un número de línea?¿El programa sigue funcionando o explota? ¿Sucede cada vez que ejecutas tu código sin -Xint? ¿Estás usando Swing para tu GUI? ¿Hay algún potencial para un problema de concurrencia? –

+2

No se muestra como una excepción, solo un mensaje. Compila bien. Ese es el único mensaje, a veces muestra una dirección de memoria diferente, pero solo el mismo mensaje. El programa deja de funcionar. No estoy usando Swing, pero estoy usando hilos. Podría ser un problema de concurrencia, pero ¿por qué no funciona cuando se ejecuta como se interpreta? Esa es la parte molesta. –

+3

Parece un error en la máquina virtual. Trate de aislar el problema cortando su programa (elimine las cosas que cree que no son esenciales, si no vuelve a ocurrir, deshaga y pruebe con otra parte. Si todavía ocurre, repita). Luego envíe un error a quien haya producido su JRE. –

Respuesta

4

Cuando una JVM se inicia rompiendo de esa manera, es una señal de que algo se ha roto modelo de ejecución de la JVM.

¿Su aplicación incluye algún código nativo? ¿Utiliza bibliotecas de terceros con componentes de código nativo? Si ninguno de los dos es cierto, entonces existe la posibilidad de que se trate de un error en el puerto Apple de la JVM. Podría ser un error del compilador JIT o un error en alguna biblioteca de código nativo de JVM.

¿Qué puedes hacer con un error como ese?

No mucho.

  • Reduzca su aplicación cortando progresivamente bits hasta que tenga una pequeña caja de prueba que presente el problema.
  • Basado en el caso de prueba, vea si hay alguna forma empírica de evitar el problema.
  • Envíe un informe de error a Apple con el caso de prueba.
+0

No, mi aplicación no incluye ningún código nativo y no estoy usando ninguna biblioteca de terceros. Seguiré tus sugerencias, veamos cuánto tiempo me lleva encontrar el error. ¡Gracias! –

0

También verifique que está compilando la GUI en the event dispatch thread y nunca actualizando un componente GUI desde ninguna otra cadena.

Los errores relacionados son muy difíciles de reproducir, pero el cambio asociado con el tiempo alterado es sugerente.

4

Acabo de enterarme de esta situación y resultó estar relacionado con un fragmento de código que estaba serializando un objeto JSON con una referencia cíclica a sí mismo. Eliminé el ciclo y el error desapareció. Sospecho que esto está relacionado con un error de desbordamiento de memoria que ahora se maneja de manera diferente con las nuevas JVM en Mac OSX. En este caso, estaba ejecutando Mac OSX 10.7.

Para completar los errores que recibía eran:

Invalid access of stack red zone 0x10e586d30 rip=0x10daabba6 
Bus error: 10 

Y:

Invalid memory access of location 0x10b655890 rip=0x10a8baba6 
Segmentation fault: 11 
+0

tuve un problema similar al usar jackson. resolvió mi problema usando @JsonIgnore – Yevgeniy

0

favor, compruebe si /etc/hosts está vacío y verificar que se incluyen estas configuraciones:

127.0.0.1  localhost 
255.255.255.255 broadcasthost 
::1    localhost 
fe80::1%lo0  localhost 
Cuestiones relacionadas