๊ฐ๋น์ง ์ปฌ๋ ํฐ์ TLAB
by JiwonDev์๋ฐ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ์ ๋ฆฌํด์ฃผ๋ managed ์ธ์ด์ ๋๋ค.
ํ๋ก๊ทธ๋๋จธ๊ฐ ์ ์์ค์ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ์ ์ด๊ถ์ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํด์ ๋ ์ด๋ GC๊ฐ ์์์ ์ฒ๋ฆฌํด์ฃผ๊ฒ ๋ฉ๋๋ค.
# ๋ฌด์์ด ํ์๋๋๊ฐ
์๋์ JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ค GC๊ฐ ๊ด์ฌํ๋ ๊ณต๊ฐ์ Heap ๋ฉ๋ชจ๋ฆฌ์ ๋๋ค.
์ค๋ ๋๊ฐ ์คํ๋๋ฉฐ ์ง์ญ๋ณ์๋ฅผ ์ ์ฅํ๋ Stack๊ณผ ์ ์ ์ธ Static ์์ญ์ GC์ ๋์์ด ์๋๋๋ค.
# ์ด๋ป๊ฒ ํ์ํ๋๊ฐ. ์ฝํ ์ธ๋ ๊ฐ์ค
JVM์ GC๋ ์ฝํ ์ธ๋ ๊ฐ์ค(weak generational hypothesis)์ ๊ธฐ๋ฐ์ผ๋ก ์ค๊ณ๋์ด์์ต๋๋ค.
- ๋๋ถ๋ถ์ ๊ฐ์ฒด๋ ๊ธ๋ฐฉ ์ ๊ทผ ๋ถ๊ฐ๋ฅํ ์ํ๊ฐ ๋๋ค.
- ์ค๋๋ ๊ฐ์ฒด๊ฐ ์ ์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ๋ ๋๋ฌผ๋ค.
์ด ๊ฐ์ค์ ์ ์ฉ์์ผ, GC๋ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ๊ฒ์ฌํด๊ฐ๋ฉฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ์ง ์์ต๋๋ค.
๊ฐ์ฒด๊ฐ ์์ฑ๋๋ฉด GC์ Young์์ญ์ ํ ๋น์ํค๊ณ , ํด๋น ์์ญ์ด ๊ฐ๋์ฐจ๋ฉด ๋ค์ ์์ญ์ผ๋ก ์ด๋์์ผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๋ฆฌํฉ๋๋ค.
@ Young generation ์์ญ
- ์๋กญ๊ฒ ์์ฑ๋ ๊ฐ์ฒด ๋๋ถ๋ถ์ด ์ด ์์ญ์ ์์นํฉ๋๋ค.
- Eden ์์ญ์์ ์์ํ์ง๋ง, ๋ง์ฝ ๊ฐ์ฒด๊ฐ ๋๋ฌด ์ปค์ Young์์ญ์ ๋ชป๋ค์ด๊ฐ๋ค๋ฉด ๋ฐ๋ก Old๋ก ๊ฐ๋๋ค.
- ๊ฐ๋์ฐจ๋ฉด minor gc๊ฐ ๋ฐ์ํฉ๋๋ค. ์ฐธ์กฐ๊ฐ ์ด์์๋ ๊ฐ์ฒด๋ง ๋จ๊ฒจ๋๊ณ , ๋๋จธ์ง๋ ๋ค ์ญ์ ํฉ๋๋ค.
- ์ด์์๋ ๊ฐ์ฒด๋ค ์ค ์ค๋ ์ฌ์ฉํ๊ฒ ๋ค๊ณ ํ๋จ๋ ๊ฐ์ฒด๋ค์ Tenured (๋๋ Old)์์ญ์ผ๋ก ์ฎ๊น๋๋ค.
- Young -> [ Servivor1 <-> Servivor2 ] -> Tenured ์ด๋ ๊ฒ ์ฌ๋ฌ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ์ค๋๋ ๊ฐ์ฒด๋ค์ด ๋ณต์ฌ, ์ญ์ ๋ฉ๋๋ค.
Servivor๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ ๋๋ฌธ์ ๋๋ค. ๊ฐ์ฒด๋ฅผ ํ ๋น ํ ์ ์์ ๋ ๋ฒ๊ฐ์๊ฐ๋ฉฐ Servivor๋ฅผ ์ฎ๊น๋๋ค.
@ Tenured generation (Old) ์์ญ
- Young ์์ญ์์ ์ฐธ์กฐ๊ฐ ์ด์์์ด ๋จ์์๋ ๊ฐ์ฒด๋ค์ ์ฌ๊ธฐ๋ก ๋ณต์ฌ๋ฉ๋๋ค.
- ๋ณดํต ๊ฐ์ฒด์ ์์ฑ๊ณผ ์ญ์ ๊ฐ ๋น ๋ฅธ Young์์ญ๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํฌ๊ฒ ํ ๋นํฉ๋๋ค.
- ์ด๋ ๊ฒ ์ธ๋๋ฅผ ๋๋ ์ ํ๋ GC๋ฐฉ์์ ๊ฐ์ฅ ํฐ ๋จ์ ์, ๋ง์ง๋ง ๊ณต๊ฐ์ ์ธ์ ๊ฐ ๊ฐ๋์ฐฌ๋ค๋ ๊ฒ์ ๋๋ค.
- ๋ง์ง๋ง ๊ณต๊ฐ์ธ Tenured ์์ญ์ด ๊ฐ๋์ฐจ๋ฉด major gc (๋๋ full gc)๊ฐ ๋ฐ์ํฉ๋๋ค.
์ฐธ์กฐ๊ฐ ์ด์์๋ ๊ฐ์ฒด๋ฅผ ์์๋ก ์ง์๋ฒ๋ ธ๋ค๊ฐ๋ ์ฑ์ ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ง ๋ชจ๋ฆ ๋๋ค.
๊ทธ๋์ ๋ง์ง๋ง Old ์์ญ๊น์ง ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ฐ๋์ฐจ๋ฒ๋ฆฌ๋ฉด, GC๋ Stop-the-world๋ฅผ ์คํํฉ๋๋ค.
์ฝ๊ฒ๋งํด JVM์ ์๋ ๋ชจ๋ ์ค๋ ๋๋ฅผ ๋ฉ์ถ๊ณ ๋น ๋ฅด๊ฒ Old ์์ญ์ ๊ฐ์ฒด๋ฅผ ์ค์บํ์ฌ ํ์์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํฉ๋๋ค.
์๋ฌด๋ฆฌ ์ข์ GC ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค๊ณ ํ๋ค, ๊ฒฐ๊ตญ Stop-the-world๋ ๋ฐ์ํฉ๋๋ค.
ํนํ ์๋ฒ ์ปดํจํฐ์ ๊ฒฝ์ฐ GC์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ปค์ GC๊ฐ ์์ด๊ณ ์์ด๋ค๊ฐ ํ๋ฒ์ ์ ๋ฆฌํ๋ ๊ฒฝ์ฐ, ๊ธธ๊ฒ๋ 2~3๋ถ๊ฐ ์๋ฒ๊ฐ ๋ฉ์ถฐ๋ฒ๋ฆด ์ ์์ต๋๋ค.
๊ทธ๋์ GC ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์ ํ๋ํ๊ฑฐ๋, ๊ฐ์ ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ง GC ๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ค์ ๋ก GC ์๊ณ ๋ฆฌ์ฆ์ด๋ผ ํจ์ Old ์์ญ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ฒ์ธ๊ฐ์ ๋ฐ๋ผ ๊ตฌ๋ถ์ง๊ฒ ๋ฉ๋๋ค.
Serial, Parallel, CMS[Concureent Mark & Sweep], G1[GarbageFirst]
https://d2.naver.com/helloworld/1329
# Old ์์ญ์ ์๋ ๊ฐ์ฒด๊ฐ Young ์์ญ์ ์ฐธ์กฐํ๋ฉด ์ด๋ป๊ฒ ๋๋์?
์ด๋ฌํ ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด Old ์์ญ์๋ 512๋ฐ์ดํธ ๋จ์(chunk)๋ก ๋์ด์๋ card table์ด ์กด์ฌํฉ๋๋ค.
์นด๋ ํ ์ด๋ธ์๋ Old ์์ญ์ ์๋ ๊ฐ์ฒด๊ฐ Young ์์ญ์ ์ฐธ์กฐํ ๋ ๋ง๋ค ์ ๋ณด๊ฐ ํ์๋ฉ๋๋ค.
minor gc, ์ฆ Young ์์ญ์ GCํ ๋์๋ ์ด ์นด๋ ํ ์ด๋ธ๋ง ์ถ๊ฐ๋ก ํ์ธํด์ GC ์ฌ๋ถ๋ฅผ ์๋ณํฉ๋๋ค.
์ฐธ๊ณ ๋ก ์นด๋ ํ ์ด๋ธ์ write barrier๋ฅผ ์ฌ์ฉํ์ฌ ๊ด๋ฆฌํฉ๋๋ค. ์ด๋ Minor GC๋ฅผ ์ ์ค๋ฒํค๋๋ฅผ ์ค์ด๊ธฐ ์ํด ์ฌ์ฉํ๋๋ฐ ๊ถ๊ธํ๋ฉด ํด๋น ๋งํฌ๋ฅผ ์ฐธ์กฐํด์ฃผ์ธ์.
# TLAB (Thread-Local Allocation Buffer)
GC๋ ๊ฒฐ๊ตญ JVM์๊ฒ ์ค๋ ๋๋ฅผ ํ ๋น๋ฐ์ ๋์ํ๋ ํ๋ก๊ทธ๋จ์ ๋๋ค.
์ฑ๋ฅ์ ๋์ด๊ธฐ ์ํด์ GC์ ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ํ ๋นํ๊ฒ ๋๋ฉด, ๊ฒฐ๊ตญ ์ค๋ ๋๊ฐ ๋๊ธฐํ ๋ฌธ์ , ๋ธ๋กํน์ด ์๊ธฐ๊ฒ ๋ฉ๋๋ค.
๊ทธ๋์ JVM์ Young์์ ์ฒ์ ์ฌ์ฉ๋๋ Eden์์ญ์ ์ฌ๋ฌ ๋ฒํผ๋ก ๋๋์ด, ์ค๋ ๋ ๋ณ๋ก ๋ณ๋์ ๊ณต๊ฐ์ ๊ฐ์ง๋๋ก ๋ง๋ญ๋๋ค. ์ด๋ฅผ Thread-Local ๋ฉ๋ชจ๋ฆฌ๋ผ๊ณ ํฉ๋๋ค.
๊ฐ๊ฐ์ ์ค๋ ๋๋ณ๋ก ๋ณ๋์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ์ง๊ธฐ์ ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฌ์ฉ๋์ง๋ง, ์ค๋ ๋ ๋ณ๋ก GC์ Eden ๊ณต๊ฐ์ด ์์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ณผ์ ์์ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ์๊ฐ ํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ ์ผ๋ก ํฐ ์ด๋์ ๊ฐ์ ธ์ต๋๋ค.
# ์ํํ์ ์๋ค. GC ํ๋
๋ชจ๋ ์ํฉ์ ์ต์ ์ธ GC๋ ์์ต๋๋ค.
์ด๋ ํ์ฌ์ ๋ฌผ์ด๋ด๋, ์๋๋ฉด ์์ Oracle JVM์ ๋ง๋๋ ์์ง๋์ด๋ค์๊ฒ ๋ฌผ์ด๋ด๋ ๊ฐ์ ๋ง์ ํฉ๋๋ค.
WAS์ ์ค๋ ๋ ๊ฐ์, ์ฅ๋น๋น ์ธ์คํด์ค ๊ฐ์, GC ์ต์ , ์๋น์ค์ ์ข ๋ฅ์ ๋ฐ๋ผ ์ต์ ์ GC ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ฉ๋ชจ๋ฆฌ ํ๋์ ๋ฌ๋ผ์ง๋๋ค. ์๋ฌด์๊ฐ์์ด ๋ง ํ๋์ ํ๋ฉด ์คํ๋ ค ์ฑ๋ฅ์ด ๋จ์ด์ง ์๋ ์์ต๋๋ค.
์ด๋ ๊ณต์์ด ์๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ JMX ๊ฐ์ ๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ก ํ์ธํ๋ฉด์ ์ง์ ๋ด ์๋น์ค์ ๋ง๋ GC ํ๋์ ํด์ผ ํฉ๋๋ค.
'๐๊ธฐ๋ณธ ์ง์ > Java ๊ธฐ๋ณธ์ง์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev