初めに
ガーベージコレクション(GC)についてまとめた。
そもそもGCとは?
プログラムが使わなくなったメモリを自動で解放するもの。
プログラミング言語の言語機能に組み込まれている場合や、外部ライブラリによって提供される場合などがある。
参照カウント、マーク&スイープなどの方式がある。
GCの利点
メモリ管理の容易さ
開発者自身がメモリ解放を行う必要がなく、メモリリークや二重解放を避けられる。
自動最適化
実装側がヒープ構造や割り当てパターンに基づいて最適化できる。
GCの欠点
遅延
GCを行う際には処理が停止することがある。
処理
GCがCPU、メモリを消費するため、純粋な計算スループットが低下する。
また、余分なヒープ領域を必要とし、全体的なメモリの使用量が増える。
制御困難性
いつメモリが解放されるかをアプリ側が正確に制御しずらく、解放のタイミングが不定になる。
GCは安全性、生産性を向上させる一方、遅延やメモリ消費量の増加を発生させる。
Rustとの違い
GC言語はランタイムがタイミングを判断するが、Rustはコンパイル時、スコープ終了時に自動で破棄される。
また、Rustは所有権という仕組みを採用している。
これはメモリの所有者が1つであることを約束するものである。
加えてRustは借用ルールを強制しており、解放後のメモリアクセスやデータ競合を防ぐことができる。
これらによりRusthはGC のような停止時間がないためリアルタイム性に優れるメモリ管理を実現している。
終わりに
Rust勉強しないと。
~Thank you for reading~