実務でメモリの調査をしましたが、肝心のメモリについてほとんどわかっていないのでメモ。
メモリの領域を大きく分けると静的、スタック、ヒープに別れる。
静的
- 読んで字のごとく、プログラムが開始されて、終了するまで固定的な領域。
- グローバル変数やコード自体などはここに格納される。全アプリケーション共通の領域。
スタック
- メソッドが逐一実行される時に使われる領域。
- スタックという文字の通り、実行される場合はこの領域に、格納され、終わるとここから取り除かれる。1スレッドで1つの領域が使われる。
- 特定のスコープのみに対して使用されるため、メモリ管理がしやすい反面、大きいデータの格納には向いていない。
- 値型はここに格納される。
- オブジェクトのデータはポインタがここに格納され、実データは後述するヒープ領域で管理される。
ヒープ
- 開始時に一定領域確保され、必要の都度アプリケーションに割り当てられる。
- 大きいデータ、スコープがはっきりしないもの、サイズが動的なデータなどの格納に向いている。
- 領域が動的な代わりに少し遅い。
- 全アプリケーションで1つ。
- クラスの実態はこの領域に実データが格納される。
- 下記記リンクの説明は実データとポインタのイメージが掴みやすい。
オブジェクト指向講座 スタック領域とヒープ領域
以前やった時よりはイメージがしやすくなったかな・・・
基本的にはスタックで随時データを管理し、自由度の高いヒープを都度使うというかんじ。
色々調べたけれど、実例と図解が使ってあるものはわかりやすく、言葉だけで説明しようとしているものは読む気にならない(汗)自分が説明する時に参考になる。
その他参考になったリンクや書籍など