Clear Sky Science · it

Impatto dei virtual thread e della garbage collection sull’efficienza energetica delle applicazioni Java per dispositivi IoT alimentati a batteria

· Torna all'indice

Perché i dispositivi minuscoli e le loro batterie contano

Dai braccialetti fitness ai sensori wireless nelle fabbriche, sempre più oggetti intorno a noi sono piccoli computer alimentati da batterie esigue. Quando quelle batterie si esauriscono comportano costi, disagi e rifiuti elettronici. Questo articolo esamina una leva sorprendentemente potente per allungare la durata delle batterie: non una nuova CPU o chimica delle batterie, ma semplicemente software più intelligente. Usando un dispositivo in stile smartwatch come caso di prova, gli autori mostrano come uno stile moderno di programmazione Java può aumentare la durata della batteria di circa il 40 percento senza alcuna modifica hardware.

Come il software di tutti i giorni può sprecare energia silenziosamente

Molti dispositivi alimentati a batteria trascorrono la maggior parte del loro tempo in attesa: aspettando la lettura del battito cardiaco, la pressione di un pulsante o l’invio di un messaggio via Wi‑Fi. I programmi Java tradizionali gestiscono questi compiti usando un thread del sistema operativo per ogni attività e uno stile semplice del tipo “fai questo, poi aspetta”. Pur essendo comodo per i programmatori, questo mantiene il processore sveglio anche quando non ha nulla di utile da fare e scatena inoltre improvvisi picchi di lavoro quando Java libera la memoria non più utilizzata. Su uno smartphone o un portatile collegati alla presa di corrente questo passa quasi inosservato. Su un piccolo orologio che dovrebbe funzionare tutto il giorno con una batteria sottile, quei risvegli e quelle pause extra erodono silenziosamente il tempo di funzionamento.

Un nuovo modo di fare tante cose contemporaneamente

Le versioni moderne di Java introducono due strumenti chiave che cambiano questo quadro. Il primo sono i “virtual thread”, che permettono al runtime Java di far convivere migliaia di attività leggere su poche thread hardware reali. Quando un’attività attende una risposta di rete o la lettura di un sensore, può essere parcheggiata a basso costo senza occupare il processore. Il secondo è una nuova famiglia di pulitori di memoria “a bassa latenza”, come ZGC, che distribuiscono il loro lavoro in fette minuscole invece di fermare tutto il programma per pause prolungate. Insieme, queste caratteristiche consentono al chip di entrare più spesso e per periodi più lunghi in deep sleep, lo stato a consumo più basso disponibile. Invece che essere perennemente mezzo sveglio, il dispositivo si risveglia brevemente per lavorare e poi torna rapidamente a riposare.

Figure 1
Figura 1.

La storia di due smartwatch

Per vedere quanto questo cambi in pratica, i ricercatori hanno costruito due versioni della stessa semplice app per smartwatch. Entrambe le versioni leggevano periodicamente i dati di frequenza cardiaca e li inviavano a un servizio cloud via Wi‑Fi, un modello comune nei dispositivi indossabili e in altri oggetti Internet of Things. La prima versione utilizzava lo stile di codice più vecchio e bloccante con thread tradizionali e garbage collection di default. La seconda adottava uno stile asincrono, guidato da eventi, basato su virtual thread e sul garbage collector ZGC. Hardware, batteria e carico di lavoro sono rimasti identici: una scheda ARM Cortex‑M4 con modulo Wi‑Fi, alimentata da una batteria agli ioni di litio da 1000 mAh, funzionante per 24 ore mentre strumenti di misura precisi registravano la corrente assorbita e l’attività del processore.

Cosa hanno rivelato le misure di consumo

Il progetto legacy si comportava come una persona ansiosa che non smette di passeggiare: il processore restava attivo circa l’85 percento del tempo, anche in attesa della rete, e il dispositivo poteva raggiungere solo uno stato di sleep superficiale. La corrente a riposo oscillava intorno ai 50 milliampere, con picchi netti sopra i 250 milliampere durante l’uso della rete e la pulizia della memoria. Di conseguenza la batteria si esauriva in circa sette ore. Al contrario, il progetto moderno si comportava più come uno sprinter che lavora a scatti e poi riposa profondamente. Chiamate di rete non bloccanti e risvegli basati su timer hanno permesso al chip di passare circa il 70 percento del tempo in deep sleep, con corrente a riposo vicino a 5 milliampere e tracciati di consumo molto più regolari. La corrente media è scesa a circa 100 milliampere e la durata misurata della batteria è salita a circa dieci ore — un miglioramento del 42 percento.

Figure 2
Figura 2.

Lezioni pratiche per dispositivi più sostenibili

Oltre a questo singolo smartwatch, lo studio ricava lezioni generali per chi progetta dispositivi alimentati a batteria. Progetti asincroni guidati da eventi, combinati con metodi di comunicazione leggeri e una programmazione attenta, consentono ai dispositivi di restare davvero spenti tra un burst di attività e l’altro. Le funzionalità moderne di Java rendono più semplice scrivere questo tipo di codice senza sacrificare sicurezza o portabilità, e i test hanno dimostrato che centinaia di attività possono essere gestite con un aumento di consumo solo modesto. In altre parole, l’efficienza energetica non riguarda solo la scelta del chip giusto: riguarda scrivere software che consideri il tempo di sonno come la massima forma di prestazione. Per città intelligenti, monitor medici e sensori domestici, questo approccio può tradursi direttamente in meno sostituzioni di batteria, costi inferiori e meno rifiuti.

Citazione: 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

Parole chiave: Efficienza energetica IoT, durata della batteria, thread virtuali Java, software a basso consumo, dispositivi smartwatch