Clear Sky Science · ja
バーチャルスレッドとガベージコレクションがバッテリ駆動のIoTデバイス向けJavaアプリの省エネ性に与える影響
小さな機器とそのバッテリーが重要な理由
フィットネスバンドから工場内のワイヤレスセンサーまで、周囲の多くの物は小さなバッテリで動く小型コンピュータになっています。バッテリが切れるとコスト、手間、電子廃棄物が発生します。本稿は、これらのバッテリ寿命を延ばす意外に強力な手段を検討します。新しいチップや電池化学ではなく、より賢いソフトウェアです。スマートウォッチ風のデバイスを試験ケースにして、著者らはハードウェアをまったく変えずに最新のJavaプログラミング手法がバッテリ寿命を約40%伸ばせることを示します。
日常的なソフトウェアが静かに電力を浪費する仕組み
多くのバッテリ駆動デバイスは、心拍の読み取り、ボタンの押下、Wi‑Fiでのメッセージ送信などを待つ時間が大半です。従来のJavaプログラムはこれらを活動ごとに1つのOSスレッドで扱い、「これを実行して、次に待つ」という単純なスタイルを取ります。これだとプログラマには扱いやすい一方で、することがないときでもプロセッサを起こし続け、未使用メモリをJavaが掃除するときに突発的な処理が発生します。スマートフォンやノートPCをコンセントに差している場合はほとんど気づきませんが、薄いバッテリで一日動かすべき小型ウォッチでは、こうした余計な起床や一時停止が稼働時間を静かに削ります。
多数の作業を同時に扱う新しい方法
最新のJavaは、この状況を変える2つの重要な道具を提供します。1つは「バーチャルスレッド」で、Javaランタイムがごく少数の実スレッド上で数千の軽量タスクを扱えるようにします。タスクがネットワーク応答やセンサの読み取りを待つとき、プロセッサを占有せず安価に待機させられます。もう1つはZGCのような「低レイテンシ」型のガベージコレクタ群で、プログラム全体を長時間止めるのではなく小さな作業片に分散して処理を行います。これらを組み合わせると、チップがより頻繁に、そしてより長く深いスリープに入れるようになり、最も低消費電力な状態を多く利用できるようになります。デバイスが常に半覚醒状態でいるのではなく、短く起きて仕事をし、すぐに休む運用に変わるのです。

二つのスマートウォッチの比較物語
実際にどれほど違うかを確かめるため、研究者らは同じ単純なスマートウォッチアプリの2つのバージョンを作りました。どちらも定期的に心拍データを読み取り、Wi‑Fi経由でクラウドサービスに送信します。これはウェアラブルや他のIoT機器で一般的なパターンです。第一のバージョンは従来のブロッキングスタイルのコードで、従来のスレッドとデフォルトのガベージコレクタを使いました。第二のバージョンはイベント駆動の非同期スタイルで、バーチャルスレッドとZGCを用いています。ハードウェア、バッテリ、負荷は同一で、ARM Cortex‑M4ボードとWi‑Fiモジュール、1000 mAhのリチウムポリマーバッテリを搭載し、24時間連続で正確な計測器により電流とプロセッサ活動を記録しました。
電力測定が明らかにしたこと
レガシー設計は落ち着きのない人がとにかくうろうろしているような振る舞いでした。プロセッサはネットワーク待ちの間でも約85%の時間稼働しており、浅いスリープ状態しか達成できませんでした。アイドル時の電流はおよそ50ミリアンペアで、ネットワーク使用時やメモリ掃除時には250ミリアンペアを超える急激なスパイクが観測されました。その結果、バッテリは約7時間で枯渇しました。対照的にモダンな設計は短い全力の仕事の後に深く休むスプリンターのようでした。ノンブロッキングのネットワーク呼び出しとタイマーベースのウェイクアップにより、チップは約70%の時間を深いスリープで過ごし、アイドル電流は約5ミリアンペア付近でより滑らかな電力プロファイルを示しました。平均電流は約100ミリアンペアに下がり、実測バッテリ寿命は約10時間に延び、約42%の改善となりました。

より環境配慮された機器のための実践的な教訓
この単一のスマートウォッチを超えて、本研究はバッテリ駆動デバイスを作る者に向けた一般的な教訓を抽出します。イベント駆動かつ非同期の設計は、軽量な通信手段と慎重なスケジューリングと組み合わせることで、活動の合間に機器を真にオフにしておけます。最新のJava機能は、安全性や移植性を犠牲にせずにそのようなコードを書くのを容易にし、テストでは数百のタスクを比較的わずかな追加消費で扱えることが示されました。言い換えれば、エネルギー効率は単に適切なチップを選ぶことではなく、スリープ時間を最高のパフォーマンスとみなすソフトウェアを書くことに関わります。スマートシティ、医療モニタ、家庭用センサーにおいて、その考え方はバッテリ交換の減少、コストの低減、廃棄物の削減へと直接つながります。
引用: 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
キーワード: IoTのエネルギー効率, バッテリー寿命, Javaのバーチャルスレッド, 低消費電力ソフトウェア, スマートウォッチ機器