[JAVA] GC(Garbage collector, Garbage collection)Web_Backend/Java2023. 6. 15. 13:22
Table of Contents
GC(Garbage collector)๋?
๐ ์๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐฉ๋ฒ ์ค ํ๋๋ก JVM์ Heap ์์ญ์์ ๋ถํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์ญ์ ํ๋, ์ฆ Garbage collection์ ํด์ฃผ๋ ํ๋ก์ธ์ค๋ฅผ ๋งํจ.
Mark and sweep๊ณผ Stop The World๋ฅผ ํตํจ.
-
- JAVA์์ ๊ฐ์ฒด๋ค์ ์ค์ง์ ์ผ๋ก Heap์์ญ์ ์์ฑ๋๊ณ Method Area๋ Stack Area, Root Area์์๋ Heap์ ์์ฑ๋ ๊ฐ์ฒด์ ์ฃผ์๋ง ์ฐธ์กฐํ๋ ํ์ GC์ ๋์
- Heap ์์ญ์ ์๋ ๊ฐ์ฒด๋ค ์ค ์ด๋์๋ ์ฐธ์กฐํ๊ณ ์์ง ์๋ (Unreachableํ) ๊ฐ์ฒด GC์ ๋์
- ๊ฐ๋ฐ์๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ, ๋ฉ๋ชจ๋ฆฌ ๋์(Memory Leak)์ ๋ํด์ ์๋ฒฝํ๊ฒ ๊ด๋ฆฌํ์ง ์์๋ ๋๋ฉฐ, ๊ฐ๋ฐ๊ณผ ๋น์ฆ๋์ค ๋ก์ง์๋ง ๋ ์ง์คํ ์ ์์
- JVM์ ๊ธฐ๋ณธ์ผ๋ก ํ์ฌ๋์ด์๋ Garbage collector๊ฐ Garbage Collection์ ๋์ ํด ์ฃผ๊ธฐ ๋๋ฌธ
- ๋จ์
- ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ธ์ ํด์ ๋๋์ง ๊ฐ๋ฐ์๊ฐ ์ ์ ์์
- Java์์๋ GC๋ฅผ System.gc()๋ฅผ ์ด์ฉํด ํธ์ถํ ์ ์์ง๋ง, ํด๋น ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ฒ์ ์์คํ ์ ์ฑ๋ฅ์ ๋งค์ฐ ํฐ ์ํฅ์ ๋ฏธ์น๋ฏ๋ก ํธ์ถํด์๋ ์๋จ
- GC๊ฐ ๋์ํ๋ ๋์ Stop the world๋ก ์ธํด ๋ค๋ฅธ ๋์์ ๋ฉ์ถ๊ธฐ ๋๋ฌธ์ ์ค๋ฒํค๋ ๋ฐ์
- ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ธ์ ํด์ ๋๋์ง ๊ฐ๋ฐ์๊ฐ ์ ์ ์์
Young/Old Generation, Minor/Major GC
Young Generation
- Eden, Survival๋ก ์ด๋ฃจ์ด์ ธ ์์
- Eden : ์๋กญ๊ฒ ์์ฑ๋ ๊ฐ์ฒด๊ฐ ํ ๋น(Allocation)๋๋ ์์ญ
- Survival1,2 : Eden์ด ๊ฝ ์ฐผ์ ๊ฒฝ์ฐ ์คํ๋๋ GC์์ ์ด์๋จ์ ๊ฐ์ฒด๊ฐ ์ ์ฅ๋๋ ์์ญ
- ๋๋ถ๋ถ์ ๊ฐ์ฒด๊ฐ ๊ธ๋ฐฉ Unreachable๋๊ธฐ ๋๋ฌธ์, ๋ง์ ๊ฐ์ฒด๊ฐ ํด๋น ์์ญ์ ์์ฑ๋์๋ค๊ฐ ๊ธ๋ฐฉ ์ฌ๋ผ์ง
- Young Generation์ ๋ํ Garbage Collection์ Minor GC๋ผ๊ณ ํจ
Old Generation
- Young์์ญ์์ Reachable์ ์ ์งํ๋ฉฐ ์ค๋ ์ด์๋จ์ ๊ฐ์ฒด๊ฐ ๋ณต์ฌ๋๋ ์์ญ
- Young์์ญ๋ณด๋ค ํฌ๊ฒ ํ ๋น๋๋ฉฐ, Garbage๋ ์ ๊ฒ ๋ฐ์
- Old Generation์ ๋ํ Garbage Collection์ Mager GC๋ผ๊ณ ํจ
Mark and sweep์ด๋?
โ Garbage Collection์ด ๋์ํ๋ ์๋ฆฌ๋ก, 3๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ์คํ๋จ
- Mark : Root๋ก๋ถํฐ ๊ทธ๋ํ ์ํ๋ฅผ ํตํด ์ฐ๊ฒฐ๋ ๊ฐ์ฒด๋ค์ ์ฐพ์๋ด์ด ๊ฐ๊ฐ ์ด๋ค ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ณ ์๋์ง ์ฐพ์์ ๋งํน
- Sweep : ์ฐธ์กฐํ๊ณ ์์ง ์์ ๊ฐ์ฒด(Unreachable)์ Heap์์ ์ ๊ฑฐ
- Compact : Sweep ํ์ ๋ถ์ฐ๋ ๊ฐ์ฒด๋ค์ Heap์ ์์์ฃผ์๋ก ๋ชจ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋ ๋ถ๋ถ๊ณผ ๊ทธ๋ ์ง ์์ ๋ถ๋ถ์ผ๋ก ์์ถ(GC์ข ๋ฅ์ ๋ฐ๋ผ ์คํ๋์ง ์๋ ๊ฒฝ์ฐ๋ ์์)
Stop The World๋?
โ GC๋ฅผ ์คํํ๊ธฐ ์ํด JVM์ด ์ดํ๋ฆฌ์ผ์ด์ ์คํ์ ๋ฉ์ถ๋ ๊ฒ
GC๊ฐ ์คํ๋๋ฉด GC๋ฅผ ์คํํ๋ ์ฐ๋ ๋ ์ด์ธ์ ๋๋จธ์ง ์ฐ๋ ๋๋ ๋ชจ๋ ์์ ์ ๋ฉ์ถ๊ณ , GC์์ ์ด ์๋ฃ๋ ์ดํ์ ์์ ์ ์คํ
- GCํ๋ : stop-the-world์๊ฐ์ ์ค์ด๋ ๊ฒ
- GC๋ฅผ ํ๋ํ๋ ๊ฒ์ ์ต์ข ์ ์ธ ์๋จ์ผ๋ก ๋๊ณ Code Level์์ ํด๊ฒฐํ๋ ๊ฒ์ ๋ง์ ์ ๋ฌธ๊ฐ ๋ถ๋ค์ด ๊ถ๊ณ
G1GC (Garbage First Garbage Collector)๋?
โ ํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ง ๋ฉํฐ ํ๋ก์ธ์ ์์คํ ์์ ์ฌ์ฉํ๊ธฐ ์ํด ๊ฐ๋ฐ๋ GC
Young, Old ์์ญ์ ๋ช ํํ๊ฒ ๊ตฌ๋ถํ๋ ์ ํต์ ์ธ GC๋ค๊ณผ ๋ค๋ฅด๊ฒ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ตฌ๋ถํ์ง ์์
๊ฐ๋น์ง ์ปฌ๋ ํฐ์ STW์ ์ต์ํ ํ๋ฉด์, ๋ฐ๋ก ์ค์ ์ ํ์ง ์์๋ ๊ฐ๋ฅํ ํ ์ฒ๋ฆฌ๋์ ํ๋ณดํ๋ ๊ฒ.
→ STW์ ์ต์ํํ์ง๋ง ์์ ํ ์์ ์ง๋ ๋ชปํจ
'Web_Backend > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] collectionFramework_Set_HashSet์ด๋? (0) | 2023.09.18 |
---|---|
[JAVA] ์ฌ๊ทํจ์ vs ๋ฐ๋ณต๋ฌธ (0) | 2023.06.20 |
[JAVA] Stream API (0) | 2023.05.26 |
[JAVA] String, String Builder, String buffer ์ฐจ์ด (0) | 2023.03.19 |
[์ด๋ณด ๊ฐ๋ฐ์์ ๋์ ๋ฆฌ๋ทฐ] "๊ณ์ ๋ผ๊ณ ์์ฃผ ์ฐพ์๋ณผ ์๋ฐ ๊ต๋ณด์ฌ" ์ฝ๋ฉ ๊ฐ๋ ์ก๋ ์๋ฐ ์ฝ๋ฉ ๋ฌธ์ ์ง (0) | 2022.12.02 |
@Yanako :: Yana's coding story
์ผ๋์ ์ฝ๋ฉ ์ผ๊ธฐ์ฅ :) #์ฝ๋ฉ๋ธ๋ก๊ทธ #๊ธฐ์ ๋ธ๋ก๊ทธ #์ฝ๋ฉ #์กฐ๊ธ์ฉ,๊พธ์คํ
ํฌ์คํ ์ด ์ข์๋ค๋ฉด "์ข์์โค๏ธ" ๋๋ "๊ตฌ๋ ๐๐ป" ํด์ฃผ์ธ์!