JVMが使用するメモリは3つの領域がある
静的領域
静的領域(static領域)は、Javaアプリケーション実行中に領域の大きさ(使用メモリサイズ)が変わらない。大きさが変わらないため静的領域を名づけられている。
実行開始時に(1)Javaアプリケーション全体で必要なクラス群の情報と、(2)クラスに含まれるstatic変数の2つがこの領域に格納される。
ヒープ領域
ヒープ領域は、Javaアプリケーション実行中に生成されたインスタンスのインスタンス変数が格納される領域である。
インスタンスはプログラム中で増減することがありうるため、ヒープ領域の大きさ(使用メモリサイズ)は、変動している。
また、JVMのGC(ガベージコレクション)機能によって、参照されなくなったインスタンスの情報はこの領域から削除されていく。
heapは英語で「たくさん」「山ほど」という意味がある。この領域はJavaプログラム実行時にまとめて一定量が確保される仕組みになっている。
スタック領域
スタック領域はスレッドごとに確保される領域で、「このスレッドはJavaプログラム中のここを呼び出してますよ」という情報を保持する。
「スタック」=積み重ねという名前が表すように、後に入れたものが先に取り出される(LIFO:Last In First Out)構造になっている。