JVM์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐฉ์
JVM์ ๊ธฐ๋ณธ์ ์ผ๋ก Stack Memory ์ Heap Memory ๋ผ ๋ถ๋ฆฌ๋ ๋๊ฐ์ง ์ ์ฅ ๊ณต๊ฐ์ ์ด์ฉํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ค.
์ด๋ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ ๋ฐฉ๋ฒ์ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ํ ์ค ํ ์ค ์ฝ๋ ๊ฒ์ด๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ฝ๋๋ค์ ํ ์ค ํ ์ค ์ฝํ์ Stack์ด๋ผ ๋ถ๋ฆฌ๋ ๊ณต๊ฐ์ ์ฐจ๊ณก์ฐจ๊ณก ์์ธ๋ค.
๋ง์ง๋ง์ ๋ค์ด์จ ๋ณ์๊ฐ ๋จผ์ ๋๊ฐ๋ค๊ณ ํด์ LIFO(Last In First Out) ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค๊ณ ๋ ํ๋ค.
ํ์ง๋ง, ๋ชจ๋ ๋ณ์๋ฅผ Stack์ ์ ์ฅํ ์ ์๋ ๊ฒ์ ์๋๋ค.
๊ฐ๋จํ ๋ณ์์ธ Primitive Type์ ๋ณ์๋ค์ Stack์ ์ ์ฅ์ด ๊ฐ๋ฅํ์ง๋ง,
๋ณต์กํ ๋ณ์๋ Heap ๊ณต๊ฐ์ ์ ์ฅ๋๊ณ Stack์๋ ํด๋น Heap ๊ณต๊ฐ์ ๊ฐ๋ฆฌํค๋ ๋ณ์๊ฐ ์ ์ฅ๋๋ค.
โ ๋ณ์๊ฐ ์๋ค๋ฉด ๋ฌด์กฐ๊ฑด Stack์ ์ ์ฅ๋๋๋ฐ,
๋ฐ์ดํฐ๋ Stack์ ์ ์ฅ๋๋ ๊ฒฝ์ฐ๋ ๊ฐ๋จํ ๋ฐ์ดํฐ์ธ ๊ฒฝ์ฐ์ด๋ฉฐ,
์กฐ๊ธ๋ง ๋ณต์กํด์ง๋๋ผ๋ Stack์๋ ๋ณ์์ ์ฃผ์๊ฐ๋ง ์ ์ฅ๋๊ณ ์ค์ ๋ฐ์ดํฐ๋ Heap ์์ญ์ ์ ์ฅ๋๋ค. โ
JVM์ ์คํ ์์ญ์ ํน์ง
์ ์ ์ผ๋ก ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ
๊ฐ ์ค๋ ๋๋ง๋ค ํ๋์ฉ ์กด์ฌํ๊ณ ์ค๋ ๋๊ฐ ์์๋ ๋ ์์ฑ๋๋ค.
๋ณ์์ ๊ธฐ๋ณธํ ํ์ (Primitive ํ์ ) (boolean, char, short, int, long, float, double) ์ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ด๋ ๊ฐ์ด ํ ๋น๋๋ค.
int, long, boolean ๋ฑ ๊ธฐ๋ณธ ์๋ฃํ์ ์์ฑํ ๋ ์ ์ฅํ๋ ๊ณต๊ฐ์ผ๋ก,
์์์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ณ์๋ ์ ๋ณด๋ค์ด ์ ์ฅ๋๋ ์์ญ- ์ฐ๋ ๋ ๋ณ๋ก 1๊ฐ๋ง ์์ฑ๋๋ค.
- ํ๋์ ์ฐ๋ ๋๋ ๋ด๋ถ์ ์ผ๋ก static, stack, heap ์์ญ์ ๊ฐ๊ฒ ๋ฉ๋๋ค. โ ๊ทธ๋์ A์ฐ๋ ๋๋ ๋ค๋ฅธ ์ฐ๋ ๋์ ์ ๊ทผํ ์๋ ์์ง๋ง,
static๊ณผ heap ์์ญ์ ๊ณต์ ํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ํ๋์ ์ฐ๋ ๋๋ ๋ด๋ถ์ ์ผ๋ก static, stack, heap ์์ญ์ ๊ฐ๊ฒ ๋ฉ๋๋ค. โ ๊ทธ๋์ A์ฐ๋ ๋๋ ๋ค๋ฅธ ์ฐ๋ ๋์ ์ ๊ทผํ ์๋ ์์ง๋ง,
- ๋ฉ์๋๊ฐ ํธ์ถ๋ ๋๋ง๋ค ์์ฑํ๊ณ ,
๋ฉ์๋ ์คํ์ด ๋๋๋ฉด pop๋์ด ์ ๊ฑฐ๋ฉ๋๋ค.
JVM์ ํ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํน์ง
๋์ ์ผ๋ก ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ
๋ชจ๋ ์ค๋ ๋๊ฐ ๊ณต์ ํ๋ ์์ญ์ผ๋ก
ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด์ ์์ฑ๋ ๋ชจ๋ ์ธ์คํด์ค ๋๋ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐโnewโ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋ ์ ์ฅ๋๋ค.
1
Instance instance = new Instance(); -> heap์ ์กด์ฌ
Heap ์์ญ์ ์์ฑ๋ Object ํ์ ์ ๋ฐ์ดํฐ์ ์ฐธ์กฐ ๊ฐ์ด ํ ๋น๋๋ค.
์ฐธ์กฐํ(class, interface, enum, Array ๋ฑ) ์๋ฃํ๋ ๊ฐ์ด ์ ์ฅ๋๋ค.
ํ์ ์ฐธ์กฐ ์ฃผ์๋ โ์คํโ์ด ๊ฐ๊ณ ์๊ณ ํด๋น ๊ฐ์ฒด๋ฅผ ํตํด์๋ง ํ ์์ญ์ ์๋ ์ธ์คํด์ค๋ฅผ ํธ๋ค๋งํ ์ ์๋ค.
GC๊ฐ ์ ๋ฆฌํ๊ธฐ ์ ๊น์ง๋ ๋จ์์์ต๋๋ค.
ํ๋ฉ๋ชจ๋ฆฌ์ ํ๊ณ์
Stack์ ์ข์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด์ง๋ง, Heap์ ๋์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด๋ค.
Stack ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ํ ๋นํ๊ณ ํด์ ํ๋ ๊ฒ์ ๋ง์ ๋น์ฉ์ด ๋ค์ง ์์ง๋ง,
Heap ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ํ ๋นํ๊ณ ํด์ ํ๋ ๊ฒ์ ๋ง์ ๋น์ฉ์ ์ํ๋ค.
๋ฐ๋ผ์ ๋๋ฌด Heap์ ๋ฐ์ดํฐ๋ฅผ ์์ฃผ ํ ๋นํ๊ณ ํด์ ํ๋ ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ์ง ๋ค๋ฉด
๊ฐ์ ๋ฐฉ์์ Stack์ ํ์ ๋๋ณด๋ค ์์ญ๋ฐฐ์ ์๋ ์ฐจ์ด๊ฐ ๋ ์ ์๋ค.
์ด ์ ์ ์ ์ํ๋ฉด์ Heap์ ์ฌ์ฉํ ๋๋ ์ด ์ ์ ์ ์ํด์ ์ฝ๋๋ฅผ ์ง๋๋ก ํด์ผํ๋ค.
(์ฐธ๊ณ )
- [JAVA] JAVA ๋ฉ๋ชจ๋ฆฌ ์ด์ผ๊ธฐ - Stack ๊ณผ Heap
- [Java] ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ ๋ฉ์๋(Method), ์คํ(Stack), ํ(Heap) ์์ญ์ ๋ํ์ฌ
- JVM์ Memory ํ ๋น ๋ฐฉ์ : Stack๊ณผ Heap Memory๊ฐ ๋์ํ๋ ๋ฐฉ๋ฒ
- JVM์ Runtime Data Area
- [JAVA] โ ๊ทธ๋ฆผ์ผ๋ก ๋ณด๋ ์๋ฐ ์ฝ๋์ ๋ฉ๋ชจ๋ฆฌ ์์ญ(์คํ & ํ)
๊ณต๋ถํ ๋ด์ฉ์ ์ฌ๋ฌ๊ธ๊ณผ ์ฑ
์ฝ์ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์ ๋ฆฌํ๊ณ ์์ต๋๋ค.
์ข์ ๊ธ๋ก ์ ์ ๊ณต๋ถ์ ๋์์ ์ฃผ์๋ ๋ถ๋ค๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค.