Clear Sky Science · fr
Impact des threads virtuels et du ramassage des déchets sur l'efficacité énergétique des applications Java pour les objets IoT alimentés par batterie
Pourquoi les petits appareils et leurs batteries comptent
Des bracelets de fitness aux capteurs sans fil dans les usines, de plus en plus d'objets autour de nous sont de véritables petits ordinateurs alimentés par de minuscules batteries. Quand ces batteries tombent à plat, cela représente des coûts, des tracas et des déchets électroniques. Cet article examine un levier étonnamment puissant pour prolonger ces batteries : pas une nouvelle puce ni une nouvelle chimie de batterie, mais simplement un logiciel plus intelligent. En prenant pour cas d'étude un appareil de type montre connectée, les auteurs montrent comment un style moderne de programmation Java peut augmenter l'autonomie d'environ 40 % sans aucun changement matériel.
Comment le logiciel courant peut gaspiller de l'énergie sans bruit
Beaucoup d'appareils alimentés par batterie passent la majeure partie de leur vie en attente : attendre la lecture d'un rythme cardiaque, qu'un bouton soit pressé ou qu'un message soit envoyé via le Wi‑Fi. Les programmes Java traditionnels gèrent ces tâches en utilisant un thread du système d'exploitation par activité et un style simple « faire ceci, puis attendre ». Bien que cela soit pratique pour les programmeurs, cela maintient le processeur éveillé même quand il n'a rien d'utile à faire, et cela déclenche aussi des pics de travail soudains lorsque Java nettoie la mémoire inutilisée. Sur un téléphone ou un ordinateur portable branché au secteur, cela passe en grande partie inaperçu. Sur une petite montre qui devrait fonctionner toute la journée avec une fine batterie, ces réveils et pauses supplémentaires grignotent silencieusement le temps de fonctionnement.
Une nouvelle manière d'accomplir de nombreuses tâches à la fois
Les versions modernes de Java ajoutent deux outils clés qui changent la donne. Le premier est constitué par les « threads virtuels », qui permettent au runtime Java de gérer des milliers de tâches légères sur seulement quelques threads matériels réels. Lorsqu'une tâche attend une réponse réseau ou la lecture d'un capteur, elle peut être mise en pause à faible coût sans monopoliser le processeur. Le second est une nouvelle famille de collecteurs de mémoire « à faible latence », comme ZGC, qui étalent leur travail en petites tranches au lieu d'arrêter tout le programme pour de longues pauses. Ensemble, ces fonctionnalités permettent à la puce de tomber en veille profonde plus souvent et plus longtemps, ce qui est l'état de consommation le plus faible disponible. Au lieu que l'appareil soit à moitié éveillé en permanence, il se réveille brièvement pour effectuer son travail puis retourne rapidement au repos.

L'histoire de deux montres connectées
Pour évaluer l'impact en pratique, les chercheurs ont construit deux versions de la même application simple de montre connectée. Les deux versions lisaient périodiquement la fréquence cardiaque et l'envoyaient à un service cloud via le Wi‑Fi, un schéma courant dans les wearables et autres objets connectés. La première version utilisait le style de code bloquant plus ancien avec des threads traditionnels et le ramasse-miettes par défaut. La seconde utilisait un style piloté par événements et asynchrone reposant sur les threads virtuels et le collecteur ZGC. Le matériel, la batterie et la charge de travail ont été maintenus identiques : une carte ARM Cortex‑M4 avec module Wi‑Fi, alimentée par une batterie lithium-polymère de 1000 mAh, fonctionnant en continu pendant 24 heures pendant que des instruments précis enregistraient la consommation de courant et l'activité du processeur.
Ce que les mesures de consommation ont révélé
Le design hérité se comportait comme une personne anxieuse qui fait des allers-retours : le processeur restait actif environ 85 % du temps, même en attendant le réseau, et l'appareil n'atteignait qu'un état de veille superficielle. Le courant au repos oscillait autour de 50 milliampères, avec des pointes nettes au‑dessus de 250 milliampères lors de l'utilisation du réseau et du nettoyage de la mémoire. En conséquence, la batterie était déchargée en environ sept heures. En revanche, le design moderne se comportait davantage comme un sprinteur qui travaille par courtes rafales puis se repose profondément. Les appels réseau non bloquants et les réveils basés sur des minuteries ont permis à la puce de passer environ 70 % de son temps en veille profonde, avec un courant au repos proche de 5 milliampères et des traces de puissance beaucoup plus lisses. Le courant moyen est tombé à environ 100 milliampères, et l'autonomie mesurée est passée à environ dix heures — une amélioration de 42 %.

Leçons pratiques pour des appareils plus verts
Au-delà de cette montre unique, l'étude tire des enseignements généraux pour quiconque conçoit des appareils alimentés par batterie. Les architectures pilotées par événements et asynchrones, combinées à des méthodes de communication légères et à une planification soignée, permettent aux appareils de rester véritablement éteints entre les périodes d'activité. Les fonctionnalités modernes de Java facilitent l'écriture de ce type de code sans sacrifier la sécurité ou la portabilité, et les tests ont montré que des centaines de tâches pouvaient être gérées avec une consommation de courant supplémentaire modeste. En d'autres termes, l'efficacité énergétique ne se résume pas à choisir la bonne puce : il s'agit d'écrire un logiciel qui considère le temps passé en sommeil comme la forme la plus élevée de performance. Pour les villes intelligentes, les moniteurs médicaux et les capteurs domestiques, cet état d'esprit peut se traduire directement par moins de changements de batterie, des coûts moindres et moins de déchets.
Citation: Shanjai Kumar, S., Sanjai, B.N., Etheeswar Kaarthi, S. et al. Impact of virtual threads and garbage collection on energy efficiency of Java applications for battery powered IoT devices. Sci Rep 16, 13507 (2026). https://doi.org/10.1038/s41598-026-40112-6
Mots-clés: Efficacité énergétique IoT, autonomie de la batterie, threads virtuels Java, logiciel basse consommation, appareils de type montre connectée