0.๐ถ๋ค์ด๊ฐ๋ฉฐ
์ด์ ๊ธ์์ JVM์ ์ค์ํ ์ญํ ์ค ํ๋๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ผ๊ณ ์๊ฐํ์ต๋๋ค. ์๋ฐ์์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๊ฐ๋น์ง ์ปฌ๋ ํฐ(GC)๋ฅผ ์ฌ์ฉํด ์๋์ผ๋ก ์ํํฉ๋๋ค. ์ด๋ฒ ๊ธ์์๋ GC์ ๋ํด ์๊ฐํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
1.๐ปGarbage Collection(GC)์ด๋?
ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๋ค ๋ณด๋ฉด ์ ํจํ์ง ์์ ๋ฉ๋ชจ๋ฆฌ์ธ ๊ฐ๋น์ง๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค. C์ธ์ด๋ฅผ ์ด์ฉํ๋ฉด free()๋ผ๋ ๋ฉ์๋๋ฅผ ํตํด ์ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํด์ฃผ์ด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ๊ณ ์ด๋ ๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๋ค.
ํ์ง๋ง Java๋ฅผ ์ด์ฉํด ๊ฐ๋ฐํ๋ ๊ณผ์ ์์ ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ฅผ ํด๋ณด์ ๊ธฐ์ต์ด ๋ณดํต์ ์์ผ์ค ๊ฒ๋๋ค. ๊ทธ ์ด์ ๋ JVM์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋ถํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์์ ์ ๋ฆฌํด์ฃผ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ผ๋ ๊น๋ค๋ก์ด ๋ถ๋ถ์ JVM์ ๋ชจ๋ ๋งก๊ฒจ๋ฒ๋ฆฌ๋ ๊ฒ์ด์ฃ .
Java์ GC๋ ๋์ ๋ฐฉ์์ ๋ฐ๋ผ ๋งค์ฐ ๋ค์ํ ์ข ๋ฅ๊ฐ ์์ง๋ง ๊ณตํต์ ์ผ๋ก ๋ค์ 2๊ฐ์ง ์์ ์ ์ํํฉ๋๋ค. 2๊ฐ์ง ์์ ์ ๊ฐ๊ฐ Mark, Sweep์ด๋ผ ํ๊ณ Garbarge Collection์ Mark and Sweep ์ด๋ผ๊ณ ๋ ํฉ๋๋ค.
- Heap ๋ด์ ๊ฐ์ฒด ์ค์์ garbage๋ฅผ ์ฐพ์๋ธ๋ค. (Mark)
- ์ฐพ์๋ธ garbage๋ฅผ ์ฒ๋ฆฌํด์ heap์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ๋ค. (Sweep)
# garbage๋?
- Heap ์์ญ์ ์ค๋ธ์ ํธ ์ค stack์์ ๋๋ฌ ๋ถ๊ฐ๋ฅํ(Unreachable) ์ค๋ธ์ ํธ๋ค์ ๋งํฉ๋๋ค.
2.๐งนGarbage Collection ๊ณผ์
JVM์ heap์์ญ์์ ๊ฐ์ฒด๋ค์ ๊ด๋ฆฌํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด heap ๋ด์์๋ ์์ญ์ ๋๋ ์ ๊ด๋ฆฌํฉ๋๋ค.
๊ด์ฌ ๊ฐ์ง ๋ถ๋ถ์ Young generation๊ณผ Old generation์ ๋๋ค. ๋จ์ด๋ง ๋ด๋ ์ ์ถํ ์ ์๋ฏ Young generation์๋ ์๊ธด์ง ์ผ๋ง ์ ๋ ๊ฐ์ฒด๋ค์ด, Old generation์๋ ์๊ธด ์ง ์ค๋๋ ๊ฐ์ฒด๋ค์ด ์ ์ฅ๋ฉ๋๋ค.
Garbage Collection ๊ณผ์ ์ ์ดํด๋ณด๋ฉฐ ์ด์ ๋ํด ์ข ๋ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1) Young generation์์์ GC (Minor GC)
GC๋ฅผ ์ดํดํ๊ธฐ ์ํด ๋๋ถ๋ถ์ ์ ์ ๊ฐ์ฒด๋ค์ด ์ ์ฅ๋๋ Young ์์ญ์ ๋ํด ์ดํด๋ณด๊ฒ ์ต๋๋ค. Young ์์ญ์์ ๋ฒ์ด์ง๋ GC๋ฅผ Minor GC๋ผ๊ณ ์ง์นญํจ์ ๋จผ์ ์๋ฆฌ๊ณ ๊ธ์ ์งํํด๋ณด๊ฒ ์ต๋๋ค.
Young ์์ญ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด 3๊ฐ์ ์์ญ์ผ๋ก ๋๋ฉ๋๋ค.
- Eden ์์ญ
- Survival ์์ญ 2๊ฐ
๊ทธ๋ฌ๋ฉด ์ด์ Young ์์ญ์ ๋ํด Minor GC๊ฐ ์ด๋ป๊ฒ ์ผ์ด๋๋์ง ์์์ ๋ฐ๋ผ ์ค๋ช ํด๋ณด๊ฒ ์ต๋๋ค.
- ์๋ก ์์ฑ๋ ๋๋ถ๋ถ์ ๊ฐ์ฒด๋ Eden ์์ญ์ ์์นํ๊ฒ ๋ฉ๋๋ค.
- ๊ฐ์ฒด๊ฐ ๊ณ์ํ์ฌ ์์ฑ๋์ด Eden ์์ญ์ด ๋ค ์ฐจ๊ฒ ๋๋ฉด Minor GC๊ฐ ์ผ์ด๋๊ณ ์ฌ๊ธฐ์ ์ด์๋จ์ ๊ฐ์ฒด๋ Survivor ์์ญ ์ค ํ๋๋ก ์ด๋ํฉ๋๋ค. (๊ฐ์ : Survivor ์์ญ ๋ ๊ฐ ์ค ๋ฐ๋์ ํ๋์ ์์ญ์ ๋น์ด์๋ค.)
- ์ ๊ณผ์ ์ด ๋ฐ๋ณต๋๋ฉด ๋น์ด์์ง ์์ Survivor ์์ญ์ด ๊ฐ๋ ์ฐจ๊ฒ ๋ฉ๋๋ค. ์ด๋ ๋ค์ ํ๋ฒ Minor GC๊ฐ ์ผ์ด๋๊ณ ์ด์๋จ์ ๊ฐ์ฒด๋ค์ด ๋น์ด์๋ Survivor ์์ญ์ผ๋ก ์ด๋ํ๊ฒ ๋ฉ๋๋ค. ์ฆ, ์ด์ ์ ์ฌ์ฉํ๋ Survivor ์์ญ์ ๋น์์ง๋๋ค.
- ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค๊ฐ ๊ณ์ํด์ ์ด์๋จ์ ์๋ ๊ฐ์ฒด๋ Old ์์ญ์ผ๋ก ์ด๋ํ๊ฒ ๋ฉ๋๋ค. ์ด ๊ณผ์ ์ Promotion์ด๋ผ๊ณ ํฉ๋๋ค.
์ด ๊ณผ์ ์ ๊ทธ๋ฆผ์ผ๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
2) Old generation์์์ GC (Major GC)
Minor GC๊ฐ ๊ณ์ ์ผ์ด๋ Old generation ์์ญ์ผ๋ก Promotion ๋๋ ๊ฐ์ฒด๊ฐ ๋ง์์ง๋ฉด Old ์์ญ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํด์ง ์ ์์ต๋๋ค. ์ด๋ ์ผ์ด๋๋ GC๊ฐ ๋ฐ๋ก Major GC์ ๋๋ค. Young ์์ญ์ ์ผ๋ฐ์ ์ผ๋ก ํฌ๊ธฐ๊ฐ Old ์์ญ๋ณด๋ค ํฌ๊ธฐ๊ฐ ์์ GC๊ฐ ๊ธ๋ฐฉ ๋๋๋ ๋ฐ๋ฉด Old ์์ญ์ ํฌ๊ธฐ๊ฐ ์ปค GC ํ๋๋ฐ ๋๋ ๋น์ฉ์ด ํฝ๋๋ค.
3.๐Garbage Collection ์ข ๋ฅ
Garbage Collection๋ ๋ฐฉ์์ ๋ฐ๋ผ ์ฒ๋ฆฌ ์ ์ฐจ๊ฐ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค. JVM ๋ฒ์ ์ด ์ฌ๋ผ๊ฐ์ ๋ฐ๋ผ ์ฌ๋ฌ ๊ฐ์ง GC ๋ฐฉ์์ด ์ถ๊ฐ๋๊ณ ๋ฐ์ ๋์ด์๋ค๊ณ ํฉ๋๋ค. ์ํฉ์ ๋ง๊ฒ GC๋ฅผ ์ ํํ๋ ๊ฒ๋ ์ค์ํ๊ณ ํ๋๋ฐ์.
์ด ๋ถ๋ถ์ ๊ฒฝ์ฐ ์ด๋๊น์ง ๋ด์ฉ ์ ๋ฆฌ๋ฅผ ํด์ผ ํ ๊น ๊ณ ๋ฏผํ๋ค ํ์ฌ ์ ์ค๋ ฅ์ผ๋ก๋ ์ด๋ฐ์ด๋ฐ ์ข ๋ฅ๊ฐ ์๊ตฌ๋ ์ด๋ฆ ์ ๋๋ง ์์๋๊ณ ์ถํ ํ์ํด์ง๋ฉด ์ถ๊ฐ์ ์ผ๋ก ์ ๋ฆฌํ๊ธฐ๋ก ํ์ต๋๋ค. ํน์ ์ด ๋ถ๋ถ์ ๋ํ ๋ด์ฉ์ด ํ์ํ์๋ฉด ์๋ ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒ์ํ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค!
- Serial GC
- Parallel GC
- Parallel Old GC(Parallel Compacting GC)
- Concurrent Mark & Sweep GC(์ดํ CMS)
- G1(Garbage First) GC
4.๐จ๋๊ฐ๋ฉฐ
์ด๋ฒ ๊ธ์์๋ ์๋ฐ์์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์๋์ผ๋ก ํด์ฃผ๋ JVM์ GC์ ๋ํด ์์๋ณด์์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ์๋นํ ๊ท์ฐฎ์ ์ ์๋ ๋ถ๋ถ์ธ๋ฐ ์ด๋ฅผ ๋ฌด์ฌ์ฝ ์ฐ์ง ๋ง๊ณ ์๋ฐ์ ๋ ธ๊ณ ๋ฅผ ์์์ค์ผ๊ฒ ์ต๋๋ค,,
๋ํ ๋ด์ฉ์ ์ฐพ์๋ณผ์๋ก GC๋ ์ฌ์คํ๊ณ ์ด๋ ค์ด ๋ด์ฉ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ์ฐ์ ์ ์ ๋ฆฌํ ๋ด์ฉ์ ๋จธ๋ฆฟ์์ ์ ๋ด์๋๊ณ ์ถํ ๋ ์์ธํ ์์๋ณผ ์ ์๋ ๊ธฐํ๊ฐ ๋๋ฉด ๊ด๋ จ ๊ธ์ ๋ ์์ฑํด๋ณด๊ฒ ์ต๋๋ค.
Reference
๋ค์ด๋ฒ D2 Java Garbage Collection
๋ค์ด๋ฒ D2 Java Reference์ GC
Oracle Java Garbage Collection Basics
'Java & Kotlin' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ๋๊ธฐํ - synchronized์ volatile, Atomic Class์ ๋ํ์ฌ. (0) | 2022.03.06 |
---|---|
[Java] ArrayList๋ ์ด๋ป๊ฒ ํฌ๊ธฐ๊ฐ ๊ฐ๋ณ์ ์ผ๊น? (2) | 2022.02.23 |
[Java] JVM์ ๋ํ์ฌ. (0) | 2022.02.15 |
[Java]โ๏ธ๋ง์ปค ์ธํฐํ์ด์ค์ ๋ํ์ฌ. (1) | 2022.02.12 |
[Java] ์ ๋ถ๋ชจ ํด๋์ค์ ์ฐธ์กฐ ๋ณ์๊ฐ ์์ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ ๊น? (1) | 2022.02.12 |