フリーランスITエンジニアの案件・求人トップ › フォスタージャーナル › 【ガベージコレクションとは?】かんたん解説で完全理解

【ガベージコレクションとは?】かんたん解説で完全理解

  • Facebook
  • Twitter
  • note

ソフトウェア開発に携わるエンジニアの世界では「ガベージコレクション」と言う言葉を聞いたことがあると思います。
しかしながらこの言葉の意味や機能を正確に説明できる人は余り多くありません。
そこでこの記事ではガベージコレクションのおさらいをしましょう。
具体的にはガベージコレクションの用語説明からメリット、発生時の注意点や対処方法までをしっかりと解説します。

ガベージコレクションとは?

ガベージコレクションの語源は英語の「garbage collection」から来ています。日本語にすると「ゴミ回収、廃品回収」と言う意味になります。
一般的には省略して「GC」と呼ぶこともあります。
もう少し説明するとガベージコレクションとは自動的に不要となったメモリの領域を解放する機能のことです。
つまり、ゴミ(使ってないメモリ)を回収する清掃員の役割がガベージコレクションです。

ガベージコレクションの種類と役割

ガベージコレクションは大別すると2種類あります。そこで以下にそれぞれの役割について説明します。

・Scavenge GC
メモリ上にはプログラムが「使用出来る領域」と「使用出来ない領域」があります。
今回ご説明するのは「使用出来る領域」で「ヒープ領域」と言います。
このヒープ領域には新しいデータが格納される「New領域」と古くデータが格納される「Old領域」に区分されます。
そしてScavenge GCとは「New領域」に限定したメモリを解放するのが役割です。
清掃員の作業に例えると毎日の通常清掃となります。従いまして掛かる時間も少ないです。

・Full GC
こちらはヒープ領域にある「Old領域」に限定したメモリを解放するのが役割です。
清掃員の作業に例えると年1回の大清掃となります。従いまして広い範囲を長い時間掛けて行います。このため、システムのパフォーマンスに影響を与えます。

ガベージコレクションの動作内容

手動

ガベージコレクションが動作する条件は以下の3つです。

システムのメモリ容量が少なくなった場合

検出はOSあるいはホストPCからのメモリ不足による通知となります。

「マネージドヒープ」で割り当てた使用メモリがしきい値を超えた場合

「マネージドヒープ」とはガベージコレクションにより管理されるメモリを指します。

GC.Collectメソッド」が実施された場合

「GC.Collectメソッド」とはガベージコレクションを強制実行する命令になります。
この命令は主にテスト時や特別な状況時に使います。

ガベージコレクションの開発前はどうしていたのか?

ここでは、ガベージコレクションが開発される前の処理について解説します。
ガベージコレクションが「自動」だとすると、それ以前は「手動」で行っていました。
具体的には、プログラマーがメモリの確保と解放をその都度、プログラムの中に書き込んでいました。つまり、原始的な方法で解決していたということです。
しかしながら欠点として「メモリーリーク」が発生する恐れがあります。
メモリーリークとはプログラムバグのひとつです。
本来、プログラムでメモリを適時開放しなくてはなりませんが開放し忘れたため、残ったメモリが消費され続けて結果的にプログラムが止まってしまう状態を指します。
このため、ガベージコレクションが導入される前はプログラマーにある程度のスキルが必要とされていました。

ガベージコレクションの歴史

メリット

ガベージコレクションの概要が分かったところで次は歴史について説明します。
ガベージコレクションの起源は1959年頃、米国の人工知能学者である「ジョン・マッカーシー」によって開発されました。
現在は多くのプログラミング言語で本機能が採用されています。
代表的な言語はJava、Python、Rudy、PHP、JavaScript、Kotlin、Swift、Visual Basic等です。
一方でガベージコレクションを採用していない言語も存在します。
代表的な言語はC、C++、Rust等です。
これらの言語が登場した時期はメモリ容量が少なく、厳格なメモリ管理が必要不可欠でした。
この結果、これらの言語でガベージコレクションは採用されていません。
しかしながら現在では、ライブラリを導入することでガベージコレクションを使用することが可能です。
なお、Rustのメモリ管理は所有権・借用・ライフタイムという別の概念を導入しています。
これはメモリの安全性と動作スピードの両立させるためと言われていますが、エンジニアの間では賛否両論を呼んでいます。

ガベージコレクションのメリット

ガベージコレクションの主なメリットは以下の2つになります。

プログラマーの負担軽減

前述した通り、ガベージコレクションが開発される前は個々のプログラマーが独自にプログラムを書き込みメモリ管理を行っていました。
このため、正しいメモリ動作を検証する必要があり、プログラマーに負担を掛けていました。
しかしながらガベージコレクションを導入することでプログラマーはメモリの確保と開放を考慮する必要が無くなりました。

