ギークスジョブでは、新型コロナウイルス感染症の影響を鑑み、現在実施している【個別説明会】【各種イベント・セミナー】【顧客企業様との商談打ち合わせ】について、一部を除き、オンライン対応を推奨させていただきます。
ユーザーの皆様、顧客企業様、当社社員の安全確保と、安定したサービスを継続的に提供させていただきたく、ご不便をおかけいたしますが、ご容赦くださいますよう、お願い申し上げます。

5分で分かるガベージコレクションの仕組み

2020/09/24 (木) TECH

5分で分かるガベージコレクションの仕組み

「ガベージコレクション」という言葉を耳にされたことはございますでしょうか。「聞いたことはあるけど、それがどんなものかよく理解していない」という方は多いかと思います。こちらでは、「ガベージコレクション」の正体を分かりやすく解説致します。

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

今回はガベージコレクションを「掃除のおばちゃん」に例えてご説明致します。実はガベージコレクションとは、プログラムにおける掃除のおばちゃんのような存在なのです。なぜ、ガベージコレクションが掃除のおばちゃんに例えられるかを、「プログラム実行時にメモリ上ではどのようなことが起こっているか」の解説を通して、お伝え致します。

プログラムが動作する際には以下2つのステップを踏みます。


  • プログラム処理に必要な情報をメモリ上に読みこむ
  • 読みこんだ情報をもとに、処理を実行する

読みこまれた情報は、処理をしている間はもちろん必要なものですが、その処理が終わってしまうと途端に不要になってしまいます。つまり「メモリに残されたゴミ」のような状態になってしまうのです。

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

そこで登場するのが、掃除のおばちゃんこと「ガベージコレクション」となります。


こちらは、「プログラムが確保したメモリ領域のうち、不要になった箇所だけを解放してくれる」機能となります。必要に応じてメモリ領域を割り当て・開放等することを「メモリ管理」と言います。

しかしガベージコレクションは、プログラマがメモリ管理のためのコードをわざわざ書かなくても、「この領域は必要かそうでないか」を自動的にチェックしてくれます。JavaやPHPのような高級言語は、こちらのガベージコレクションを標準機能として備えていることが多いです。

ガベージコレクションが登場する前

ガベージコレクションが登場する前の画像

それでは、ガベージコレクションが登場する前にはどのようにメモリ管理が行われていたのでしょうか。


実は、プログラマ自身がメモリの確保と開放を行うためのコードを都度書いていたのです。現在でも、ガベージコレクションの搭載されていないC言語などでは、プログラマはその処理を都度行っています。


しかし、欠点として、この方法はバグを多く生み出します。


「処理が終わったのにもかかわらず、メモリを開放し忘れる」というミスが起こりかねないのです。この状態になってしまうと、プログラムが実行されるたびにメモリ上に余分なデータが溜まり続けます。

ガベージコレクションが登場する前の画像

そうして最終的には、使用可能なメモリを食いつぶしてしまい、プログラムが動作不可能な状態となってしまうのです。これを「メモリリーク」と呼びます。メモリリークは熟練したプログラマでも回避するのは困難でした。しかし、ガベージコレクションによってメモリ管理を常に意識しなくてもよくなり、プログラミングの敷居がぐっと低くなったのです。

Scavenge GCとFull GC

ガベージコレクションには、大きくわけて2つの種類があります。それは、「Scavenge GC(スキャベンジ・ジーシー)」と「Full GC(フル・ジーシー)」です。


それでは、それぞれの違いを順に見ていきましょう。

Scavenge GC

「あるプログラムが使用できるメモリ領域」のことを「ヒープ領域」と言います。そして、このヒープ領域はさらに「New領域」と「Old領域」に分けられるのです。


New領域には生成されたあとすぐに廃棄されるオブジェクトが入り、Old領域にはさらに長い寿命を持つオブジェクトが入ります。Scavenge GCはそのうちNew領域のみを対象としたもので、比較的短時間で終了します。


掃除のおばちゃんを例にする場合、「テーブルの上やフロアだけをサッと掃除する」ような状態です。

Full GC

一方のFull GCは、Old領域をふくむ全領域を対象にしたものとなります。
(状況によっては、一部領域が除外されます)Scavenge GCほど高頻度では発生しないかわりに、終了するまでに時間がかかります。


これも掃除のおばちゃんを例にする場合、「部屋全体の大掃除をする」といったイメージとなります。

ガベージコレクションによるパフォーマンスへの影響

Webアプリケーションのように、「ほんの少しだけレスポンスが遅くなるのは許容できるけれど、システムそのものが数秒~数十秒間停止してしまうのは避けなければいけない」という条件がある場合、Scavenge GCは発生してよくても、Full GCが発生することは何としても防がなければいけません。
それは非常に重い処理であるため、システムのパフォーマンスに大きな影響をあたえてしまうからです。


Full GCをおさえるには、具体的には次のような点に注意することが必要になります。

オブジェクトをできるだけ使い回さないこと

オブジェクトの寿命が長くなるため、Old領域にわり当てられる可能性が高くなります。Old領域がふえればふえるほど、Full GCが発生しやすいのです。

新しいオブジェクトを大量に使用する場合は、New領域を大きめにとること

プログラムの起動オプションなどで指定可能です。
これも同じように、Old領域に割り当てられるオブジェクトを少なくする意図があります。
※ただし一部のゲームアプリのように、ほんのわずかの処理速度遅延が許容できないときには、このケースが当てはまらない場合があります。

おわりに

おわりにの画像

ふだんあまり意識することのない「ガベージコレクション」という機能。
そこには、私たちの代わりにせっせとゴミを回収してくれている掃除のおばちゃんが住んでいます。


耳をすませば、無機質なソースコードのすき間から、おばちゃんの声が聞こえてくるかもしれませんよ。

シェア

スキルを収入上昇につなげよう

日本最大級のITフリーランス専門エージェント ギークスジョブ

無料登録はこちら
日本最大級のITフリーランス専門エージェント
平均年収

840万円以上

日本最大級のITフリーランス専門エージェント
年間契約数

※2019年4月から
2020年3月の実績

11,606件

いきなりフリーランスとして活動するのは不安...という方へ

業界・専門知識の豊富なコーディネーターが、関東、関西、福岡で無料セミナーを実施しています

こんなお悩みはありませんか?

  • 自分のスキルでフリーランスになれるか不安
  • 安定した収入を得られるのか不安
  • 税金や保険などの手続きがどうなるのか知りたい

まずは、ギークスジョブの無料イベントに参加してみませんか?
まだ本格的に活動する予定がない方も、情報収集の手段として活用されています。
不安や小さな不明点を解消する場として、是非ご利用くださいませ。

イベント一覧を見る
上に戻る
geechs job

このブラウザは未対応です

当サービスは以下のブラウザでご覧いただくことを推奨しております。
また、より安全で快適にご利用いただくために
最新のバージョンでご覧いただくことを推奨いたします。
推奨ブラウザ:Google Chrome、Mozilla Firefox、Microsoft Edge、safari

Google Chrome で閲覧する