์ต์ ๋ฐํ์ ์์คํ ์ ๊ตฌ๋ํ๋ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋น์ง ์ปฌ๋ ์ ์๊ณ ๋ฆฌ์ฆ์ ์ดํด๋ณด๊ณ , ์ ์ธ๊ณ์ ์ผ๋ก ์ค์ํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
๋ฐํ์ ์์คํ : ๊ฐ๋น์ง ์ปฌ๋ ์ ์๊ณ ๋ฆฌ์ฆ ์ฌ์ธต ๋ถ์
์ปดํจํ ์ ๋ณต์กํ ์ธ๊ณ์์ ๋ฐํ์ ์์คํ ์ ์ํํธ์จ์ด๋ฅผ ์์ํ๊ฒ ๊ตฌํํ๋ ๋ณด์ด์ง ์๋ ์์ง์ ๋๋ค. ๋ฆฌ์์ค๋ฅผ ๊ด๋ฆฌํ๊ณ , ์ฝ๋๋ฅผ ์คํํ๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํํ ์๋์ ๋ณด์ฅํฉ๋๋ค. ๋ง์ ์ต์ ๋ฐํ์ ์์คํ ์ ํต์ฌ์๋ ์ค์ํ ๊ตฌ์ฑ ์์์ธ ๊ฐ๋น์ง ์ปฌ๋ ์ (GC)์ด ์์ต๋๋ค. GC๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ํ์ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ณ ํจ์จ์ ์ธ ๋ฆฌ์์ค ํ์ฉ์ ๋ณด์ฅํ๋ ํ๋ก์ธ์ค์ ๋๋ค.
์ ์ธ๊ณ ๊ฐ๋ฐ์์๊ฒ GC๋ฅผ ์ดํดํ๋ ๊ฒ์ ๋ ๊น๋ํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ ๊ฐ๋ ฅํ๊ณ ์ฑ๋ฅ์ด ๋ฐ์ด๋๋ฉฐ ํ์ฅ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๊ฒ์ ๋๋ค. ์ด ํฌ๊ด์ ์ธ ํ๊ตฌ๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๊ตฌ๋ํ๋ ํต์ฌ ๊ฐ๋ ๊ณผ ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ์ ์์ธํ ์ดํด๋ณด๊ณ ๋ค์ํ ๊ธฐ์ ์ ๋ฐฐ๊ฒฝ์ ๊ฐ์ง ์ ๋ฌธ๊ฐ์๊ฒ ์ ์ฉํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ํ์ ์์
ํน์ ์๊ณ ๋ฆฌ์ฆ์ ์ดํด๋ณด๊ธฐ ์ ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ์ ๊ทธ๋ ๊ฒ ์ค์ํ์ง ํ์ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ ํต์ ์ธ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์์ ๊ฐ๋ฐ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ํ ๋นํ๊ณ ํด์ ํฉ๋๋ค. ์ด๋ ์ธ๋ฐํ ์ ์ด๋ฅผ ์ ๊ณตํ์ง๋ง ์ ๋ช ๋์ ๋ฒ๊ทธ์ ์์ธ์ด๊ธฐ๋ ํฉ๋๋ค:
- ๋ฉ๋ชจ๋ฆฌ ๋์: ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ ์ด์ ํ์ํ์ง ์์ง๋ง ๋ช ์์ ์ผ๋ก ํด์ ๋์ง ์์ผ๋ฉด ์ ์ ๋ ์ํ๋ก ๋จ์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ์ฐจ ๊ณ ๊ฐ๋ฉ๋๋ค. ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ ํ๋ฆฌ์ผ์ด์ ์๋๊ฐ ๋๋ ค์ง๊ฑฐ๋ ์์ ํ ์ถฉ๋ํ ์ ์์ต๋๋ค.
- ๋๊ธ๋ง ํฌ์ธํฐ: ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋์์ง๋ง ํฌ์ธํฐ๊ฐ ์ฌ์ ํ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ ํด๋น ๋ฉ๋ชจ๋ฆฌ์ ์ก์ธ์คํ๋ ค๊ณ ํ๋ฉด ์ ์๋์ง ์์ ๋์์ด ๋ฐ์ํ์ฌ ์ข ์ข ๋ณด์ ์ทจ์ฝ์ ์ด๋ ์ถฉ๋์ด ๋ฐ์ํฉ๋๋ค.
- ์ด์ค ํด์ ์ค๋ฅ: ์ด๋ฏธ ํด์ ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ฉด ์์๊ณผ ๋ถ์์ ์ฑ์ด ๋ฐ์ํฉ๋๋ค.
๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํตํ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ์ด๋ฌํ ๋ถ๋ด์ ์ํํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ๋ฐํ์ ์์คํ ์ ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ณํ๊ณ ํ์ํ๋ ์ฑ ์์ ๋งก์ ๊ฐ๋ฐ์๊ฐ ๋ฎ์ ์์ค์ ๋ฉ๋ชจ๋ฆฌ ์กฐ์์ด ์๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ ์ง์คํ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ ๋ค์ํ ํ๋์จ์ด ๊ธฐ๋ฅ๊ณผ ๋ฐฐํฌ ํ๊ฒฝ์ ํ๋ ฅ์ ์ด๊ณ ํจ์จ์ ์ธ ์ํํธ์จ์ด๊ฐ ํ์ํ ๊ธ๋ก๋ฒ ํ๊ฒฝ์์ ํนํ ์ค์ํฉ๋๋ค.
๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํต์ฌ ๊ฐ๋
๋ช ๊ฐ์ง ๊ธฐ๋ณธ ๊ฐ๋ ์ด ๋ชจ๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ท๋ฐ์นจํฉ๋๋ค:
1. ๋๋ฌ ๊ฐ๋ฅ์ฑ
๋๋ถ๋ถ์ GC ์๊ณ ๋ฆฌ์ฆ์ ํต์ฌ ์๋ฆฌ๋ ๋๋ฌ ๊ฐ๋ฅ์ฑ์ ๋๋ค. ์๋ ค์ง "๋ผ์ด๋ธ" ๋ฃจํธ ์งํฉ์์ ํด๋น ๊ฐ์ฒด๋ก์ ๊ฒฝ๋ก๊ฐ ์๋ ๊ฒฝ์ฐ ๊ฐ์ฒด๋ ๋๋ฌ ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ๋ฃจํธ์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์์ด ํฌํจ๋ฉ๋๋ค:
- ์ ์ญ ๋ณ์
- ์คํ ์คํ์ ๋ก์ปฌ ๋ณ์
- CPU ๋ ์ง์คํฐ
- ์ ์ ๋ณ์
์ด๋ฌํ ๋ฃจํธ์์ ๋๋ฌํ ์ ์๋ ๊ฐ์ฒด๋ ๊ฐ๋น์ง๋ก ๊ฐ์ฃผ๋์ด ํ์ํ ์ ์์ต๋๋ค.
2. ๊ฐ๋น์ง ์ปฌ๋ ์ ์ฃผ๊ธฐ
์ผ๋ฐ์ ์ธ GC ์ฃผ๊ธฐ๋ ์ฌ๋ฌ ๋จ๊ณ๋ฅผ ๊ฑฐ์นฉ๋๋ค:
- ๋งํน: GC๋ ๋ฃจํธ์์ ์์ํ์ฌ ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ์ํํ์ฌ ๋๋ฌ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ๋งํนํฉ๋๋ค.
- ์ค์ํ(๋๋ ์์ถ): ๋งํน ํ GC๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฐ๋ณตํฉ๋๋ค. ๋งํน๋์ง ์์ ๊ฐ์ฒด(๊ฐ๋น์ง)๋ ํ์๋ฉ๋๋ค. ์ผ๋ถ ์๊ณ ๋ฆฌ์ฆ์์๋ ํํธํ๋ฅผ ์ค์ด๊ธฐ ์ํด ๋๋ฌ ๊ฐ๋ฅํ ๊ฐ์ฒด๋ ์ธ์ ํ ๋ฉ๋ชจ๋ฆฌ ์์น(์์ถ)๋ก ์ด๋๋ฉ๋๋ค.
3. ์ผ์ ์ค์ง
GC์ ์ค์ํ ๋ฌธ์ ๋ stop-the-world(STW) ์ผ์ ์ค์ง์ ๊ฐ๋ฅ์ฑ์ ๋๋ค. ์ด๋ฌํ ์ผ์ ์ค์ง ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ์ด ์ค๋จ๋์ด GC๊ฐ ๊ฐ์ญ ์์ด ์์ ์ ์ํํ ์ ์์ต๋๋ค. ๊ธด STW ์ผ์ ์ค์ง๋ ์ ํ๋ฆฌ์ผ์ด์ ์๋ต์ฑ์ ํฐ ์ํฅ์ ๋ฏธ์น ์ ์์ผ๋ฉฐ ์ด๋ ๋ชจ๋ ๊ธ๋ก๋ฒ ์์ฅ์์ ์ฌ์ฉ์ ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ํ ๊ด์ฌ์ฌ์ ๋๋ค.
์ฃผ์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์๊ณ ๋ฆฌ์ฆ
์๋ ์ ๊ฑธ์ณ ๋ค์ํ GC ์๊ณ ๋ฆฌ์ฆ์ด ๊ฐ๋ฐ๋์์ผ๋ฉฐ ๊ฐ๊ฐ ๊ณ ์ ํ ๊ฐ์ ๊ณผ ์ฝ์ ์ด ์์ต๋๋ค. ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์๊ณ ๋ฆฌ์ฆ ์ค ์ผ๋ถ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1. ๋งํฌ ์ค ์ค์ํ
๋งํฌ ์ค ์ค์ํ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ฅ ์ค๋๋๊ณ ๊ธฐ๋ณธ์ ์ธ GC ๊ธฐ์ ์ค ํ๋์ ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๋ ๊ฐ์ง ๊ฐ๋ณ ๋จ๊ณ๋ก ์๋ํฉ๋๋ค:
- ๋งํฌ ๋จ๊ณ: GC๋ ๋ฃจํธ ์งํฉ์์ ์์ํ์ฌ ์ ์ฒด ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ์ํํฉ๋๋ค. ๋ฐ๊ฒฌ๋ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๋งํน๋ฉ๋๋ค.
- ์ค์ํ ๋จ๊ณ: ๊ทธ๋ฐ ๋ค์ GC๋ ์ ์ฒด ํ์ ๊ฒ์ํฉ๋๋ค. ๋งํน๋์ง ์์ ๊ฐ์ฒด๋ ๊ฐ๋น์ง๋ก ๊ฐ์ฃผ๋์ด ํ์๋ฉ๋๋ค. ํ์๋ ๋ฉ๋ชจ๋ฆฌ๋ ํฅํ ํ ๋น์ ์ํด ์ฌ์ ๋ชฉ๋ก์ ์ถ๊ฐ๋ฉ๋๋ค.
์ฅ์ :
- ๊ฐ๋ ์ ์ผ๋ก ๊ฐ๋จํ๊ณ ๋๋ฆฌ ์ดํด๋ฉ๋๋ค.
- ์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
๋จ์ :
- ์ฑ๋ฅ: ์ ์ฒด ํ์ ์ํํ๊ณ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฒ์ํด์ผ ํ๋ฏ๋ก ์๋๊ฐ ๋๋ฆด ์ ์์ต๋๋ค.
- ํํธํ: ๊ฐ์ฒด๊ฐ ์๋ก ๋ค๋ฅธ ์์น์์ ํ ๋น ๋ฐ ํด์ ๋จ์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํํธํ๋์ด ์ฌ์ฉ ๊ฐ๋ฅํ ์ด ์ฌ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ถฉ๋ถํ๋๋ผ๋ ํ ๋น ์คํจ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- STW ์ผ์ ์ค์ง: ํนํ ํฐ ํ์์ ์ผ๋ฐ์ ์ผ๋ก ๊ธด stop-the-world ์ผ์ ์ค์ง๊ฐ ๋ฐ์ํฉ๋๋ค.
์: ์ด๊ธฐ ๋ฒ์ ์ Java ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ๊ธฐ๋ณธ์ ์ธ ๋งํฌ ์ค ์ค์ํ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ์ต๋๋ค.
2. ๋งํฌ ์ค ์ปดํฉํธ
๋งํฌ ์ค ์ค์ํ์ ํํธํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋งํฌ ์ค ์ปดํฉํธ ์๊ณ ๋ฆฌ์ฆ์ ์ธ ๋ฒ์งธ ๋จ๊ณ๋ฅผ ์ถ๊ฐํฉ๋๋ค:
- ๋งํฌ ๋จ๊ณ: ๋งํฌ ์ค ์ค์ํ์ ๋์ผํ๋ฉฐ ๋๋ฌ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ๋งํนํฉ๋๋ค.
- ์ปดํฉํธ ๋จ๊ณ: ๋งํน ํ GC๋ ๋งํน๋(๋๋ฌ ๊ฐ๋ฅํ) ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ์ธ์ ํ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ผ๋ก ์ด๋ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํํธํ๊ฐ ์ ๊ฑฐ๋ฉ๋๋ค.
- ์ค์ํ ๋จ๊ณ: ๊ทธ๋ฐ ๋ค์ GC๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ค์ํํฉ๋๋ค. ๊ฐ์ฒด๊ฐ ์์ถ๋์์ผ๋ฏ๋ก ์ฌ์ ๋ฉ๋ชจ๋ฆฌ๋ ์ด์ ํ ๋์ ์๋ ๋จ์ผ ์ธ์ ๋ธ๋ก์ด ๋์ด ํฅํ ํ ๋น์ด ๋งค์ฐ ๋นจ๋ผ์ง๋๋ค.
์ฅ์ :
- ๋ฉ๋ชจ๋ฆฌ ํํธํ๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- ๋ ๋น ๋ฅธ ํ์ ํ ๋น.
- ์ฌ์ ํ ์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
๋จ์ :
- ์ฑ๋ฅ: ์ ์ฌ์ ์ผ๋ก ๋ง์ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ์ด๋ํด์ผ ํ๋ฏ๋ก ์์ถ ๋จ๊ณ๋ ๊ณ์ฐ ๋น์ฉ์ด ๋ง์ด ๋ค ์ ์์ต๋๋ค.
- STW ์ผ์ ์ค์ง: ๊ฐ์ฒด๋ฅผ ์ด๋ํด์ผ ํ๋ฏ๋ก ์ฌ์ ํ ์๋นํ STW ์ผ์ ์ค์ง๊ฐ ๋ฐ์ํฉ๋๋ค.
์: ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ ๋ง์ ๊ณ ๊ธ ์ปฌ๋ ํฐ์ ๊ธฐ๋ณธ์ ๋๋ค.
3. ๋ณต์ฌ ๊ฐ๋น์ง ์ปฌ๋ ์
๋ณต์ฌ GC๋ ํ์ ๋ ๊ฐ์ ๊ณต๊ฐ์ผ๋ก ๋๋๋๋ค: From-space์ To-space. ์ผ๋ฐ์ ์ผ๋ก ์ ๊ฐ์ฒด๋ From-space์ ํ ๋น๋ฉ๋๋ค.
- ๋ณต์ฌ ๋จ๊ณ: GC๊ฐ ํธ๋ฆฌ๊ฑฐ๋๋ฉด GC๋ ๋ฃจํธ์์ ์์ํ์ฌ From-space๋ฅผ ์ํํฉ๋๋ค. ๋๋ฌ ๊ฐ๋ฅํ ๊ฐ์ฒด๋ From-space์์ To-space๋ก ๋ณต์ฌ๋ฉ๋๋ค.
- ์ค์ ๊ณต๊ฐ: ๋๋ฌ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๋ณต์ฌ๋๋ฉด From-space์๋ ๊ฐ๋น์ง๋ง ํฌํจ๋๊ณ To-space์๋ ๋ชจ๋ ๋ผ์ด๋ธ ๊ฐ์ฒด๊ฐ ํฌํจ๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ณต๊ฐ์ ์ญํ ์ด ๋ฐ๋๋๋ค. ์ด์ From-space๋ ์ To-space๊ฐ ๋์ด ๋ค์ ์ฃผ๊ธฐ๋ฅผ ์ค๋นํฉ๋๋ค.
์ฅ์ :
- ํํธํ ์์: ๊ฐ์ฒด๊ฐ ํญ์ ์ฐ์์ ์ผ๋ก ๋ณต์ฌ๋๋ฏ๋ก To-space ๋ด์ ํํธํ๊ฐ ์์ต๋๋ค.
- ๋น ๋ฅธ ํ ๋น: ํ ๋น์ ํ์ฌ ํ ๋น ๊ณต๊ฐ์์ ํฌ์ธํฐ๋ฅผ ๋ฒํํ๋ ๊ฒ๋ง ํฌํจํ๋ฏ๋ก ๋น ๋ฆ ๋๋ค.
๋จ์ :
- ๊ณต๊ฐ ์ค๋ฒํค๋: ๋ ๊ฐ์ ๊ณต๊ฐ์ด ํ์ฑํ๋์ด ์์ผ๋ฏ๋ก ๋จ์ผ ํ์ ๋ ๋ฐฐ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.
- ์ฑ๋ฅ: ๋ง์ ๊ฐ์ฒด๊ฐ ๋ผ์ด๋ธ ์ํ์ธ ๊ฒฝ์ฐ ๋ชจ๋ ๋ผ์ด๋ธ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํด์ผ ํ๋ฏ๋ก ๋น์ฉ์ด ๋ง์ด ๋ค ์ ์์ต๋๋ค.
- STW ์ผ์ ์ค์ง: ์ฌ์ ํ STW ์ผ์ ์ค์ง๊ฐ ํ์ํฉ๋๋ค.
์: ์ธ๋๋ณ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์์ '์' ์ธ๋๋ฅผ ์์งํ๋ ๋ฐ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
4. ์ธ๋๋ณ ๊ฐ๋น์ง ์ปฌ๋ ์
์ด ์ ๊ทผ ๋ฐฉ์์ ๋๋ถ๋ถ์ ๊ฐ์ฒด์ ์๋ช ์ด ๋งค์ฐ ์งง๋ค๋ ์ธ๋๋ณ ๊ฐ์ค์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์ธ๋๋ณ GC๋ ํ์ ์ฌ๋ฌ ์ธ๋๋ก ๋๋๋๋ค:
- ์ ์ธ๋: ์ ๊ฐ์ฒด๊ฐ ํ ๋น๋๋ ๊ณณ์ ๋๋ค. ์ฌ๊ธฐ์ GC ์ปฌ๋ ์ ์ ๋น๋ฒํ๊ณ ๋น ๋ฆ ๋๋ค(๋ง์ด๋ GC).
- ์ฌ๋ ์ธ๋: ์ฌ๋ฌ ๋ง์ด๋ GC์์ ์ด์๋จ์ ๊ฐ์ฒด๋ ์ฌ๋ ์ธ๋๋ก ์น๊ฒฉ๋ฉ๋๋ค. ์ฌ๊ธฐ์ GC ์ปฌ๋ ์ ์ ๋ ๋น๋ฒํ๊ณ ๋ ์ฒ ์ ํฉ๋๋ค(๋ฉ์ด์ GC).
์๋ ๋ฐฉ์:
- ์ ๊ฐ์ฒด๋ ์ ์ธ๋์ ํ ๋น๋ฉ๋๋ค.
- ๋ง์ด๋ GC(์ข ์ข ๋ณต์ฌ ์ปฌ๋ ํฐ๋ฅผ ์ฌ์ฉ)๋ ์ ์ธ๋์์ ์์ฃผ ์ํ๋ฉ๋๋ค. ์ด์๋จ์ ๊ฐ์ฒด๋ ์ฌ๋ ์ธ๋๋ก ์น๊ฒฉ๋ฉ๋๋ค.
- ๋ฉ์ด์ GC๋ ์ฌ๋ ์ธ๋์์ ๋ ์์ฃผ ์ํ๋๋ฉฐ ์ข ์ข ๋งํฌ ์ค ์ค์ํ ๋๋ ๋งํฌ ์ค ์ปดํฉํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ฅ์ :
- ํฅ์๋ ์ฑ๋ฅ: ์ ์ฒด ํ์ ์์งํ๋ ๋น๋๋ฅผ ํฌ๊ฒ ์ค์ ๋๋ค. ๋๋ถ๋ถ์ ๊ฐ๋น์ง๋ ์ ์ธ๋์์ ๋ฐ๊ฒฌ๋๋ฉฐ ๋น ๋ฅด๊ฒ ์์ง๋ฉ๋๋ค.
- ์ค์ด๋ ์ผ์ ์ค์ง ์๊ฐ: ๋ง์ด๋ GC๋ ์ ์ฒด ํ GC๋ณด๋ค ํจ์ฌ ์งง์ต๋๋ค.
๋จ์ :
- ๋ณต์ก์ฑ: ๊ตฌํ์ด ๋ ๋ณต์กํฉ๋๋ค.
- ์น๊ฒฉ ์ค๋ฒํค๋: ๋ง์ด๋ GC์์ ์ด์๋จ์ ๊ฐ์ฒด๋ ์น๊ฒฉ ๋น์ฉ์ด ๋ฐ์ํฉ๋๋ค.
- ๊ธฐ์ต๋ ์งํฉ: ์ฌ๋ ์ธ๋์์ ์ ์ธ๋๋ก์ ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ์ฒ๋ฆฌํ๋ ค๋ฉด "๊ธฐ์ต๋ ์งํฉ"์ด ํ์ํ๋ฉฐ ์ค๋ฒํค๋๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์: Java Virtual Machine(JVM)์ ์ธ๋๋ณ GC๋ฅผ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉํฉ๋๋ค(์: ์ฒ๋ฆฌ๋ ์ปฌ๋ ํฐ, CMS, G1, ZGC์ ๊ฐ์ ์ปฌ๋ ํฐ ์ฌ์ฉ).
5. ์ฐธ์กฐ ์นด์ดํ
๋๋ฌ ๊ฐ๋ฅ์ฑ์ ์ถ์ ํ๋ ๋์ ์ฐธ์กฐ ์นด์ดํ ์ ๊ฐ ๊ฐ์ฒด์ ์นด์ดํธ๋ฅผ ์ฐ๊ฒฐํ์ฌ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ ์๋ฅผ ๋ํ๋ ๋๋ค. ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ ์๊ฐ 0์ผ๋ก ๋จ์ด์ง๋ฉด ๊ฐ๋น์ง๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
- ์ฆ๊ฐ: ๊ฐ์ฒด์ ๋ํ ์ ์ฐธ์กฐ๊ฐ ๋ง๋ค์ด์ง๋ฉด ํด๋น ์ฐธ์กฐ ์๊ฐ ์ฆ๊ฐํฉ๋๋ค.
- ๊ฐ์: ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๊ฐ ์ ๊ฑฐ๋๋ฉด ํด๋น ์นด์ดํธ๊ฐ ๊ฐ์ํฉ๋๋ค. ์นด์ดํธ๊ฐ 0์ด ๋๋ฉด ๊ฐ์ฒด๊ฐ ์ฆ์ ํ ๋น ํด์ ๋ฉ๋๋ค.
์ฅ์ :
- ์ผ์ ์ค์ง ์์: ํ ๋น ํด์ ๋ ์ฐธ์กฐ๊ฐ ์ญ์ ๋จ์ ๋ฐ๋ผ ์ ์ง์ ์ผ๋ก ๋ฐ์ํ์ฌ ๊ธด STW ์ผ์ ์ค์ง๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
- ๋จ์์ฑ: ๊ฐ๋ ์ ์ผ๋ก ๊ฐ๋จํฉ๋๋ค.
๋จ์ :
- ์ํ ์ฐธ์กฐ: ์ฃผ์ ๋จ์ ์ ์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์์งํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ฐ์ฒด A๊ฐ B๋ฅผ ๊ฐ๋ฆฌํค๊ณ B๊ฐ ๋ค์ A๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฒฝ์ฐ ์ธ๋ถ ์ฐธ์กฐ๊ฐ ์๋๋ผ๋ ์ฐธ์กฐ ์๊ฐ 0์ ๋๋ฌํ์ง ์์ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํฉ๋๋ค.
- ์ค๋ฒํค๋: ์นด์ดํธ๋ฅผ ๋๋ฆฌ๊ณ ์ค์ด๋ฉด ๋ชจ๋ ์ฐธ์กฐ ์์ ์ ์ค๋ฒํค๋๊ฐ ์ถ๊ฐ๋ฉ๋๋ค.
- ์์ธกํ ์ ์๋ ๋์: ์ฐธ์กฐ ๊ฐ์ ์์๋ ์์ธกํ ์ ์์ด ๋ฉ๋ชจ๋ฆฌ ํ์ ์๊ธฐ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
์: Swift(ARC - ์๋ ์ฐธ์กฐ ์นด์ดํ ), Python ๋ฐ Objective-C์์ ์ฌ์ฉ๋ฉ๋๋ค.
6. ์ ์ง์ ๊ฐ๋น์ง ์ปฌ๋ ์
STW ์ผ์ ์ค์ง ์๊ฐ์ ๋์ฑ ์ค์ด๊ธฐ ์ํด ์ ์ง์ GC ์๊ณ ๋ฆฌ์ฆ์ GC ์์ ์ ์์ ์ฒญํฌ๋ก ์ํํ์ฌ GC ์์ ๊ณผ ์ ํ๋ฆฌ์ผ์ด์ ์คํ์ ๋ฒ๊ฐ์ ์ํํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ผ์ ์ค์ง ์๊ฐ์ ์งง๊ฒ ์ ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ๋จ๊ณ๋ณ ์์ : ๋งํฌ ๋ฐ ์ค์ํ/์์ถ ๋จ๊ณ๊ฐ ๋ ์์ ๋จ๊ณ๋ก ๋๋ฉ๋๋ค.
- ์ธํฐ๋ฆฌ๋น: ์ ํ๋ฆฌ์ผ์ด์ ์ค๋ ๋๋ GC ์์ ์ฃผ๊ธฐ ์ฌ์ด์์ ์คํํ ์ ์์ต๋๋ค.
์ฅ์ :
- ๋ ์งง์ ์ผ์ ์ค์ง: STW ์ผ์ ์ค์ง ๊ธฐ๊ฐ์ ํฌ๊ฒ ์ค์ ๋๋ค.
- ํฅ์๋ ์๋ต์ฑ: ๋ํํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ์ ํฉํฉ๋๋ค.
๋จ์ :
- ๋ณต์ก์ฑ: ๊ธฐ์กด ์๊ณ ๋ฆฌ์ฆ๋ณด๋ค ๊ตฌํ์ด ๋ ๋ณต์กํฉ๋๋ค.
- ์ฑ๋ฅ ์ค๋ฒํค๋: GC์ ์ ํ๋ฆฌ์ผ์ด์ ์ค๋ ๋ ๊ฐ์ ์กฐ์ ์ด ํ์ํ๋ฏ๋ก ์ผ๋ถ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์: ์ด์ JVM ๋ฒ์ ์ ๋์ ๋งํฌ ์ค์ํ(CMS) ์ปฌ๋ ํฐ๋ ์ ์ง์ ์ปฌ๋ ์ ์ ๋ํ ์ด๊ธฐ ์๋์์ต๋๋ค.
7. ๋์ ๊ฐ๋น์ง ์ปฌ๋ ์
๋์ GC ์๊ณ ๋ฆฌ์ฆ์ ๋๋ถ๋ถ์ ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ค๋ ๋์ ๋์์ ์ํํฉ๋๋ค. ์ฆ, GC๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ณํ๊ณ ํ์ํ๋ ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ณ์ ์คํ๋ฉ๋๋ค.
- ์กฐ์ ๋ ์์ : GC ์ค๋ ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ค๋ ๋๊ฐ ๋ณ๋ ฌ๋ก ์๋ํฉ๋๋ค.
- ์กฐ์ ๋ฉ์ปค๋์ฆ: ์ผ์ ๋งํน ์๊ณ ๋ฆฌ์ฆ ๋ฐ ์ฐ๊ธฐ ์ฅ๋ฒฝ(์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ง๋ ๊ฐ์ฒด ์ฐธ์กฐ์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ ์ถ์ ํจ)๊ณผ ๊ฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ ์ ๊ตํ ๋ฉ์ปค๋์ฆ์ด ํ์ํฉ๋๋ค.
์ฅ์ :
- ์ต์ STW ์ผ์ ์ค์ง: ๋งค์ฐ ์งง๊ฑฐ๋ ์ฌ์ง์ด "์ผ์ ์ค์ง ์๋" ์๋์ ๋ชฉํ๋ก ํฉ๋๋ค.
- ๋์ ์ฒ๋ฆฌ๋๊ณผ ์๋ต์ฑ: ์๊ฒฉํ ๋๊ธฐ ์๊ฐ ์๊ตฌ ์ฌํญ์ด ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ํฉ๋๋ค.
๋จ์ :
- ๋ณต์ก์ฑ: ์ฌ๋ฐ๋ฅด๊ฒ ์ค๊ณํ๊ณ ๊ตฌํํ๊ธฐ๊ฐ ๋งค์ฐ ๋ณต์กํฉ๋๋ค.
- ์ฒ๋ฆฌ๋ ๊ฐ์: ๋์ ์์ ๋ฐ ์กฐ์ ์ค๋ฒํค๋๋ก ์ธํด ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ฒ๋ฆฌ๋์ ์ค์ผ ์ ์์ต๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋: ๋ณ๊ฒฝ ์ฌํญ์ ์ถ์ ํ๋ ๋ฐ ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ ์ ์์ต๋๋ค.
์: Java์ G1, ZGC ๋ฐ Shenandoah์ Go ๋ฐ .NET Core์ GC์ ๊ฐ์ ์ต์ ์ปฌ๋ ํฐ๋ ๋งค์ฐ ๋์์ ์ ๋๋ค.
8. G1(Garbage-First) ์ปฌ๋ ํฐ
Java 7์ ๋์ ๋์ด Java 9์์ ๊ธฐ๋ณธ๊ฐ์ด ๋ G1 ์ปฌ๋ ํฐ๋ ์ฒ๋ฆฌ๋๊ณผ ๋๊ธฐ ์๊ฐ์ ๊ท ํ์ ๋ง์ถ๋๋ก ์ค๊ณ๋ ์๋ฒ ์คํ์ผ, ์์ญ ๊ธฐ๋ฐ, ์ธ๋๋ณ ๋ฐ ๋์ ์ปฌ๋ ํฐ์ ๋๋ค.
- ์์ญ ๊ธฐ๋ฐ: ํ์ ์๋ง์ ์์ ์์ญ์ผ๋ก ๋๋๋๋ค. ์์ญ์ Eden, Survivor ๋๋ Old์ผ ์ ์์ต๋๋ค.
- ์ธ๋๋ณ: ์ธ๋๋ณ ํน์ฑ์ ์ ์งํฉ๋๋ค.
- ๋์ ๋ฐ ๋ณ๋ ฌ: ๋๋ถ๋ถ์ ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ค๋ ๋์ ๋์ ์ํํ๊ณ ๋ํผ(๋ผ์ด๋ธ ๊ฐ์ฒด ๋ณต์ฌ)์ ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๋ชฉํ ์งํฅ์ : ์ฌ์ฉ์๊ฐ ์ํ๋ ์ผ์ ์ค์ง ์๊ฐ ๋ชฉํ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. G1์ ๊ฐ๋น์ง๊ฐ ๊ฐ์ฅ ๋ง์ ์์ญ์ ๋จผ์ ์์งํ์ฌ(๋ฐ๋ผ์ "Garbage-First") ์ด ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๋ ค๊ณ ํฉ๋๋ค.
์ฅ์ :
- ๊ท ํ ์กํ ์ฑ๋ฅ: ๊ด๋ฒ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํฉ๋๋ค.
- ์์ธก ๊ฐ๋ฅํ ์ผ์ ์ค์ง ์๊ฐ: ์ด์ ์ปฌ๋ ํฐ์ ๋นํด ์ผ์ ์ค์ง ์๊ฐ ์์ธก ๊ฐ๋ฅ์ฑ์ด ํฌ๊ฒ ํฅ์๋์์ต๋๋ค.
- ๋ํ ํ์ ์ ์ฒ๋ฆฌํจ: ๋ํ ํ ํฌ๊ธฐ๋ก ํจ๊ณผ์ ์ผ๋ก ํ์ฅ๋ฉ๋๋ค.
๋จ์ :
- ๋ณต์ก์ฑ: ๋ณธ์ง์ ์ผ๋ก ๋ณต์กํฉ๋๋ค.
- ๋ ๊ธด ์ผ์ ์ค์ง ๊ฐ๋ฅ์ฑ: ๋์ ์ผ์ ์ค์ง ์๊ฐ์ด ๊ณต๊ฒฉ์ ์ด๊ณ ํ์ด ๋ผ์ด๋ธ ๊ฐ์ฒด๋ก ์ธํด ๋งค์ฐ ํํธํ๋ ๊ฒฝ์ฐ ๋จ์ผ GC ์ฃผ๊ธฐ๊ฐ ๋์์ ์ด๊ณผํ ์ ์์ต๋๋ค.
์: ๋ง์ ์ต์ Java ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ณธ GC์ ๋๋ค.
9. ZGC ๋ฐ Shenandoah
์ด๋ค์ ์ต๊ทผ์ ๊ณ ๊ธ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ก, ๊ทนํ ์งง์ ์ผ์ ์ค์ง ์๊ฐ, ์ข ์ข ๋งค์ฐ ํฐ ํ(ํ ๋ผ๋ฐ์ดํธ)์์๋ ๋ฐ๋ฆฌ์ด ๋ฏธ๋ง์ ์ผ์ ์ค์ง๋ฅผ ๋ชฉํ๋ก ์ค๊ณ๋์์ต๋๋ค.
- ๋ก๋ ์๊ฐ ์์ถ: ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋์์ ์์ถ์ ์ํํฉ๋๋ค.
- ๊ณ ๋๋ก ๋์์ : ๊ฑฐ์ ๋ชจ๋ GC ์์ ์ด ๋์์ ๋ฐ์ํฉ๋๋ค.
- ์์ญ ๊ธฐ๋ฐ: G1๊ณผ ์ ์ฌํ ์์ญ ๊ธฐ๋ฐ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค.
์ฅ์ :
- ๋งค์ฐ ๋ฎ์ ๋๊ธฐ ์๊ฐ: ๋งค์ฐ ์งง๊ณ ์ผ๊ด๋ ์ผ์ ์ค์ง ์๊ฐ์ ๋ชฉํ๋ก ํฉ๋๋ค.
- ํ์ฅ์ฑ: ๋๊ท๋ชจ ํ์ด ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ํฉ๋๋ค.
๋จ์ :
- ์ฒ๋ฆฌ๋ ์ํฅ: ์ฒ๋ฆฌ๋ ์งํฅ ์ปฌ๋ ํฐ๋ณด๋ค CPU ์ค๋ฒํค๋๊ฐ ์ฝ๊ฐ ๋ ๋์ ์ ์์ต๋๋ค.
- ์ฑ์๋: ๋น๊ต์ ์ต์ ์ด์ง๋ง ๋น ๋ฅด๊ฒ ์ฑ์ํ๊ณ ์์ต๋๋ค.
์: ZGC ๋ฐ Shenandoah๋ ์ต์ ๋ฒ์ ์ OpenJDK์์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๊ธ์ต ๊ฑฐ๋ ํ๋ซํผ ๋๋ ๊ธ๋ก๋ฒ ์ฒญ์ค์๊ฒ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๋๊ท๋ชจ ์น ์๋น์ค์ ๊ฐ์ ๋๊ธฐ ์๊ฐ์ ๋ฏผ๊ฐํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํฉ๋๋ค.
๋ค์ํ ๋ฐํ์ ํ๊ฒฝ์์์ ๊ฐ๋น์ง ์ปฌ๋ ์
์๋ฆฌ๋ ๋ณดํธ์ ์ด์ง๋ง GC์ ๊ตฌํ๊ณผ ๋์์ค๋ ๋ค์ํ ๋ฐํ์ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค:
- Java Virtual Machine(JVM): ์ญ์ฌ์ ์ผ๋ก JVM์ GC ํ์ ์ ์ต์ ์ ์ ์์์ต๋๋ค. ํ๋ฌ๊ทธํ GC ์ํคํ ์ฒ๋ฅผ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ๋ค์ํ ์ปฌ๋ ํฐ(Serial, Parallel, CMS, G1, ZGC, Shenandoah) ์ค์์ ์ ํํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ ์ฐ์ฑ์ ๋ค์ํ ๊ธ๋ก๋ฒ ๋ฐฐํฌ ์๋๋ฆฌ์ค์์ ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
- .NET Common Language Runtime(CLR): .NET CLR์ ์ ๊ตํ GC๋ ์ ๊ณตํฉ๋๋ค. ์ธ๋๋ณ ๋ฐ ์์ถ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ชจ๋ ์ ๊ณตํฉ๋๋ค. CLR GC๋ ์ํฌ์คํ ์ด์ ๋ชจ๋(ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ํ๋จ) ๋๋ ์๋ฒ ๋ชจ๋(๋ค์ค ํ๋ก์ธ์ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ํ๋จ)์์ ์๋ํ ์ ์์ต๋๋ค. ๋ํ ์ผ์ ์ค์ง๋ฅผ ์ต์ํํ๊ธฐ ์ํด ๋์ ๋ฐ ๋ฐฑ๊ทธ๋ผ์ด๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ง์ํฉ๋๋ค.
- Go ๋ฐํ์: Go ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ๋์ ์ผ์ ๋งํฌ ์ค ์ค์ํ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฎ์ ๋๊ธฐ ์๊ฐ๊ณผ ๋์ ๋์์ฑ์ ์ํด ์ค๊ณ๋์์ผ๋ฉฐ ํจ์จ์ ์ธ ๋์ ์์คํ ์ ๊ตฌ์ถํ๊ธฐ ์ํ Go์ ์ฒ ํ๊ณผ ์ผ์นํฉ๋๋ค. Go GC๋ ์ผ๋ฐ์ ์ผ๋ก ๋ง์ดํฌ๋ก์ด ๋จ์๋ก ์ผ์ ์ค์ง๋ฅผ ๋งค์ฐ ์งง๊ฒ ์ ์งํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
- JavaScript ์์ง(V8, SpiderMonkey): ๋ธ๋ผ์ฐ์ ์ Node.js์ ์ต์ JavaScript ์์ง์ ์ธ๋๋ณ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋งํฌ ์ค ์ค์ํ์ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ๊ณ ์ข ์ข ์ ์ง์ ์ปฌ๋ ์ ์ ํตํฉํ์ฌ UI ์ํธ ์์ฉ์ ์๋ต์ฑ ์๊ฒ ์ ์งํฉ๋๋ค.
์ฌ๋ฐ๋ฅธ GC ์๊ณ ๋ฆฌ์ฆ ์ ํ
์ ์ ํ GC ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ๋ ๊ฒ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ, ํ์ฅ์ฑ ๋ฐ ์ฌ์ฉ์ ๊ฒฝํ์ ์ํฅ์ ๋ฏธ์น๋ ์ค์ํ ๊ฒฐ์ ์ ๋๋ค. ๋ชจ๋ ๊ฒฝ์ฐ์ ์ ์ฉํ ์ ์๋ ๋จ์ผ ์๋ฃจ์ ์ ์์ต๋๋ค. ๋ค์ ์์๋ฅผ ๊ณ ๋ คํ์ญ์์ค:
- ์ ํ๋ฆฌ์ผ์ด์ ์๊ตฌ ์ฌํญ: ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋๊ธฐ ์๊ฐ์ ๋ฏผ๊ฐํฉ๋๊น(์: ์ค์๊ฐ ๊ฑฐ๋, ๋ํํ ์น ์๋น์ค) ์๋๋ฉด ์ฒ๋ฆฌ๋ ์งํฅ์ ์ ๋๊น(์: ์ผ๊ด ์ฒ๋ฆฌ, ๊ณผํ ์ปดํจํ )?
- ํ ํฌ๊ธฐ: ๋งค์ฐ ํฐ ํ(์์ญ ๋๋ ์๋ฐฑ ๊ธฐ๊ฐ๋ฐ์ดํธ)์ ๊ฒฝ์ฐ ํ์ฅ์ฑ๊ณผ ๋ฎ์ ๋๊ธฐ ์๊ฐ์ ์ํด ์ค๊ณ๋ ์ปฌ๋ ํฐ(์: G1, ZGC, Shenandoah)๊ฐ ์ ํธ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- ๋์์ฑ ์๊ตฌ ์ฌํญ: ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์ ์์ค์ ๋์์ฑ์ด ํ์ํฉ๋๊น? ๋์ GC๊ฐ ์ ์ฉํ ์ ์์ต๋๋ค.
- ๊ฐ๋ฐ ๋ ธ๋ ฅ: ๋ ๊ฐ๋จํ ์๊ณ ๋ฆฌ์ฆ์ ์ถ๋ก ํ๊ธฐ๊ฐ ๋ ์ฌ์ธ ์ ์์ง๋ง ์ข ์ข ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํฉ๋๋ค. ๊ณ ๊ธ ์ปฌ๋ ํฐ๋ ๋ ๋์ ์ฑ๋ฅ์ ์ ๊ณตํ์ง๋ง ๋ ๋ณต์กํฉ๋๋ค.
- ๋์ ํ๊ฒฝ: ๋ฐฐํฌ ํ๊ฒฝ(์: ํด๋ผ์ฐ๋, ์๋ฒ ๋๋ ์์คํ )์ ๊ธฐ๋ฅ๊ณผ ์ ํ ์ฌํญ์ด ์ ํ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
GC ์ต์ ํ๋ฅผ ์ํ ์ค์ฉ์ ์ธ ํ
์ฌ๋ฐ๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ๋ ๊ฒ ์ธ์๋ GC ์ฑ๋ฅ์ ์ต์ ํํ ์ ์์ต๋๋ค:
- GC ๋งค๊ฐ๋ณ์ ์กฐ์ : ๋๋ถ๋ถ์ ๋ฐํ์์์๋ GC ๋งค๊ฐ๋ณ์(์: ํ ํฌ๊ธฐ, ์ธ๋ ํฌ๊ธฐ, ํน์ ์ปฌ๋ ํฐ ์ต์ )๋ฅผ ์กฐ์ ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ์ํด์๋ ํ๋กํ์ผ๋ง๊ณผ ์คํ์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- ๊ฐ์ฒด ํ๋ง: ํ๋ง์ ํตํด ๊ฐ์ฒด๋ฅผ ์ฌ์ฌ์ฉํ๋ฉด ํ ๋น ๋ฐ ํ ๋น ํด์ ํ์๋ฅผ ์ค์ฌ GC ์๋ ฅ์ ์ค์ผ ์ ์์ต๋๋ค.
- ๋ถํ์ํ ๊ฐ์ฒด ์์ฑ ๋ฐฉ์ง: ๋ง์ ์์ ๋จ๋ช ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๋๋ก ์ฃผ์ํ์ญ์์ค. GC ์์ ์ด ์ฆ๊ฐํ ์ ์์ต๋๋ค.
- ์ฝํ/์ํํธ ์ฐธ์กฐ๋ฅผ ํ๋ช ํ๊ฒ ์ฌ์ฉ: ์ด๋ฌํ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ ๊ฐ์ฒด๋ฅผ ์์งํ ์ ์์ผ๋ฉฐ ์บ์์ ์ ์ฉํ ์ ์์ต๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ํ๋กํ์ผ๋ง: ํ๋กํ์ผ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ GC ๋์์ ์ดํดํ๊ณ , ๊ธด ์ผ์ ์ค์ง๋ฅผ ์๋ณํ๊ณ , GC ์ค๋ฒํค๋๊ฐ ๋์ ์์ญ์ ์ ํํ ์ฐพ์๋ ๋๋ค. VisualVM, JConsole(Java์ฉ), PerfView(.NET์ฉ) ๋ฐ `pprof`(Go์ฉ)์ ๊ฐ์ ๋๊ตฌ๋ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ฏธ๋
๋ ๋ฎ์ ๋๊ธฐ ์๊ฐ๊ณผ ๋ ๋์ ํจ์จ์ฑ์ ์ถ๊ตฌํ๋ ๋ ธ๋ ฅ์ ๊ณ์๋๊ณ ์์ต๋๋ค. ํฅํ GC ์ฐ๊ตฌ ๊ฐ๋ฐ์ ๋ค์ ์ฌํญ์ ์ง์ค๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค:
- ์ผ์ ์ค์ง ์ถ๊ฐ ๊ฐ์: ์ง์ ํ "์ผ์ ์ค์ง ์๋" ๋๋ "๊ฑฐ์ ์ผ์ ์ค์ง ์๋" ์ปฌ๋ ์ ์ ๋ชฉํ๋ก ํฉ๋๋ค.
- ํ๋์จ์ด ์ง์: ํ๋์จ์ด๊ฐ GC ์์ ์ ์ง์ํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ชจ์ํฉ๋๋ค.
- AI/ML ๊ธฐ๋ฐ GC: ์ ์ฌ์ ์ผ๋ก ๋จธ์ ๋ฌ๋์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ๋์ ๋ฐ ์์คํ ๋ถํ์ ๋ง๊ฒ GC ์ ๋ต์ ๋์ ์ผ๋ก ์กฐ์ ํฉ๋๋ค.
- ์ํธ ์ด์ฉ์ฑ: ๋ค์ํ GC ๊ตฌํ ๋ฐ ์ธ์ด ๊ฐ์ ๋ ๋์ ํตํฉ ๋ฐ ์ํธ ์ด์ฉ์ฑ.
๊ฒฐ๋ก
๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ต์ ๋ฐํ์ ์์คํ ์ ์ด์์ผ๋ก, ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ํํ๊ณ ํจ์จ์ ์ผ๋ก ์คํ๋๋๋ก ์กฐ์ฉํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ธ ๋งํฌ ์ค ์ค์ํ๋ถํฐ ์ด์ ๋๊ธฐ ์๊ฐ ZGC์ ์ด๋ฅด๊ธฐ๊น์ง ๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ต์ ํํ๋ ์งํ์ ๋จ๊ณ๋ฅผ ๋ํ๋ ๋๋ค. ์ ์ธ๊ณ ๊ฐ๋ฐ์์๊ฒ ์ด๋ฌํ ๊ธฐ์ ์ ๋ํ ํ๊ณ ํ ์ดํด๋ ๋ค์ํ ๊ธ๋ก๋ฒ ํ๊ฒฝ์์ ๋ฒ์ฑํ ์ ์๋ ๋ณด๋ค ๊ฐ๋ ฅํ๊ณ ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ ์์ ์ ์ธ ์ํํธ์จ์ด๋ฅผ ๊ตฌ์ถํ ์ ์๋๋ก ์ง์ํฉ๋๋ค. ์ ์ถฉ์ ์ ์ดํดํ๊ณ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ ์ฉํจ์ผ๋ก์จ GC์ ํ์ ํ์ฉํ์ฌ ์ฐจ์ธ๋ ๋ฐ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์์ต๋๋ค.