[面接質問] Java Stack & Heapの構造について
JavaのStackとHeapに関する面接の質問まとめ
Java のメモリ構造
アプリケーション実行のために構築したJava Runtime Data Areaがメモリに位置することになる。
-
PC Register, Native Method Stack, Method領域は全てのスレッドが共有します。
-
StackとHeap領域だけがスレッド固有の領域として持つことになります。
Heap の構造
Eden → Survivor → Old
上記のような形でオブジェクトが移動するのですが、基本的には生成順で理解すればいいと思います。
Garbage Collectorの役割
-
Eden: Javaオブジェクトが生成されるとすぐに保存される空間。
-
Survivor & Old: 参照度によってオブジェクトが移動された空間。
-
Mark and Sweep アルゴリズムを使用します。
Minor Garbage Collector
EdenとSurvivor領域(Young Generation)のメモリが許容値を超えた場合、オブジェクトの参照に基づいて領域を移動させる役割。
Major Garbage Collector
Old領域(Tenured Generation)のメモリが許容値を超えた場合、参照されていないオブジェクトを全て削除してメモリを回収する役割。
- 削除の過程でガベージコレクタを実行するスレッドを除いた残りのスレッドを全て停止('Stop-The-World')。
Stackの構造
基本データ型 + 地域変数 + パラメーター
ここで、パラメータの場合、オブジェクトのアドレス値を持ってHeap領域のオブジェクトを参照する形で使用されます。
→ パラメータが他のオブジェクトを参照する場合、アドレス値が変わるだけで、Heapに保存されたオブジェクトがすぐに消えることはありません! (Major GCが実行されるまでHold)
参考
댓글 작성
게시글에 대한 의견을 남겨 주세요.