LoginSignup
1
1

More than 1 year has passed since last update.

メモリ領域とガベージコレクション

Last updated at Posted at 2021-09-10

0. はじめに

プログラムのメモリ領域とガベージコレクションについてまとめました。

1. メモリ領域の種類

プログラム実行時のメモリ領域は「静的領域」「ヒープ領域」「スタック領域」に分類される。

1-1. 静的領域

格納する情報

  • グローバル変数やプログラムの命令、クラス情報など

格納するタイミング

  • C++では、アプリケーション開始時に全てのクラス情報を一括格納する。
    • メリット・・・プログラムの動作によって変化しないため、実行性能が良い。
    • デメリット・・・メモリ使用量が大きくなる。
  • Javaや.NETでは、クラスが必要となった時点で逐次格納する。そのため、静的領域ではなくメソッドエリアと呼ばれることが多い。
    • メリット・・・新しいクラスを読み込む度にオーバーヘッドが発生するため、実行性能が悪くなる。
    • デメリット・・・メモリ使用量を減らすことができる。

1-2. ヒープ領域

格納する情報

  • 生成したインスタンスなど。

格納するタイミング

  • プログラムの実行時。

1-3. スタック領域

格納する情報

  • メソッドの引数、ローカル変数、戻り値など。

格納するタイミング

  • メソッド呼び出し時。

2. ガベージコレクション

  • ヒープ領域のインスタンスが不要になったら自動で解放する仕組み。
  • ガーベッジコレクタがというプログラムが制御を行う。
  • プログラミング言語(Javaの場合、Java VM)が提供する。
  • 自動で解放するとはいえ、一時的に数万~といった大量のインスタンスを作った場合は、当然メモリを大きく消費するので注意。
  • 削除対象となるのは、静的領域、ヒープ領域から辿れない、孤立したインスタンス。

3. 参考文献

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1