GC(Garbage Collector)๋?
์ฌ๊ธฐ์ ๋งํ๋ Garbage๋, ๋์ ์ผ๋ก ํ ๋นํ๋ ๋ฉ๋ชจ๋ฆฌ ์ค ํ์์๊ฒ ๋ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ฒด๋ฅผ ๋ปํ๋ค.
๋ฐ๋ผ์ Garbage Collector๋ฅผ ํ ๋จ์ด๋ก ํํํ์๋ฉด "์ฐ๋ ๊ธฐ ๊ฐ์ฒด ์ ๋ฆฌ์" ์ ๋๋ก ํํํ ์ ์๋ค.
GC ๋์
GC๋ Heap ์์ญ์ ๋์์ผ๋ก ํ๋ค. GC์ ์ฒ๋ฆฌ ๊ณผ์ ์ ๋ณด๊ธฐ ์ํด์, Heap ์์ญ์ ๋ํด ์ดํด๋ณด์.
Heap์ ์ฒ์ ์ค๊ณ๋ ๋ 2๊ฐ์ง ์ ์ ๋ก ์ค๊ณ๋์๋ค.
1. ๋๋ถ๋ถ์ ๊ฐ์ฒด๋ ๊ธ๋ฐฉ ์ ๊ทผ ๋ถ๊ฐ๋ฅํ ์ํ(Unreachable)๊ฐ ๋๋ค.
2. ์ค๋๋ ๊ฐ์ฒด์์ ์๋ก์ด ๊ฐ์ฒด๋ก์ ์ฐธ์กฐ๋ ์์ฃผ ์ ๊ฒ ์กด์ฌํ๋ค.
์ฆ, ๊ฐ์ฒด๋ ๋๋ถ๋ถ ์ผํ์ฑ์ด๋ฉฐ ๋ฉ๋ชจ๋ฆฌ์ ์ค๋ซ๋์ ๋จ์์๋ ๊ฒฝ์ฐ๋ ๋๋ฌผ๋ค๋ ๊ฒ์ด๋ค.
์ด๋ฌํ ํน์ฑ์ ์ด์ฉํด JVM ๊ฐ๋ฐ์๋ค์ ๋ณด๋ค ํจ์จ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํด ๊ฐ์ฒด์ ์์กด ๊ธฐ๊ฐ์ ๋ฐ๋ผ ๋ฌผ๋ฆฌ์ ์ธ Heap ์์ญ์ ๋๋๊ฒ ๋์๊ณ Young ์์ญ๊ณผ Old ์์ญ์ผ๋ก ์ค๊ณํ์๋ค. (์ด๊ธฐ์๋ Permanet ์์ญ๋ ์์์ง๋ง Java 8๋ถํฐ ์ ๊ฑฐ๋์๋ค.)
New/Young ์์ญ
- Eden: ์๋ก์ด ๊ฐ์ฒด๊ฐ ์์ฑ๋์์ ๋ ์ต์ด๋ก ์ ์ฅ๋๋ ์์ญ
- Survivor 0 / 1: Eden ์์ญ์์ ๊ณ์ํด์ ์ฐธ์กฐ๋๋(Reachable) ๊ฐ์ฒด๋ค์ด ๋ณต์ฌ๋๋ ์์ญ
๋๋ถ๋ถ์ ๊ฐ์ฒด๊ฐ ๊ธ๋ฐฉ Unreachable ์ํ๊ฐ ๋๊ธฐ ๋๋ฌธ์, ๋ง์ ๊ฐ์ฒด๊ฐ Young ์์ญ์ ์์ฑ๋์๋ค๊ฐ ์ฌ๋ผ์ง๋ค.
Eden ์์ญ์ ๊ฐ์ฒด๊ฐ ๊ฐ๋ ์ฐจ๊ฒ ๋๋ฉด Minor GC๊ฐ ๋ฐ์ํ๋ค.
Eden ์์ญ์ ์๋ ๊ฐ๋ค์ Survivor ์์ญ์ ๋ณต์ฌํ๊ณ ์ด ์์ญ์ ์ ์ธํ ๋๋จธ์ง ์์ญ์ ๊ฐ์ฒด๋ฅผ ์ญ์ ํ๋ค.
๋ฐ๋ผ์ Survivor ์์ญ์๋ ์ต์ 1๋ฒ์ GC์์ ์ด์๋จ์ ๊ฐ์ฒด๋ค์ด ์กด์ฌํ๋ค.
Old ์์ญ
Young ์์ญ์์ ๊ณ์ํด์ ์ฐธ์กฐ๋๋ ๊ฐ์ฒด๋ค์ด ๋ณต์ฌ๋๋ ์์ญ์ด๋ค.
Young ์์ญ๋ณด๋ค ํฌ๊ฒ ํ ๋น๋๋ฉฐ, ์์ญ์ ํฌ๊ธฐ๊ฐ ํฐ ๋งํผ ๊ฐ๋น์ง๋ ์ ๊ฒ ๋ฐ์ํ๋ค.
Old ์์ญ์ด ๊ฝ ์ฐผ์ ๋ Full(=Major) GC๊ฐ ๋ฐ์ํ๋ค. Full GC๊ฐ ์ผ์ด๋จ๊ณผ ๋์์ ์ฑ๋ฅ์ด ๊ธ๊ฒฉ์ด ์ ํ๋๋ค.
Old ์์ญ์ด Young ์์ญ๋ณด๋ค ํฌ๊ฒ ํ ๋น๋๋ ์ด์ ๋,
Young ์์ญ์ ์๋ช ์ด ์งง์ ๊ฐ์ฒด๋ค์ ํฐ ๊ณต๊ฐ์ ํ์๋ก ํ์ง ์์ผ๋ฉฐ, ํฐ ๊ฐ์ฒด๋ค์ Young ์์ญ์ด ์๋๋ผ ๋ฐ๋ก Old ์์ญ์ ํ ๋น๋๊ธฐ ๋๋ฌธ์ด๋ค.
Permanent ์์ญ
ํด๋์ค๋ก๋์ ์ํด load ๋๋ ํด๋์ค, ๋ฉ์๋ ๋ฑ์ ๋ํ ๋ฉํ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ์์ญ์ด๋ค.
Java 7๊น์ง๋ ํ ์์ญ์ ์กด์ฌํ์ง๋ง Java 8๋ถํฐ Metaspace๋ก ๋์ฒด๋์๋ค.
Metaspace
Default๋ก ์ ํ๋ ํฌ๊ธฐ๋ฅผ ๊ฐ์ก๋ Permanet ์์ญ๋ณด๋ค ๋ ๋์ ์ด๋ฉฐ ํ์ํ ๋งํผ ํ์ฅ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก, ํด๋์ค ๋ฉํ๋ฐ์ดํฐ์ ๊ด๋ จ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
JVM์ ์ํด ๊ด๋ฆฌ๋๋ ํ ์์ญ์ด ์๋๋ผ, OS์์ ๊ด๋ฆฌ๋๋ Native ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์์นํ๋ค.
Metaspace๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์ดํฐ๋ธ ํ(Heap)์ ํ ๋น๋๋ฉฐ ๋ค์ดํฐ๋ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก JVM์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๋ ํฐ ์ ์ฐ์ฑ์ ์ ๊ณตํ๋ค.
GC์ ์ฒ๋ฆฌ ๊ณผ์
Minor GC
1. ์ฒ์ ์์ฑ๋ ๊ฐ์ฒด๋ Young Generation ์์ญ์ ์ผ๋ถ์ธ Eden ์์ญ์ ์์นํ๋ค.
2. ๊ฐ์ฒด๊ฐ ๊ณ์ ์์ฑ๋์ด Eden ์์ญ์ด ๊ฝ์ฐจ๊ฒ ๋๊ณ Minor GC๊ฐ ๋ฐ์ํ๋ค.
3. Mark ๋์์ ํตํด reachable ๊ฐ์ฒด๋ฅผ ํ์ํ๋ค.
4. Eden ์์ญ์์ ์ด์๋จ์ ๊ฐ์ฒด๋ 1๊ฐ์ Survivor ์์ญ์ผ๋ก ์ด๋ํ๋ค.
5. Eden ์์ญ์์ ์ฌ์ฉ๋์ง ์๋(unreachable) ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ (sweep)ํ๋ค.
6. ์ด์๋จ์ ๋ชจ๋ ๊ฐ์ฒด๋ค์ age๊ฐ์ 1์ฉ ์ฆ๊ฐ์ํจ๋ค.
7. ๋ ๋ค์ ์ ๊ท ๊ฐ์ฒด๊ฐ ์์ฑ๋์ด Eden ์์ญ์ ์์นํ๋ค.
8. Eden ์์ญ์ ์ ๊ท ๊ฐ์ฒด๋ค๋ก ๊ฐ๋ ์ฐจ๊ฒ ๋๋ฉด,
9. ๋ง์ฐฌ๊ฐ์ง๋ก Mark ๋์์ ํตํด reachable ๊ฐ์ฒด๋ฅผ ํ์ํ๋ค.
10. Marking ํ ๊ฐ์ฒด๋ค์ ๋น์ด์๋ Survivor 1 ์ผ๋ก ์ด๋์ํจ๋ค.
11. ์ฌ์ฉ๋์ง ์๋(unreachable) ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ (sweep)ํ๋ค.
12. ์ด์๋จ์ ๋ชจ๋ ๊ฐ์ฒด๋ค์ age๊ฐ์ 1์ฉ ์ฆ๊ฐ์ํจ๋ค.
Major GC
1. ๊ฐ์ฒด์ age๊ฐ ์๊ณ๊ฐ(์์๋ 5๋ก ์ค์ )์ ๋๋ฌํ๊ฒ ๋๋ฉด,
2. ์ด ๊ฐ์ฒด๋ค์ Old Generation์ผ๋ก ์ด๋๋๋ค. ์ด๋ฅผ promotion์ด๋ผ ๋ถ๋ฅธ๋ค.
3. 1~2๋ฒ ๊ณผ์ ์ด ๋ฐ๋ณต๋์ด Old Generation ์์ญ์ ๊ณต๊ฐ์ด ๊ฐ๋์ฐจ๋ฉด Major GC๊ฐ ๋ฐ์ํ๋ค. Major GC๋ ๋จ์ํ๊ฒ Old ์์ญ์ ์๋ ๋ชจ๋ ๊ฐ์ฒด๋ค์ ๊ฒ์ฌํ์ฌ ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด๋ค์ ํ๊บผ๋ฒ์ ์ญ์ ํ๋ค.
Old ์์ญ์ Young ์์ญ๋ณด๋ค ํฐ ๊ณต๊ฐ์ ๊ฐ์ง๊ณ ์์ด, ์ด ๊ณต๊ฐ์์ ๋ฉ๋ชจ๋ฆฌ ์์ ๊ฐ์ฒด ์ ๊ฑฐ์ ๋ง์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ฒ ๋๋ค. ๋ฐ๋ผ์ Major GC๊ฐ ๋ฐ์ํจ๊ณผ ๋์์ ์ฑ๋ฅ์ด ๊ธ๊ฒฉํ ์ ํ๋๋ค.
์ ๋ฆฌ
์๋ก์ด ๊ฐ์ฒด๊ฐ ์์ฑ๋์์ ๋ Eden ์์ญ์ ์ ์ฅ๋๋ฉฐ ๊ณ์ํด์ ์ด์๋จ์(reachable) ๊ฐ์ฒด๋ ์ ์ฐจ Old ์์ญ์ผ๋ก ์ด๋ํ๋ค.
New/Young ์์ญ์์ ๋ฐ์ํ๋ GC๋ฅผ Minor GC, Old ์์ญ์์ ๋ฐ์ํ๋ GC๋ฅผ Major GC ํน์ Full GC๋ผ๊ณ ํ๋ค.
์ฐธ๊ณ ์๋ฃ
[Java] Garbage Collection(๊ฐ๋น์ง ์ปฌ๋ ์ )์ ๊ฐ๋ ๋ฐ ๋์ ์๋ฆฌ (1/2)
โ ๊ฐ๋น์ง ์ปฌ๋ ์ ๋์ ์๋ฆฌ & GC ์ข ๋ฅ ๐ฏ ์ด์ ๋ฆฌ
[Java] JVM GC์ ์ฒ๋ฆฌ ๊ณผ์
Java - Perm ์์ญ์ด Metaspace๋ก ๋ฐ๋ ์ด์ ! [+ Heap Area, Native Memory ์ฐจ์ด]
'๐ฑ JAVA & SPRING > Java (JVM)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Java ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋ ๋ CPU๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ ๊น? (0) | 2023.08.28 |
---|---|
Java ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ ๊ณผ์ ๊ณผ JVM์ ๊ตฌ์กฐ (0) | 2023.08.24 |