Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > javaw.exe 100%

Hola,
Lo primero de todo es que estoy aprendiendo, acabo de hacer un programa muy simple, que según la hora programada por el cliente, este programa ejecuta una serie de rutinas.
Subir un archivo a un ftp, o abrir un access y enviar por correo una estadística.
Hasta aquí todo bien,
El problema es que el programa ocupa el 100% de recursos del ordenador y esto es lo que me preocupa.
Mediante un while, creo un bucle donde se comprueba la hora actual del equipo, en caso de coincidir con alguna de las tareas programadas, esta se ejecuta, al final del bucle hay una pausa de un segundo.

Puede ser este bucle el causante del programa? , de ser así, cual sería la manera apropiada de hacer esto?

Gracias

septiembre 28, 2015 | Registered Commenterrayban

Buenas,

La verdad es que sin ver el código, todo lo que te diga es imaginación mía.
Supongo que comprobaras la hora en el bucle sin esperar ningun tiempo de control. ESto significa que aproximadamente, esto comprueba la hora una vez cada milisegundo, lo que significa que lo mira 1000 veces al segundo... entonces si, esto apunta a que el while no tiene fin, y que encima ejecuta muchas instrucciones.

Te recomendaría (si lo que he dicho es tu caso), que utilizases un timer o temporizador.
En la siguiente url, te viene explicado como utlizarlo. Con lo que viene en esta web, y en el propio api de java, seguro, que lo consigues. Eso si, trata de mirar una vez cada minuto o así. Y pon un limite en el while; por ejemplo, si la última tarea se ha de ejecutar a las cinco; pon de condición de ruptura en el while, que si la hora actual es mayor que las cinco de la tarde, salga del bucle.

http://www.chuidiang.com/java/timer/timer.php

Ya nos contarás si lo consigues! suerte!

Saludos,

Oldskultxo.

septiembre 28, 2015 | Registered Commenteroldskultxo

Lo que te dice oldskutxo es, sin duda, la razón del alto uso de CPU que registra tu aplicación. Si el bucle se está ejecutando 1000 veces por segundo, 500 o 100000 es algo que habría que comprobar (e irrelevante, por otra parte) y que dependerá de la potencia del equipo. Ten en cuenta que un procesador actual funciona a velocidades de reloj entre 1 y 2 GHz, esto es, 1.000.000 ciclos por segundo, de manera que si algunas instrucciones en Java se traducen en unos 20 ciclos, hacen falta 30 instrucciones y gracias a los pipelines de la CPU se superponen varias instrucciones a la vez, bien podríamos hablar de unos 400 ciclos para ejecutar una iteración del bucle, y entonces se estaría ejecutando unas 2.500 veces por segundo. Lo importante es que se va a ejecutar prácticamente todo lo deprisa que lo permite la CPU y el resto de tareas del SO (y, si la CPU es multinúcleo, seguramente habrá un núcleo dedicado en exclusiva a tu aplicación).

También es importante hacer notar que este problema no se debe a que lo hayas programado en Java, sino a cómo has escrito el bucle. En general, cualquier lenguaje de programación incurriría en un uso muy alto de CPU con bucles que hacen pocas operaciones simples de manera infinita, como has hecho tú.

septiembre 28, 2015 | Registered Commenterrickiees

http://www.mkyong.com/java/quartz-scheduler-example/

octubre 23, 2015 | Unregistered CommenterChavitoDel8