Clear Sky Science · nl

Invloed van virtuele threads en garbage collection op de energie-efficiëntie van Java-toepassingen voor batterijgevoede IoT-apparaten

· Terug naar het overzicht

Waarom kleine gadgetjes en hun batterijen ertoe doen

Van fitnessbanden tot draadloze sensoren in fabrieken: steeds meer alledaagse voorwerpen zijn in feite kleine computers die op kleine batterijen draaien. Als die batterijen leeg raken, leidt dat tot kosten, ongemak en elektronisch afval. Dit artikel onderzoekt een verrassend krachtig middel om die batterijen langer mee te laten gaan: niet een nieuwe chip of batterijchemie, maar gewoon slimmer geschreven software. Met een smartwatch-achtig apparaat als casus laten de auteurs zien hoe een moderne Java-programmeerstijl de batterijduur met ongeveer 40 procent kan verlengen zonder de hardware aan te passen.

Hoe alledaagse software stilletjes energie kan verspillen

Veel batterijgevoede apparaten brengen het grootste deel van hun tijd wachtend door: wachtend op een hartslagmeting, op het indrukken van een knop of op het verzenden van een bericht via Wi‑Fi. Traditionele Java-programma’s behandelen dit met één besturingssysteemthread per activiteit en een eenvoudige “doe dit, wacht dan” aanpak. Dat is programmeurvriendelijk, maar houdt de processor wakker zelfs wanneer er niets nuttigs te doen is, en veroorzaakt ook plotselinge werkpieken wanneer Java ongebruikt geheugen opruimt. Op een telefoon of laptop die aan het stroomnet hangt valt dat meestal niet op. Op een klein horloge dat een hele dag op een slanke batterij moet lopen, knabbelen die extra wekkers en onderbrekingen stilletjes aan de operationele tijd.

Een nieuwe manier om veel dingen tegelijk te doen

Moderne versies van Java voegen twee belangrijke hulpmiddelen toe die dit beeld veranderen. De eerste zijn “virtuele threads”, waarmee de Java-runtime duizenden lichte taken bovenop slechts een paar echte hardwarethreads kan afhandelen. Wanneer een taak wacht op een netwerkantwoord of een sensorlezing, kan deze goedkoop geparkeerd worden zonder de processor te blokkeren. De tweede is een nieuwe familie van “laag-latentie” geheugen-opruimers, zoals ZGC, die hun werk in kleine stukjes spreiden in plaats van het hele programma lange tijd stil te leggen. Samen laten deze functies de chip vaker en langer in diepe slaap gaan, de laagst beschikbare energiestaat. In plaats van dat het apparaat de hele tijd halfwakker is, wordt het kort wakker om te werken en keert het snel terug naar rust.

Figure 1
Figure 1.

Een verhaal van twee smartwatches

Om te zien hoeveel verschil dit in de praktijk maakt, bouwden de onderzoekers twee versies van dezelfde eenvoudige smartwatch-app. Beide versies lazen periodiek hartslaggegevens en stuurden die via Wi‑Fi naar een cloudservice, een veelvoorkomend patroon in wearables en andere Internet of Things-apparaten. De eerste versie gebruikte de oudere, blokkerende code-stijl met traditionele threads en standaard garbage collection. De tweede versie gebruikte een event-gedreven, asynchrone stijl gebaseerd op virtuele threads en de ZGC-opruimer. Hardware, batterij en workload bleven identiek: een ARM Cortex‑M4 bord met een Wi‑Fi-module, gevoed door een 1000 mAh lithium-polymeerbatterij, continu draaiend gedurende 24 uur terwijl nauwkeurige instrumenten stroomafname en processoractiviteit registreerden.

Wat de stroommetingen aan het licht brachten

Het legacy-ontwerp gedroeg zich als een onrustig persoon die voortdurend heen en weer loopt: de processor bleef ongeveer 85 procent van de tijd actief, zelfs terwijl er op netwerkantwoorden werd gewacht, en het apparaat kon slechts in een oppervlakkige slaaptoestand terechtkomen. De ruststroom schommelde rond de 50 milliampère, met scherpe pieken boven 250 milliampère tijdens netwerkgebruik en geheugenopschoning. Daardoor raakte de batterij in ongeveer zeven uur leeg. Het moderne ontwerp gedroeg zich meer als een sprinter die in korte uitbarstingen werkt en daarna diep rust. Niet-blokkerende netwerkoproepen en timer-gebaseerde wekkers lieten de chip ongeveer 70 procent van de tijd in diepe slaap doorbrengen, met een ruststroom rond 5 milliampère en veel vloeiendere stroomprofielen. De gemiddelde stroom daalde naar ongeveer 100 milliampère en de gemeten batterijduur steeg tot ongeveer tien uur — een verbetering van 42 procent.

Figure 2
Figure 2.

Praktische lessen voor groenere apparaten

Buiten deze ene smartwatch haalt de studie algemene lessen voor iedereen die batterijgevoede apparaten bouwt. Event-gedreven, asynchrone ontwerpen, gecombineerd met lichte communicatiemethoden en zorgvuldige planning, laten apparaten echt uitstaan tussen activiteitspieken. Moderne Java-functies maken het eenvoudiger zulke software te schrijven zonder veiligheid of draagbaarheid op te geven, en de tests lieten zien dat honderden taken met slechts een bescheiden extra stroomverbruik te hanteren waren. Met andere woorden: energie-efficiëntie gaat niet alleen over het kiezen van de juiste chip — het gaat erom software te schrijven die de tijd die wordt besteed aan slapen als de hoogste vorm van prestaties behandelt. Voor slimme steden, medische monitoren en huissensoren kan die instelling direct leiden tot minder batterijwissels, lagere kosten en minder afval.

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

Trefwoorden: IoT energie-efficiëntie, batterijduur, Java virtuele threads, laag-energetische software, smartwatch-apparaten