Our Country Sites: Argentina|Brazil|Chile|Mexico|Peru

Reinicio de equipos

Versión para impresiónVersión para impresiónSend by emailSend by email

Hola, estoy experimentando el que los equipos se reinicien con mi aplicación, mi aplicación es de captura de ventas en campo, los equipos i605 lo traen los vendedores, al aplicación usa el GPS del equipo, almacena las ventas del día capturadas por el usuario y las manda por HTTP al servidor, adicionalmente tiene el puerto usb conectado a una impresora.

Hemos cuidado la posible fuga de memoria, la aplicación usa 1.5-1.9 MB de memoria, para ello, además de hacer optimización de código usamos el Runtime.getRuntime().gc() en varios eventos de la aplicación.

Intuyo que el equipo se reinicia cuando una aplicación le consume recursos cuando la intensidad de la señal es muy variable (de 0 a 75%), me pasó que el equipo se reinició cuando intentaba instalar una aplicación instalada en una zona de señal muy variable, es decir, el equipo se reinició cuando una aplicación java le consumió muchos recursos al mismo tiempo que el equipo buscaba la señal de la red.

Estoy asumiendo que el reinicio del equipo con mi aplicación ocurre cuando un Hilo que está enviando datos, cada x minutos y que marca los datos como enviados en el RecordStore, “choca”, aún cuando se maneja la sentencia “syncronized” con el almacenamiento de un nuevo objeto en el mismo RecordStore y en otros dos.

El hecho es que la aplicación reinicia el equipo en algunas circunstancias, ¿qué sugerencias podrían darme? , ¿Cómo me sugieren que se maneje el almacenamiento de datos en varios RecorStore al mismo tiempo?

agradezco de antemano

Rodolfo

Mira un aplicativo se

Mira un aplicativo se reinicia por que se "desbordo" la memoria o no controlas la cantidad de hilo abiertos, usa esta sentencia para darte cuenta

-- la memoria
System.out.println("useMemory =" + ((Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1024) + " kb");

-- los hilos vivos
System.out.println("threads activos: " + Thread.activeCount());

otro punto
La sentencia syncronized te garantiza que un hilo ejecute ese método pero no garantiza el acceso al único al recurso RMS lo que debes usar es el algoritmo del consumidor y productor...

suerte
Edgard

Solo para complementar el

Solo para complementar el tema de hilos. Es recomendable tener hasta 5 hilos corriendo simultaneamente. En casos extremos he visto programas con 10 hilos abiertos, pero naturalmente la probabilidad de que se caiga es muy alta. En todo caso, puedes revisar tu codigo para que puedas cerrar aquellos hilos que sabes ya no se van a usar, y liberar un poco la carga de tu equipo.

Tambien debes cuidar de no

Tambien debes cuidar de no usar tanto garbage collector, aparte de que toma tiempo de ejecución de la aplicacion, me ha ocurrido que en algunos casos hace que la aplicacion se cuelgue (muy probablemente por el uso de alguna variable en un hilo independiente)

re :tambien

Yo pienso que debes usar el Garbage Collector con sabiduria, pues es util en muchos casos, pero es peligroso en casos como los que menciona Kryor. En todo caso, lo mejor en no dejar hilos abiertos si no se van a usar, y cerrarlos en caso tengamos la certeza de que no se usen. Tambien, tener rutinas que revisen el estado del hilo y que lo levanten si es que voy a volver a usarlo.