
今回のテーマは「メモリリーク」と「ガベージコレクション」です。
メモリリーク?

基本情報技術者試験や応用情報技術者試験で出題される「メモリリーク」と「ガベージコレクション」の問題。聞きなれない言葉で難しく感じるかもしれませんが、言葉の意味を理解すればそこまで難しい問題ではありません。
また、ITエンジニア(特にプログラマー)であれば、知っておきたい知識です。
本記事では、「メモリリーク」と「ガベージコレクション」について図解を用いて分かりやすく解説しています。
スポンサーリンク
目次
メモリリーク
メモリリークとは
メモリリーク(英:memory leak)とは、プログラムが確保したメモリ領域の一部 または すべてを解放し忘れ、確保したまま放置してしまうことであり、プログラミングにおけるバグの一種です。
通常プログラムは、次の図のように主記憶装置(メインメモリ)から必要な領域を確保します。そして、役割を終えて不要になったタイミングで確保したメモリ領域を解放し、空き領域に戻します。

プログラムの記述ミスなどにより解放処理を怠ると、不要になったプログラムがメモリ領域を確保したままになってしまいます。
この現象がメモリリークです。
メモリリークが頻発すると、メモリの空き領域が減少し、実行中プログラムの動作が遅くなったり、異常終了したりします。

メモリの解放を忘れるとメモリリークが発生し、メモリの利用可能領域が少なくなっていきます。
ガベージコレクション
ガベージコレクション
ガベージコレクション(英:garbage collection、略:GC)とは、コンピュータプログラムが動的に確保したメモリ領域のうち、不要になった領域を自動的に解放し、空き領域として再利用できるようにすることです。
次の図は、ガベージコレクションのイメージ例です。


使わなくなった物(ゴミ)を掃除して部屋を綺麗にするイメージです。
従来のプログラミング言語は、プログラマーが明示的にメモリの解放を行う必要がありましたが、Javaのようにガベージコレクションが組み込まれているプログラミング言語やフレームワークの場合は、実行中プログラムの動作から不要になったと判断した領域を自動的に解放します。
しかし、不要であると機械的には判断されずなかなか解放されないこともあります。(どこからも参照されなくなったものは解放するが、参照が残っている場合は解放されない)
また、長期間実行状態を維持するプログラムや、高頻度でメモリの確保・解放を繰り返すプログラムはメモリリークが発生しやすいので注意が必要です。
そのためプログラマーは、プログラミング言語によって用意されている解放処理を確認し、リソースの解放を忘れずに行うことが大切です。

ガベージコレクションが組み込まれているプログラミング言語でも、必要に応じてリソースの解放はしっかり行いましょう。
基本情報技術者試験 過去問の解説
スポンサーリンク
基本情報技術者平成29年秋期 午前問16
メモリリークの説明として,適切なものはどれか、設問のア~エを順番に確認していきます。
ア:OSやアプリケーションのバグなどが原因で,動作中に確保した主記憶が解放されないことであり,これが発生すると主記憶中の利用可能な部分が減少する。
正解:メモリリークの説明。
イ:アプリケーションの同時実行数を増やした場合に,主記憶容量が不足し,処理時間のほとんどがページングに費やされ,スループットの極端な低下を招くことである。
不正解:スラッシングの説明。スラッシングとは、主記憶容量の空き領域が少ないとき、主記憶とストレージとの間で内容の入れ替え(ページング/スワッピング)が頻繁に起き、処理がなかなか進まない状態のこと。(優先度の低いプログラムを一時的にストレージに退避させ、主記憶に空き領域を作る)
ウ:実行時のプログラム領域の大きさに制限があるときに,必要になったモジュールを主記憶に取り込む手法である。
不正解:オーバーレイ方式の説明。オーバーレイ方式とは、プログラムをセグメントという単位に分割し、その時に必要なセグメントだけを主記憶にロードする方式のこと。
エ:主記憶で利用可能な空き領域の総量は足りているのに,主記憶中に不連続で散在しているので,大きなプログラムをロードする領域が確保できないことである。
不正解:フラグメンテーションの説明。フラグメンテーションとは、主記憶の空き領域単位が小さく分割されてしまい、そのままでは有効活用できない状態のこと。

「ア」が正解です。
基本情報技術者平成16年秋期 午前問32
設問の現象と一致するものはどれか解答のア~エを順番に確認していきます。
正解:ガーベジコレクションとは、コンピュータプログラムが動的に確保した記憶領域のうち、不要になった領域を自動的に解放し、空き領域として再利用できるようにすること。
イ:スタック
不正解:スタックとは、データ構造(データを格納する入れ物)の一つで、入ってきたデータを順番に格納し、最後に格納したデータから順に取り出す方式のこと。
ウ:ヒープ
不正解:ヒープとは、プログラム上から動的(任意)に確保できるメモリ領域のこと。
不正解:フラグメンテーションとは、主記憶の空き領域単位が小さく分割されてしまい、そのままでは有効活用できない状態のこと

「ア」が正解です。
基本情報技術者試験おすすめの参考書・問題集
いちばんやさしい 基本情報技術者 | 『基本情報技術者試験』試験に、短期間で一発合格するための試験対策本。ITの知識がまったくない、未経験者やでもスラスラと学習を進められるよう、丁寧に解説。 |
かやのき先生の基本情報技術者教室 | 基本情報技術者をめざす方のためのやさしいオールインワンタイプの参考書&問題集。イラストや豊富な図解・例え話を駆使して理解しやすく・記憶に残りやすいように説明。 |
基本情報技術者 パーフェクトラーニング過去問題集 | 科目A・Bともに万全の対策ができる、定番の過去問題集!科目A・科目Bの両方について万全の対策ができる。 |
キタミ式イラストIT塾 基本情報技術者 | すべての解説をイラストベースで行っているため,とてもわかりやすい解説本。いちばん最初に読む基本情報技術者試験関連の書籍を探している人におすすめ! |
出るとこだけ!基本情報技術者[科目B] | 基本情報技術者【科目B】対策の定番書!前提知識+解き方+試験問題を掲載。効率よく学習できる。 |
基本情報技術者 合格教本 | 出題範囲を体系的にきちんと理解しながら学習したい人におすすめ!基本情報技術者試験の定番テキストの改訂版。 |
基本情報技術者 超効率の教科書+よく出る問題集 | 動画でスムーズに学習スタート、テキストでしっかり理解度を深める!よく出る問題を反復学習することで、合格に直結するチカラが身に付く! |