-
Arrêter une execution
Bonjour,
J'utilise JVM explorer sous Eclipse pour monitorer un code. A la fin de son execution (je dis fin car la dernière ligne du main a été executée, et car eclipse me montre le run comme étant terminé), JVM Explorer me montre 4 threads encore en vie:
Main, ReferenceHandler, Finalizer et java-sdk-http-connection-reaper.
Les 3 derniers sont dans un état waiting ou timed_waiting, dans les méthodes wait ou sleep, avec un lock détenu par personne. Main est dans l'état runnable.
Je vois la mémoire continuer à bouger dans le temps. Du coup je me demande:
1) Est-ce que JVM explorer maintient artificiellement la JVM en vie - ce que je vois ne se produirait pas sans monitoring ?
2) Ais-je mal terminé mon programme ? Suis-je censé arrêter ces threads moi même, ou appeler une méthode du genre sys.exit ?
Merci d'avance pour vos lumières.
-
Lorsqu'un programme arrive a sa dernière ligne d’exécution, la JVM continuera de tourner tant qu'il existe au moins 1 thread non-daemon. Donc oui, si ces threads continuent d'exister indéfiniment, tes seuls moyens de quitter ton programme sont d'invoquer System.exit() ou de terminer manuellement tous les threads non-daemon restants, ce qui peut mener, en théorie, a des soucis dans les deux cas si ces threads sont en train de réaliser des actions critiques.