この記事を読むと、、
- 「関連用語」を使って「GC」を説明できるようになる
- 「GC」がもっと好きになる(多分)
関連用語
memory leak / dangling pointer / stop-the-world GC / incremental GC / concurrent GC
[復習用] 記事の内容を見る前に上記の言葉でGCを説明してみよう!
企画説明
- クラウドって何?って人に聞かれて説明してるけど俺もよく知らないや、、
- ドキュメント読んでみてるけど半分くらい何言ってるか分かんない、、
- 今日の夕飯はナスの炒めものにしよっかな〜、あれ、NASってなんだっけ?
みたいなことが結構あったので、知ったかしていたIT用語を毎日一個ずつちゃんと学んでいこうっていう企画です!
昨日の記事はこちら↓
GCとは
GC = Garbage Collection = プログラムが割当て、不要になったメモリ領域を自動で解放してくれる仕組み
- Lispにおけるメモリ管理を簡単にするために開発された
- 多くの高級言語では標準で実装されている
- C/C++ではライブラリを通してGCが使える
GCのおかげで以下のバグを回避できたりする
-
memory leak = オブジェクトが存在するが、それを指すポインタがない状態
- ただし、GCがあってもポインタを保持し続けるコードを書けばmemory leakしてしまう
- メモリ不足の原因になる
-
dangling pointer = 解放済みのオブジェクトを指すポインタ
- dangling pointerがデリファレンスされた場合、意図しない挙動をしてしまう
- double free bug = 解放済みのメモリ領域を再度解放しようとすること
※GCには様々な実装方法があるけど、以下は最も一般的なtracing GCの話です
GCをするタイミングには以下のパターンがある
-
stop-the-world GC = GC中にアプリケーションスレッドを完全に停止する方法
- オブジェクトの新規割当てや解放が起きないため安全
- heap全体のGC = full GCの際にアプリケーションがしばらく応答しない時間が発生する
- 非対話形式のプログラムに向いている
-
incremental GC = GCを複数回に分けて実行する方法
- 全体で見ればstop-the-world GCよりも時間がかかる
-
concurrent GC = アプリケーションスレッドと並行してGCを実行する方法
- GCスレッドを同時に動作させる分、スループットが低下する
- プログラムの実行を止めない
【おまけ】調べている時にでてきたなにこれ用語
- heap memory = プログラム実行時に動的に確保可能なメモリ領域
- throughput = 単位時間あたりの処理能力
参考資料
- https://en.wikipedia.org/wiki/Garbage_collection_(computer_science)
- https://en.wikipedia.org/wiki/Tracing_garbage_collection
- https://docs.unity3d.com/Manual/performance-incremental-garbage-collection.html
- https://atmarkit.itmedia.co.jp/ait/articles/0704/24/news136.html
- https://en.wikipedia.org/wiki/Network_throughput