Abstract
IoT devices are increasingly battery-powered, making energy efficiency a primary design concern. This work investigates how Java’s concurrency model (traditional OS threads vs. Virtual Threads) and garbage collection strategies affect battery lifetime. Using a smartwatch case study, we demonstrate that a modern, asynchronous design using Virtual Threads and ZGC achieves a 42% improvement in battery lifetime (7.0 h → 10.0 h) compared to a traditional blocking implementation. This improvement is driven by a 55% reduction in CPU active time and a 7 × increase in deep-sleep residency. This paper provides quantitative evidence and practical guidelines for building energy-efficient Java applications on constrained embedded devices.