メモリリークの防止

メモリーリークの原因はプログラマーによるプログラムミスが殆どです。
これに対してガベージコレクションを採用することでメモリの開放は自動になります。従ってメモリーリークを確実に防止できることになります。

ガベージコレクションの注意点と対処法

ガベージコレクションは画期的な機能でメリットばかりが注目されてますが、リスクも伴います。
そこでここでは、ガベージコレクションを導入時の注意点と対処法を2つ説明します。

処理が重くシステムを止めてしまう恐れがある

プログラマーは、ガベージコレクションの導入と引換えにメモリ管理のプログラムを意識する必要がありません。
しかしながら、この代償としてプログラマーはメモリの開放を細かく制御できません。
このため、予測しないタイミングでCPUに負担が掛かり、本来のプログラム処理が重くシステムを止めてしまう恐れがあります。
従ってリアルタイム性が要求されるゲーム等のプログラムには、ガベージコレクションを導入するのは不適当です。

メモリ開放の予見が難しい

ガベージコレクションの導入でメモリ管理が自動で行われるため、メモリの開放がいつ実行されるか分からず制御できません。
このため、ガベージコレクションの実行タイミングは予見できません。
従ってFull GCの発生を極力防ぐように十分なメモリの割り当ての考慮が必要です。

まとめ

この記事ではガベージコレクションの用語説明からメリット、発生時の注意点や対処方法までを解説して来ました。
今日、ガベージコレクションは既に多くのプログラミング言語で導入されています。
このため、エンジニア側から見るとあまり意識すること無く使っている機能です。
しかしながらこのガベージコレクションが無い時代には、プログラマーが手動でプログラムしていたと思うと感慨深いものを感じないでしょうか。

  • Facebook
  • Twitter
  • note

おすすめ記事

バックエンドって何?フロントエンドとの違いについても徹底解説

昨今、IT業界では様々なエンジニアが存在します。その中でも幅広い分野の開発現場で働くバックエンドエンジニアの需要が高まっています。一方で「バックエンドエンジニアとはどんな職種なのか?」、「バックエンドエンジニアとフロントエンドエンジニアは何が違うのか?」等々の疑問を良く聞きます。そこでこの記事ではバックエンドエンジニアの概要とフロントエンドエンジニアとの違いやサーバサイドエンジニアとの違い、業務内容、平均年収までをしっかりと解説します。

ゲームテスターとはどんな職業?その仕事内容や年収、必要なスキルを解説

ゲームテスターという職業をご存じでしょうか? 仕事内容は、ただ、ひたすらゲームをするだけです。ゲームが好きな方なら「え? それが仕事になるの?」と驚かれるかもしれません。実際にゲーム開発会社では今も多くのゲームテスターが一日中、発売前のゲームをプレイしています。それがゲームテスターの仕事であり、ゲームテスターがいないとゲーム開発は不可能なのです。ここでは、そんな、ちょっと変わった仕事であるゲームテスターについて詳しく述べてみたいと思います。

データサイエンティストの年収は?仕事内容や必要なスキルを解説

データサイエンティストは年収が高い職業として知られています。 地域別に見ると都会では600万円から670万前後、地方では690万円から700万円台後半と高めとなる傾向があります。またデータサイエンティストが対象とするデータには色々な種類がありますが、これらの種類別に収入の差は見られません。データサイエンティストの仕事はデータを分析し、そこから有益な結果を引き出すことです。そして、その引き出した結果について、しっかりと明確な説明ができなければなりません。また、その結果の品質保証の基準となるものを示す必要もあります。そのため、数学、統計学、可視化などの多種多様な手法を心得ておかねばならず、多くの知識を要求されるので大変な勉強が必要ですが、来るべきAIの時代には必ず必要となる将来性は抜群の職業でもあります。 そんなデータサイエンティストについて詳しく説明してみましょう。

FOSTER FREELANCE 2021年度4Qレポート

フォスターネット広報です。弊社にて2021年度1月~3月度(以下4Q)の期間に新規でご契約を締結させていただいた案件のデータをもとに4Qの動向を振り返りました。

FOSTER FREELANCE 2021年度3Qレポート

フォスターネット広報です。弊社にて2021年度10~12月度(以下3Q)における、新規でご契約をさせていただいた案件のデータをもとに3Qの動向をまとめました。例年、10月は多くのプロジェクトで人材の入れ替わりが激しく大きく動く傾向がありますが、2021年の10月は特に多くの方が案件を切り替えられました。これは緊急事態宣言下で様子を伺っていた方たちが、コロナが一時的に収まったタイミングで案件の変更を希望されたと考えられます。
フォスタージャーナルカテゴリー 
フォスタージャーナル検索 
よく見られている記事 
案件特集