メモリ管理の3つの手法:ガベージコレクション、参照カウント、所有権
写真:Telerik.com

メモリ管理の3つの手法:ガベージコレクション、参照カウント、所有権

メモリを解放する各手法には、それぞれ代償として、レイテンシ、スループット、あるいはプログラマーの労力といったものが伴います。

すべてのプログラムは、「割り当てられたメモリをいつ解放するか」という問いに答えなければならない。一般的な答え方は3つあり、それぞれが異なるものを犠牲にしている。

自動ゴミ収集

プログラムは気兼ねなく配布し続け、定期的に回収担当者が巡回して、誰も利用しなくなったエリアを特定し、回収すればよい。

  • メリット:プログラマーはほとんど考える必要がなく、解放済みのメモリ領域を使用することによるエラーが発生しない
  • デメリット:ガベージコレクションの実行時に予測できない停止が発生し、必要以上にRAMを消費する

サーバーサービスや業務用アプリケーションに適しています。これらは、最大遅延よりもスループットが重視される場面です。

参照カウント

各オブジェクトにはカウンタが1つずつ割り当てられています。参照が追加されるとカウントが増加し、参照が削除されるとカウントが減少し、0になると直ちに解放されます。

  • 長所:適切なタイミングで解放され、予期せぬ停止がない
  • デメリット:代入のたびにコストがかかり、参照ループを自動的に処理できない — AがBを保持し、BがAを保持している場合、両方の値は決して0にならない

所有と借用

コンパイラは、誰がメモリ領域を所有しているかを追跡し、コンパイル時に適切な場所に解放命令を挿入します。ガベージコレクタもカウンタも不要で、実行時のオーバーヘッドは一切ありません。

  • メリット:手動での管理と同様に迅速かつ予測可能だが、安全である
  • デメリット:記述者は新しい思考モデルを習得する必要があり、一部のデータ構造は表現しにくくなる

絶対的な勝利という選択肢はない

リアルタイムシステムや組み込みソフトウェアは、停止が許されないため、第3の選択肢を採用します。一方、Webアプリケーションは、数十ミリ秒よりも人の時間を節約することが重要であるため、第1の選択肢を採用します。どちらもそれぞれの文脈においては正しいのです。

Chia sẻ

Thảo luận