リモートワーク・ご商談等のオンライン対応について

ギークスジョブの掲載案件はリモートワークでの参画がご相談可能です。
また、現在実施している個別説明会、各種イベント、顧客企業様との商談打ち合わせはオンラインでご対応いただけます。

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

作成日:2020/09/24 (木) TECH

この記事は公開から1年以上経過しているため、情報が古い可能性があります。

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フリーランス専門エージェントとして20年以上にわたり、ITフリーランスのご支援を行っています。
フリーランスを初めて検討される方はもちろん、現在フリーランスとしての今後に不安を感じている方、今よりもっと充実したフリーランス生活を楽しみたい方は、ぜひお気軽に相談ください。ITフリーランス専任のキャリアアドバイザーがマンツーマンでサポートいたします。


▽ 無料登録(エントリー)はこちら
https://geechs-job.com/entry


まだフリーランスになることに迷いがある方へは、独立のご相談から承ります。これまでのご経歴やキャリアの目標をお伺いしながら、お一人おひとりに寄り添ったキャリアプランのご提案をいたします。


▽ 独立相談会への無料エントリーはこちら
東京:https://geechs-job.com/event/details/1
大阪:https://geechs-job.com/event/details/2
福岡:https://geechs-job.com/event/details/3
名古屋:https://geechs-job.com/event/details/189

その他のおすすめ記事

5分で分かるJavaデザインパターン|ITフリーランスをサポートするギークスジョブ

ITフリーランスの方のための『お役立ち情報』をご紹介しています。この情報のテーマは5分で分かるJavaデザインパターンです。geechs job(ギークスジョブ)では、「フリーに生きる」ためのノウハウをご紹介し、ご希望のキャリアやライフプランを実現できるように、サポート致します!

シェア

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

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

無料登録はこちら

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

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

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

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

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

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