GC
Last updated
Last updated
Java runtime ์ Heap
์์ญ์ ์ ์ฅ๋๋ ๊ฐ์ฒด๋ค์ ๋ฐ๋ก ์ ๋ฆฌํ์ง ์์ผ๋ฉด ๊ณ์ ์์ด๊ฒ ๋์ด OutOfMemory Exception
์ด ๋ฐ์ํ ์ ์๋ค
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํ์ฌ JVM์์๋ ์ฃผ๊ธฐ์ ์ผ๋ก ์ฌ์ฉํ์ง ์๋ ๊ฐ์ฒด๋ฅผ ์์งํ์ฌ ์ ๋ฆฌํ๋ Garbage Collection
์ ์งํํ๋ค
๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ
new ์ฐ์ฐ์๋ก ์์ฑ๋ ๊ฐ์ฒด์ ๋ฐฐ์ด์ ์ ์ฅํ๋ค
young
: ๋น๊ต์ ์ ์ reference๊ฐ ์ด์์๋ ๊ณณ
eden
young generation ์ค์์๋ ๋ฐฉ๊ธ ๋ง ์์ฑ๋ reference๊ฐ ์๋ ๊ณณ
survior
์์ญ์ด ๋ ๊ฐ ์กด์ฌ
eden์์ ์์กดํ reference๊ฐ ๋น๋ถ๊ฐ ์์กดํด ์๋ ๊ณณ
old
: ํน์ ํ์ ์ด์ ์ด์๋จ์ reference๊ฐ ์์กดํด ์๋ ๊ณณ
permanent
: method area์ metadata ์ ๋ณด๊ฐ ๊ธฐ๋ก๋ ๊ณณ
GC๊ฐ ์ํ๋๋ ์์ญ์ ๋ฐ๋ผ
Minor GC
์Major GC
๋ก ๊ตฌ๋ถํ๋ค
Minor GC
Young Generation
(Eden๊ณผ Survivor 1, 2) ์์ญ์ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ์ญ์ ํ๋ค
Major GC
Minor GC ๊ณผ์ ์์ ์ญ์ ๋์ง ์๊ณ , Old Generation
์์ญ์ผ๋ก ์ฎ๊ฒจ์ง ๊ฐ์ฒด ์ค ๋ฏธ์ฌ์ฉ์ผ๋ก ํ๋จ๋๋ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ์ญ์ ํ๋ค
๋ฐ์ ์์ธ
Old Generation ์์ญ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ฐ๋ ์ฐจ์ ๋ ์ด์ ๊ฐ์ฒด๋ฅผ ํ ๋นํ ์ ์์ ๋
Old Generation ์์ญ์ ๊ฐ์ฒด ์ค์์ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ ๊ฐ์ฒด๊ฐ ๋ง์ ๋
์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฅ์๊ฐ ์คํ๋๊ณ Old Generation ์์ญ์ ๊ฐ์ฒด๊ฐ ์ง์์ ์ผ๋ก ์์ฑ๋๊ณ ์๋ฉธ๋ ๋
์ฃผ์ ์ฌํญ
Major GC๊ฐ ๋ฐ์ํ๋ฉด GC๋ฅผ ์คํํ๊ธฐ ์ํด JVM์ด ์ ํ๋ฆฌ์ผ์ด์
์คํ์ ๋ฉ์ถ๊ฒ ๋๋ฉฐ, ์ด๋ฅผ Stop-the-World
ํ์์ด๋ผ๊ณ ํ๋ค
๋ชจ๋ thread๊ฐ ์ ์ง๋๊ธฐ ๋๋ฌธ์ ๋ ์ด์ ์์ ์ด ์คํ๋์ง ์๊ณ , ์ฑ๋ฅ์ด ์ ํ๋๋ค
์ ์ ํ ๋น๋์ GC๊ฐ ์คํ๋๋๋ก ํ์ฌ, Stop-the-World ์๊ฐ์ ์ค์ฌ thread๊ฐ ์ ์ง๋๋ ์๊ฐ์ ์ค์ด๋ ๊ฒ์ด ์ค์ํ๋ค