Windowsのスリープ復帰後にVS CodeやChromeが重い?メモリ蓄積の正体と解消法
「PCを再起動せずにスリープで運用していると、次第に動作が重くなる」「VS CodeやChromeのメモリ消費量がいつの間にか数GBを超えている」といった経験はないでしょうか。
実はこれ、Windowsのスリープ機能そのもののバグというより、Electron系アプリ(VS Code等)やブラウザの特性が関係していることが多いです。本記事では、その原因とスマートな解消法をまとめます。
1. なぜスリープを挟むとメモリが溜まるのか?
結論から言うと、「スリープ復帰時に、アプリケーション内のメモリ管理(ガベージコレクション)の甘さが表面化するため」です。
拡張機能による「再接続」の重複
VS Codeなどのエディタでは、スリープ復帰時にLanguage Server(Java、Flutter、TypeScript用など)がネットワークやファイルシステムへの再接続を試みます。
この際、古い接続オブジェクトが正しく破棄されずに新しいオブジェクトが生成されると、いわゆる「メモリリーク」の状態になり、じわじわとメモリを食いつぶします。
Electron / Chromium の特性
VS CodeやGoogle ChromeのベースとなっているChromium(Electron)は、表示速度を優先するためにメモリを贅沢に使う設計です。
長時間起動していると、不要になったメモリをOSに返すタイミング(ガベージコレクション)が遅れたり、メモリの断片化が起きたりして、数値上の使用量が肥大化し続けます。
2. 犯人を特定する:VS Codeの「プロセスエクスプローラー」
「VS Codeが重い」と感じたとき、どの拡張機能がメモリを食っているかは以下の手順で一発でわかります。
- VS Codeで
Ctrl + Shift + P(MacはCmd + Shift + P) を押す - 「Developer: Open Process Explorer」 を選択
ここでは、エディタ本体、拡張機能ホスト、各言語のサーバーがそれぞれ何MB消費しているかがリアルタイムで表示されます。異常に高い数値を出している拡張機能があれば、それが「大食い」の犯人です。
3. 効率的なリフレッシュ方法
PC自体を再起動するのは時間がかかりますが、アプリ単位のリフレッシュなら数秒で終わります。
VS Codeの場合:「Windowの再読み込み」
完全に終了して開き直す必要はありません。
- コマンドパレットから
Developer: Reload Windowを実行。 - これだけでエディタのプロセスが再起動され、蓄積されたゴミメモリがリセットされます。
Chromeの場合:「タブの復元」
「タブを全部閉じて、ブラウザを再起動し、Ctrl + Shift + T で復元する」のが最も確実です。
- 再起動前: 長期間の閲覧で蓄積されたキャッシュやスクリプトがメモリを占有。
- 再起動後: 「今、そのページを表示するのに必要な最低限のメモリ」だけが確保されるため、劇的に軽くなります。
[!TIP]
Chromeの設定から「パフォーマンス」→**「メモリセーバー」**をオンにしておくと、アクティブでないタブのメモリを自動解放してくれるのでおすすめです。
まとめ:エンジニアの「物理掃除」のススメ
「OOM(Out Of Memory)」でクラッシュする前に、区切りの良いタイミングで以下のルーチンを行うのが快適な開発環境を維持するコツです。
- 一日の終わりにはブラウザを一度閉じる
- 挙動が怪しい時は VS Code を Reload Window する
- スリープ運用でも、数日に一度は OS を再起動する
「物理的な掃除」と同じで、メモリも定期的にリフレッシュしてあげましょう!
