๐ค ๊ฐ๋น์ง ์ปฌ๋ ์ , GC?
์๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐฉ๋ฒ์ผ๋ก, JVM(์๋ฐ ๊ฐ์ ๋จธ์ )์ Heap์์ญ์์ ๋์ ์ผ๋ก ํ ๋นํ๋ ๋ฉ๋ชจ๋ฆฌ ์ค ํ์ ์๊ฒ ๋ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ฒด(Garbage)๋ฅผ ๋ชจ์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ ๊ฑฐํ๋ ํ๋ก์ธ์ค๋ฅผ ๋งํฉ๋๋ค.
C, C++ ๊ฐ์ ์ธ์ด๋ GC๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํด์ ๋ฅผ ํด์ฃผ์ด์ผ ํฉ๋๋ค.
ํ์ง๋ง ์๋ฐ๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ํด์ ํ์ง ์๊ณ GC์ ์ํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๋ง ์ง์คํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
GC๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํด์ฃผ์ง๋ง, ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ธ์ ํด์ ๋๋์ง ์ ํํ๊ฒ ์ ์ ์์ด ์ ์ดํ๊ธฐ๊ฐ ํ๋ญ๋๋ค.
๋ํ GC๊ฐ ๋์ํ๋ ๋์์๋ ๋ค๋ฅธ ๋์์ ๋ฉ์ถ๊ธฐ ๋๋ฌธ์ ์ค๋ฒํค๋๊ฐ ๋ฐ์๋๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ด๋ฌํ ์ ๋ค๋ก ์ํฉ์ ๋ฐ๋ผ ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ์ด ํ๋ฝ์ํฌ ์ ์์ด ํ๋ก๊ทธ๋จ ๋์์ด ๋ฉ์ถ๋(Stop The world)์๊ฐ์ ์ต์ํํ ์ ์๋๋ก GC์ต์ ํ ์์ ์ด ํ์ํ ์ ์์ต๋๋ค.
๐Stop The World
GC๊ฐ ์๋ํ๋ ๋์ JVM์ด ์ดํ๋ฆฌ์ผ์ด์ ์ ์คํ์ ์ผ์์ ์ผ๋ก ๋ฉ์ถ๋ ํ์์ ๋งํฉ๋๋ค.
โ GC๋ ์ด๋ค ๊ฐ์ฒด๋ฅผ Garbage๋ก ํ๋จํ ๊น์?
๐ก Reachability(๋๋ฌ ๊ฐ๋ฅ์ฑ)
GC๋ Reachability๋ผ๋ ๊ฐ๋ ์ ํตํด ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐ๋๊ธฐ ์ ์ ํด๋น ๊ฐ์ฒด๊ฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋์ง๋ฅผ ํ๋จํฉ๋๋ค.
๊ฐ์ฒด๊ฐ ์ง์ ์ ์ธ ์ฐธ์กฐ(Reference)๊ฐ ์กด์ฌํ๋ค๋ฉด ์ฆ Reachableํ๋ค๋ฉด ํด๋น ๊ฐ์ฒด๋ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐ๋์ง ์์ต๋๋ค.
๋ฐ๋๋ก ๊ฐ์ฒด๊ฐ ์ฐธ์กฐ๋๊ณ ์์ง ์์ ์ํ๋ผ๋ฉด ์ฆ Unreachable ํ๋ค๋ฉด GC์ ๋์์ด ๋์ด ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐ๋ฉ๋๋ค.
์ ๊ทธ๋ฆผ์ฒ๋ผ JVM์ Heap Area์๋ ์ค์ง์ ์ธ ๊ฐ์ฒด๊ฐ ์์ฑ๋๊ณ Method Area, Stack Area์์๋ ๊ทธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ณ ์์ต๋๋ค.
Heap Area์ A๊ฐ์ฒด์ B๊ฐ์ฒด๋ ์ฐธ์กฐ๋๊ณ ์์ต๋๋ค, ์ฆ Reachable ํ๊ธฐ ๋๋ฌธ์ GC์ ๋์์ด ๋์ง ์์ต๋๋ค.
ํ์ง๋ง ํน์ ๋์์ผ๋ก ์ฐธ์กฐ ๋ณ์๊ฐ ์ญ์ ๋๋(C๊ฐ ์ญ์ ) ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค๋ฉด Heap Area์ C ๊ฐ์ฒด๋ ์ฐธ์กฐ๋๊ณ ์์ง ์๊ฒ ๋ฉ๋๋ค, ์ฆ Unreachable ํ๊ฒ ๋์ด GC์์ ๋์์ผ๋ก ํ๋จํ์ฌ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐ๋ฉ๋๋ค.
โGC๋ ๊ฐ์ฒด๋ฅผ ์ด๋ป๊ฒ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐํ ๊น์?
๐ก Mark and Sweep
GC๋ Mark and Sweep๋ผ๋ ๊ณผ์ ์ ํตํด GC์ ๋์์ด ๋๋ ๊ฐ์ฒด๋ฅผ ์๋ณ(Mark) ํ๊ณ ์ ๊ฑฐ(Sweep)ํฉ๋๋ค.
๊ทธ ํ ์ฑ์(Compaction)์ ํตํด ํํธํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์์์๋ถํฐ ์ฑ์ ๋๊ฐ๋๋ค.
Mark : Root Space๋ก๋ถํฐ ๊ทธ๋ํ ์ํ๋ฅผ ํตํด ์ฐ๊ฒฐ๋ ๊ฐ์ฒด๋ค์ ์ฐพ์๋ด์ด ๊ฐ๊ฐ ์ด๋ค ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ณ ์๋์ง ๋งํนํฉ๋๋ค.
Sweep : ์ฐธ์กฐํ๊ณ ์์ง ์์ ๊ฐ์ฒด ์ฆ Unreachable ๊ฐ์ฒด๋ค์ Heap Area์์ ์ ๊ฑฐํฉ๋๋ค.
Compaction : Sweep์ดํ ๋ถ์ฐ๋ ๊ฐ์ฒด๋ค์ Heap์ ์์ ์ฃผ์๋ก ๋ชจ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋ ๋ถ๋ถ๊ณผ ๊ทธ๋ ์ง ์์ ๋ถ๋ถ์ผ๋ก ์์ถํฉ๋๋ค.
โ GC์ ๋์ ๊ณผ์ ๊ณผ ์ข ๋ฅ
๐ก Heap ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
Heap์์ญ์ ์ฒ์ ์ค๊ณ๋ ๋ 2๊ฐ์ง๋ฅผ ์ ์ ๋ก ์ค๊ณ๋์์ต๋๋ค.
1. ๋๋ถ๋ถ์ ๊ฐ์ฒด๋ ๊ธ๋ฐฉ ์ ๊ทผ ๋ถ๊ฐ๋ฅํ ์ํ(Ureachable)๊ฐ ๋๋ค.
2. ์ค๋๋ ๊ฐ์ฒด์์ ์๋ก์ด ๊ฐ์ฒด๋ก์ ์ฐธ์กฐ๋ ์์ฃผ ์ ๊ฒ ์กด์ฌํ๋ค.
์ด๋ฌํ ์ ์ ๋ก JVM๊ฐ๋ฐ์๋ค์ ๋ณด๋ค ํจ์จ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํด, ๊ฐ์ฒด์ ์์กด๊ธฐ๊ฐ์ ๋ฐ๋ผ ๋ฌผ๋ฆฌ์ ์ธ Heap์์ญ์ ๋๋๊ฒ ๋์๊ณ Young ๊ณผ Old ์ด 2๊ฐ์ง ์์ญ์ผ๋ก ์ค๊ณํ์์ต๋๋ค.
๐ Young Generation
Eden : new๋ฅผ ํตํด ์๋ก ์์ฑ๋ ๊ฐ์ฒด๊ฐ ์์นํฉ๋๋ค.
Survivor
Eden์์ญ์ ๋ฐ์ดํฐ๊ฐ ๊ฐ๋ ์ฐจ๋ฉด Garbage Collection์ด ๋ฐ์ํ๊ณ , Eden์์ญ์ ์๋ ์ด์๋จ์ ๊ฐ์ฒด๊ฐ Survivor1 ๋๋ 2๋ก ์ฎ๊ฒจ์ง๊ณ , ๋ ๊ฐ์ Survivor์์ญ ์ค ํ๋์ ์์ญ์ด ๊ฐ๋ ์ฐจ๊ฒ ๋๋ฉด ๊ณต๊ฐ์ด ๋จ์ ์๋ Survivor์์ญ์ผ๋ก ์ด๋ํ๊ฒ ๋ฉ๋๋ค.
( ์ด๋ฌํ ๋ฉ์ปค๋์ฆ์ผ๋ก Survivor1 ๋๋ Survivor2 ๋ ์ค ํ๋๋ ํญ์ ๋น์ด์๋ ๊ณต๊ฐ์ผ๋ก ์ ์ง๋ฉ๋๋ค. )
์ด๋ฌํ ๊ณผ์ ์์ 1์ฐจ GC๋ผ๊ณ ๋ถ๋ฆฌ๋ Minor GC๊ฐ ๋ฐ์ํฉ๋๋ค.
๐ก Minor C
Young Generation์์ญ์์ ๋ฐ์ํ๋ GC๋ก Eden์์ญ ๋๋ Survivor์์ญ์์ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด๋ค์ ์ญ์ ํฉ๋๋ค.
Young Generation์ ๊ณต๊ฐ์ Old Generation์ ๋นํด ์๋์ ์ผ๋ก ์๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์์ ๊ฐ์ฒด๋ฅผ ์ฐพ์ ์ ๊ฑฐํ๋๋ฐ ์ ์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ฉฐ, ์ด ๋๋ฌธ์ Young Generation์์ญ์์ ๋ฐ์๋๋ GC๋ฅผ Minor GC๋ผ๊ณ ๋ถ๋ฆฝ๋๋ค.
๐ Old Generation
Survivor1๊ณผ Survivor2์์ญ์ ์ค๊ฐ๋ ๊ณผ์ ์์ ์ค๋ซ๋์ ์ด์๋จ์ ๊ฐ์ฒด๋ค์ Old Generation ์์ญ์ผ๋ก ์ด๋ํฉ๋๋ค.
๐ค ์ผ๋ง๋ ์ค๋ซ๋์ ์ด์๋จ์์ผ ํ ๊น?
Young Generation ์์ญ์์ Minor GC๊ฐ ๋ฐ์ํ๋ ๋์ ์ผ๋ง๋ ์ค๋ ์ด์๋จ์๋์ง๋ก ํ๋จํฉ๋๋ค.
๊ฐ ๊ฐ์ฒด๋ Minor GC์์ ์ด์๋จ์ ํ์๋ฅผ ๊ธฐ๋กํ๋ age bit๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, Minor GC๊ฐ ๋ฐ์ํ ๋๋ง๋ค age bit๊ฐ์ 1์ฉ ์ฆ๊ฐํ๊ฒ ๋ฉ๋๋ค.
age bit๊ฐ ์ค์ ๋ ์๊ณ๊ฐ์ ์ด๊ณผ ํ๊ฒ๋๋ฉด Old Generation ์์ญ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ด๋ํ๊ฒ ๋ฉ๋๋ค.
ํ์ง๋ง ๊ฐ์ ์ด๊ณผํ์ง ์๋๋ผ๋ Survivor์์ญ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ์๋ ๋ฏธ๋ฆฌ Old Generation์ผ๋ก ๊ฐ์ฒด๊ฐ ์ฎ๊ฒจ์ง ์ ์์ต๋๋ค.
๐ก Major GC(Full GC)
Old Generation์์ญ์ ๋ฐ์ดํฐ๊ฐ ๊ฐ๋ ์ฐจ๋ฉด GC๋ฅผ ์คํํ๊ฒ ๋๋๋ฐ ์ด๊ฒ์ Major GC๋ผ๊ณ ํฉ๋๋ค.
Old Generation ์์ญ์ Young Generation์์ญ์ ๋นํด ์๋์ ์ผ๋ก ํฐ ๊ณต๊ฐ์ ๊ฐ์ง๊ณ ์์ด, ์ด ๊ณต๊ฐ์์ ๋ฉ๋ชจ๋ฆฌ ์์ ๊ฐ์ฒด ์ ๊ฑฐ์ ๋ง์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ฒ ๋ฉ๋๋ค.
์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
Young Generation์์ญ์ ํฌ๊ธฐ๊ฐ ์๊ธฐ๋๋ฌธ์ Minor GC๊ณผ์ ์ด ๋น ๋ฅธ์๊ฐ์์ ๋๋ฉ๋๋ค.
ํ์ง๋ง Old Generation์ ๊ฒฝ์ฐ ํฐ ๊ณต๊ฐ์ ์ฐจ์งํ๊ณ ์์ด Major GC๊ณผ์ ๋ ์ค๋ ๊ฑธ๋ฆฌ๊ฒ ๋ฉ๋๋ค.
์ฆ GC๊ณผ์ ์ด ์ค๋๊ฑธ๋ฆฌ๋ฉด์ ์์์ ์ธ๊ธํ Stop The World ๋ฌธ์ ๊ฐ ๊ธธ์ด์ง๊ฒ ๋ฉ๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์๋ฐ ๊ฐ๋ฐ์ง๋ค์ ๋ค์ํ GC์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋ฐํ์์ต๋๋ค. ( ZGC, G1, Parallel, ... )
์ํฉ์ ๋ง๊ฒ GC์๊ณ ๋ฆฌ์ฆ์ ์ค์ ํ์ฌ Stop The World๋ฅผ ์ต์ํ์ผ๋ก ์ค์ฌ ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ ์ ํ๋ฅผ ๋ง์ ์ ์์ต๋๋ค.
๐ Reference
'CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ์๋ฐ ๊ฐ์ ๋จธ์ JVM์ด๋ ๋ฌด์์ผ๊น์? (0) | 2024.03.20 |
---|