広告 基本情報技術者

【基本情報技術者試験】メモリリークとガベージコレクション

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

メモリリーク?

問題

メモリリークの説明として,適切なものはどれか。

  • ア:OSやアプリケーションのバグなどが原因で,動作中に確保した主記憶が解放されないことであり,これが発生すると主記憶中の利用可能な部分が減少する。
  • イ:アプリケーションの同時実行数を増やした場合に,主記憶容量が不足し,処理時間のほとんどがページングに費やされ,スループットの極端な低下を招くことである。
  • ウ:実行時のプログラム領域の大きさに制限があるときに,必要になったモジュールを主記憶に取り込む手法である。
  • エ:主記憶で利用可能な空き領域の総量は足りているのに,主記憶中に不連続で散在しているので,大きなプログラムをロードする領域が確保できないことである。

基本情報技術者平成29年秋期 午前問16

問題

記憶領域の動的な割当て及び解放を繰り返すことによって,どこからも利用されない記憶領域が発生することがある。このような記憶領域を再び利用可能にする処理はどれか。

ア:ガーベジコレクション イ:スタック ウ:ヒープ エ:フラグメンテーション

基本情報技術者平成16年秋期 午前問32

基本情報技術者試験や応用情報技術者試験で出題される「メモリリーク」と「ガベージコレクション」の問題。聞きなれない言葉で難しく感じるかもしれませんが、言葉の意味を理解すればそこまで難しい問題ではありません。

また、ITエンジニア(特にプログラマー)であれば、知っておきたい知識です。

本記事では、「メモリリーク」と「ガベージコレクション」について図解を用いて分かりやすく解説しています。

本記事で学べること

  • メモリリークについてを理解する
  • ガベージコレクションについて理解する
  • 基本情報技術者試験の過去問の解き方を学ぶ

スポンサーリンク

メモリリーク

メモリリークとは

メモリリーク(英:memory leak)とは、プログラムが確保したメモリ領域の一部 または すべてを解放し忘れ、確保したまま放置してしまうことであり、プログラミングにおけるバグの一種です。

通常プログラムは、次の図のように主記憶装置(メインメモリ)から必要な領域を確保します。そして、役割を終えて不要になったタイミングで確保したメモリ領域を解放し、空き領域に戻します。

メモリの解放

プログラムの記述ミスなどにより解放処理を怠ると、不要になったプログラムがメモリ領域を確保したままになってしまいます。

この現象がメモリリークです。

メモリリークが頻発すると、メモリの空き領域が減少し、実行中プログラムの動作が遅くなったり、異常終了したりします。

メモリの解放を忘れるとメモリリークが発生し、メモリの利用可能領域が少なくなっていきます。

ガベージコレクション

ガベージコレクション

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

次の図は、ガベージコレクションのイメージ例です。

ガベージコレクションのイメージ例

使わなくなった物(ゴミ)を掃除して部屋を綺麗にするイメージです。

従来のプログラミング言語は、プログラマーが明示的にメモリの解放を行う必要がありましたが、Javaのようにガベージコレクションが組み込まれているプログラミング言語やフレームワークの場合は、実行中プログラムの動作から不要になったと判断した領域を自動的に解放します。

しかし、不要であると機械的には判断されずなかなか解放されないこともあります。(どこからも参照されなくなったものは解放するが、参照が残っている場合は解放されない)

また、長期間実行状態を維持するプログラムや、高頻度でメモリの確保・解放を繰り返すプログラムはメモリリークが発生しやすいので注意が必要です。

そのためプログラマーは、プログラミング言語によって用意されている解放処理を確認し、リソースの解放を忘れずに行うことが大切です。

ガベージコレクションが組み込まれているプログラミング言語でも、必要に応じてリソースの解放はしっかり行いましょう。

基本情報技術者試験 過去問の解説

スポンサーリンク

基本情報技術者平成29年秋期 午前問16

問題

メモリリークの説明として,適切なものはどれか。

  • ア:OSやアプリケーションのバグなどが原因で,動作中に確保した主記憶が解放されないことであり,これが発生すると主記憶中の利用可能な部分が減少する。
  • イ:アプリケーションの同時実行数を増やした場合に,主記憶容量が不足し,処理時間のほとんどがページングに費やされ,スループットの極端な低下を招くことである。
  • ウ:実行時のプログラム領域の大きさに制限があるときに,必要になったモジュールを主記憶に取り込む手法である。
  • エ:主記憶で利用可能な空き領域の総量は足りているのに,主記憶中に不連続で散在しているので,大きなプログラムをロードする領域が確保できないことである。

基本情報技術者平成29年秋期 午前問16

メモリリークの説明として,適切なものはどれか、設問のア~エを順番に確認していきます。

Memo

メモリリーク:プログラムが確保した主記憶領域の一部 または すべてを解放し忘れ、確保したまま放置してしまうこと。その結果、主記憶中の利用可能な部分が減少する。

ア:OSやアプリケーションのバグなどが原因で,動作中に確保した主記憶が解放されないことであり,これが発生すると主記憶中の利用可能な部分が減少する。

正解:メモリリークの説明。

イ:アプリケーションの同時実行数を増やした場合に,主記憶容量が不足し,処理時間のほとんどがページングに費やされ,スループットの極端な低下を招くことである。

不正解:スラッシングの説明。スラッシングとは、主記憶容量の空き領域が少ないとき、主記憶とストレージとの間で内容の入れ替え(ページング/スワッピング)が頻繁に起き、処理がなかなか進まない状態のこと。(優先度の低いプログラムを一時的にストレージに退避させ、主記憶に空き領域を作る)

ウ:実行時のプログラム領域の大きさに制限があるときに,必要になったモジュールを主記憶に取り込む手法である。

不正解:オーバーレイ方式の説明。オーバーレイ方式とは、プログラムをセグメントという単位に分割し、その時に必要なセグメントだけを主記憶にロードする方式のこと。

エ:主記憶で利用可能な空き領域の総量は足りているのに,主記憶中に不連続で散在しているので,大きなプログラムをロードする領域が確保できないことである。

不正解:フラグメンテーションの説明。フラグメンテーションとは、主記憶の空き領域単位が小さく分割されてしまい、そのままでは有効活用できない状態のこと。

「ア」が正解です。

基本情報技術者平成16年秋期 午前問32

問題

記憶領域の動的な割当て及び解放を繰り返すことによって,どこからも利用されない記憶領域が発生することがある。このような記憶領域を再び利用可能にする処理はどれか。

ア:ガーベジコレクション イ:スタック ウ:ヒープ エ:フラグメンテーション

基本情報技術者平成16年秋期 午前問32

設問の現象と一致するものはどれか解答のア~エを順番に確認していきます。

ア:ガーベジコレクション

正解:ガーベジコレクションとは、コンピュータプログラムが動的に確保した記憶領域のうち、不要になった領域を自動的に解放し、空き領域として再利用できるようにすること。

イ:スタック

不正解:スタックとは、データ構造(データを格納する入れ物)の一つで、入ってきたデータを順番に格納し、最後に格納したデータから順に取り出す方式のこと。

ウ:ヒープ

不正解:ヒープとは、プログラム上から動的(任意)に確保できるメモリ領域のこと。

エ:フラグメンテーション

不正解:フラグメンテーションとは、主記憶の空き領域単位が小さく分割されてしまい、そのままでは有効活用できない状態のこと

「ア」が正解です。

helpful