第5章 Windows 8を支える機能たち - 消費したメモリを取り戻る「Reclaiming Memory」

コンピューターを使用する上で、余裕があればあるほど困ることがないのが物理メモリである。一昔前はSDRAMの暴落で気軽に物理メモリを増設できたが、高品質の物理メモリは相変わらず高価だ。加えてWindows 8はサンドボックス化したWindowsストアアプリが前面に押し出すことで、メモリ消費量が増えるように感じるだろう。だが、Fundamentals(基礎技術)グループのプログラムマネージャーであるBill Karagounis(ビル・カラグーニス)氏によると、その心配は不要になりそうだ。

Windows 8は、サスペンド中のWindowsストアアプリが使用している圧縮可能なメモリを発見すると、そのメモリを再利用し、大半のメモリを異なるWindowsストアアプリで使用するという。つまり、メモリを確保するために不要なWindowsストアアプリを終了させる手間が省かれるということだ。実際に1ギガバイトしか搭載していない仮想マシン上でWindows 8を動かし、複数のWindowsストアアプリを起動してみたが、確かに同様の処理が行われている。図338の「スポーツ」は65.8メガバイトのメモリを消費しているが、複数のWindowsストアアプリを起動すると、メモリ消費量は1.1メガバイトまで圧縮された(図338~339)。

図338 「スポーツ」はこの時点で65.8メガバイトを消費している

図339 複数のWindowsストアアプリを起動すると、「スポーツ」のメモリ消費量は大幅に軽減した

開発途中版のWindows 8では、<プロセス>タブの「状態」に「Suspended(中断)」というメッセージを確認できたが、筆者が確認した限り表示されることはなかった。しかし、前述のProcess Explorerで確認すると中断状態にあることは事実である。

この状態を確認するには<詳細>タブを開かなければならなかった。Windowsストアアプリの実態であるMicrosoft WWA Host(WWAHost.exe)の状態が「中断」になっている。ただし、このサスペンド処理はあくまでもCPUリソースの消費を軽減するもの。物理メモリが潤沢な環境では、メモリ消費量を圧縮・再利用する「Reclaiming memory」は使用されないようだ(図340~341)。

図340 Windowsストアアプリの実態である「WWAHost.exe」の状態が「中断」になっている

図341 こちらは別マシンで同様の操作を行った状態。「WWAHost.exe」はサスペンドしているが、メモリは解放されていない

そもそも既存のWindows OSでは、アプリケーションが使用できるメモリサイズは限られており、アプリケーションが確保したメモリをシステム側が制御することは基本的に難しい。システムがメモリ不足に陥った際は、ローカルディスク上に作成した仮想メモリに消費部分を待避させ、物理メモリの空き容量を確保していた。Windows 8でも同様のロジックは受け継がれているが、Windowsストアアプリの基盤となるWinRTに盛り込まれたReclaiming memoryにより、快適なWindowsストアアプリの使用環境が整ったのである。

Windows OSに精通している方ならご存じの話だが、ここでメモリ消費に関する呼称を説明しよう。タスクマネージャーでは、現在のプロセスで使用されているメモリ容量を「ワーキングセット」と称し、特定のプロセスが専用のメモリとして確保する部分を「プライベートワーキングセット」と称している。Microsoft Word 2013プレビュー版の実体である「winword.exe」は、共有可能なワーキングセットは100,304キロバイト、占有するプライベートワーキングセットは42,604キロバイトであることが確認できた(図342)。

図342 <詳細>タブから、各プロセスのワーキングセットやプライベートワーキングセットの消費量を確認できる

Windows 8では、このプライベートワーキングセットを利用し、Windowsストアアプリが確保したメモリの圧縮と再利用を実現している。そのため、本ロジックがデスクトップアプリケーションに対して適用されることはない。あくまでもReclaiming memoryは、Windowsストアアプリに限られるのである。それでも最小化時に不要な部分を解放することで、プライベートワーキングセットの一部を開放するなどの機能は備わっているようだ。