Clear Sky Science · pt

Impacto de threads virtuais e coleta de lixo na eficiência energética de aplicações Java para dispositivos IoT alimentados por bateria

· Voltar ao índice

Por que gadgets minúsculos e suas baterias importam

De pulseiras de atividades a sensores sem fio em fábricas, cada vez mais objetos ao nosso redor são pequenos computadores rodando com baterias diminutas. Quando essas baterias acabam, isso significa custo, incômodo e lixo eletrônico. Este artigo examina uma alavanca surpreendentemente poderosa para fazer essas baterias durarem mais: não um novo chip ou química de bateria, mas simplesmente software mais inteligente. Usando um dispositivo no estilo smartwatch como caso de teste, os autores mostram como um estilo moderno de programação em Java pode estender a vida da bateria em cerca de 40% sem alterar o hardware.

Como o software cotidiano pode desperdiçar energia silenciosamente

Muitos dispositivos alimentados por bateria passam a maior parte do tempo aguardando: esperando que um batimento cardíaco seja lido, que um botão seja pressionado ou que uma mensagem seja enviada via Wi‑Fi. Programas Java tradicionais tratam essas tarefas usando uma thread do sistema operacional por atividade e um estilo simples de "faça isto, depois espere". Embora isso seja fácil para programadores, mantém o processador acordado mesmo quando não há nada útil a fazer, e também provoca explosões súbitas de trabalho quando o Java limpa memória não utilizada. Em um telefone ou laptop conectado à tomada, isso passa em grande parte despercebido. Em um relógio minúsculo que deveria funcionar o dia todo com uma bateria fina, essas ativações extras e pausas corroem silenciosamente o tempo de operação.

Uma nova forma de fazer muitas coisas ao mesmo tempo

Versões modernas do Java adicionam duas ferramentas-chave que mudam esse quadro. A primeira são as "threads virtuais", que permitem à runtime Java gerenciar milhares de tarefas leves sobre apenas algumas threads de hardware reais. Quando uma tarefa aguarda uma resposta de rede ou uma leitura de sensor, ela pode ser estacionada de forma barata sem ocupar o processador. A segunda é uma nova família de coletores de memória de "baixa latência", como o ZGC, que distribuem seu trabalho em fatias pequenas em vez de parar todo o programa por longas pausas. Juntas, essas características permitem que o chip entre com mais frequência e por períodos mais longos em sono profundo, que é o estado de consumo mais baixo disponível. Em vez de o dispositivo ficar meio acordado o tempo todo, ele acorda brevemente para trabalhar e então retorna rapidamente ao repouso.

Figure 1
Figure 1.

Um conto de dois smartwatches

Para ver quanto isso faz diferença na prática, os pesquisadores construíram duas versões do mesmo aplicativo simples de smartwatch. Ambas as versões liam periodicamente dados de frequência cardíaca e os enviavam para um serviço em nuvem via Wi‑Fi, um padrão comum em wearables e outros dispositivos da Internet das Coisas. A primeira versão usou o estilo antigo e bloqueante de código com threads tradicionais e coleta de lixo padrão. A segunda versão usou um estilo assíncrono orientado a eventos, construído sobre threads virtuais e o coletor ZGC. Hardware, bateria e carga de trabalho foram mantidos idênticos: uma placa ARM Cortex‑M4 com um módulo Wi‑Fi, alimentada por uma bateria de polímero de lítio de 1000 mAh, rodando continuamente por 24 horas enquanto instrumentos precisos registravam consumo de corrente e atividade do processador.

O que as medições de consumo revelaram

O projeto legado comportou-se como uma pessoa ansiosa que fica andando: o processador permaneceu ativo cerca de 85% do tempo, mesmo enquanto aguardava a rede, e o dispositivo só conseguia atingir um estado de sono raso. A corrente de ociosidade ficou em torno de 50 miliamperes, com picos acentuados acima de 250 miliamperes durante o uso da rede e a limpeza de memória. Como resultado, a bateria foi esgotada em cerca de sete horas. Em contraste, o projeto moderno comportou-se mais como um corredor que trabalha em rajadas curtas e depois descansa profundamente. Chamadas de rede não bloqueantes e acionamentos por temporizador permitiram que o chip passasse cerca de 70% do tempo em sono profundo, com corrente de ociosidade próxima a 5 miliamperes e traçados de consumo muito mais suaves. A corrente média caiu para cerca de 100 miliamperes, e a vida útil medida da bateria subiu para aproximadamente dez horas — uma melhoria de 42%.

Figure 2
Figure 2.

Lições práticas para gadgets mais verdes

Além deste único smartwatch, o estudo extrai lições gerais para quem projeta dispositivos alimentados por bateria. Designs assíncronos orientados a eventos, combinados com métodos de comunicação leves e escalonamento cuidadoso, permitem que os aparelhos fiquem verdadeiramente desligados entre rajadas de atividade. Recursos modernos do Java tornam mais fácil escrever esse tipo de código sem sacrificar segurança ou portabilidade, e os testes mostraram que centenas de tarefas podem ser tratadas com apenas um acréscimo modesto no consumo de corrente. Em outras palavras, eficiência energética não se resume apenas a escolher o chip certo — trata-se de escrever software que trate o tempo passado em sono como a forma mais elevada de desempenho. Para cidades inteligentes, monitores médicos e sensores domésticos, essa mentalidade pode se traduzir diretamente em menos trocas de bateria, custos menores e menos resíduos.

Citação: 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

Palavras-chave: eficiência energética IoT, duração da bateria, threads virtuais Java, software de baixo consumo, dispositivos smartwatch