GC๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ์ค๋ง๋ก, ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์กด์ฌํ๋ ๊ฐ์ฒด๋ค์ ์ ๊ธฐ์ ์ผ๋ก ์ ๋ฆฌํด ์ฃผ๋ฉฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ ์ญํ ์ ๋งก๋๋ค.
์ด๋ 1) ์ธํฐํ๋ฆฌํฐ 2) JIT ์ปดํ์ผ๋ฌ
์ ํจ๊ป JVM ์คํ ์์ง(Execution Engine)
๋ด์ ์ํด ์๋ค.
JVM ๋ฐํ์ ๋ฐ์ดํฐ ์์ญ ์ค, ํ ์์ญ์๋ new
๋ก ์๋กญ๊ฒ ์์ฑํ ๊ฐ์ฒด๋ค์ด ์ฌ๋ผ๊ฐ๋ค.
์ด๋ฌํ ๊ฐ์ฒด๋ค์ ์คํ ์์ญ์ ์๋ ์คํ ํ๋ ์๊ณผ ๋ค๋ฅด๊ฒ ๋ช ํํ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ๊ณ ์์ง ์์์, ์ ์ ๋ก ์๋ฉธํ์ง ์๋๋ค.
๋๋ฌธ์ GC๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก ์ด๋ฅผ ์ค์บํ๋ฉฐ, ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด(Unreachable)์ ๋ํด์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํด์ ํ๋ฉฐ ์ ๊ฑฐํ๊ฒ ๋๋ค.
์คํ ์์ญ์ ์ฌ๋ผ๊ฐ๋ ๋ฐ์ดํฐ๋ค์ ๋ฉ์๋ ํธ์ถ ์์ ์คํ ํ๋ ์์ด ์กํ๊ณ , ๋ฉ์๋๊ฐ ์ข ๋ฃ๋๋ฉด ํ๋ ์ ์์ฒด๊ฐ ์ ๊ฑฐ๋์ด ์๋ฉธํ๋ค.
ํ์ง๋ง ํ ์์ญ์ ์๋ ๊ฐ์ฒด๋ค์ ๋์ผํ๊ฒ ์ ๊ฑฐํ ์๊ฐ ์๋๋ฐ, ์ด๋ ์ฐธ์กฐ๋๋ค
๋ ํน์ฑ ๋๋ฌธ์ด๋ค.
Java์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด ํด๋น ๊ฐ์ฒด ์์ฒด๋ ํ์ ์ ์ฅ๋๊ณ , ๊ทธ ์ฃผ์(์ฐธ์กฐ๊ฐ)๊ฐ ์คํ์ ์ ์ฅ๋๋ค. ์ด ์ฐธ์กฐ๊ฐ์ ํตํด ์ฌ๋ฌ ๋ฉ์๋์์ ํด๋น ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ณ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
์๋ฅผ ๋ค์ด ๋ฉ์๋ ๋ด์์ ๋ค๋ฅธ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉฐ, ํ๋ผ๋ฏธํฐ๋ก ๊ฐ์ฒด๋ฅผ ๋๊ธฐ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
๋๋ฌธ์, ๋จ์ํ ๋ฉ์๋๊ฐ ๋๋ฌ๋ค๊ณ ํด์ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ก ์ญ์ ํ ์ ์๋ ๊ฒ์ด๋ค.
1. ํ ๊ณต๊ฐ ๋ถ์กฑ
- Eden ์์ญ์ด๋ Old ์์ญ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ผ์ ๋น์จ ์ด์ ์ฌ์ฉ๋์์ ๋ GC๊ฐ ๋ฐ์
System.gc()
ํธ์ถ
- ๋ช ์์ ์ผ๋ก GC ์์ฒญ. ํ์ง๋ง JVM์ด ๋ฌด์กฐ๊ฑด ์คํํ์ง ์์
- ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์คํจ
- ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ํ ๊ณต๊ฐ์ด ๋ถ์กฑํ๋ฉด, GC๋ก ๊ณต๊ฐ ํ๋ณด ํ ๋ค์ ์๋
์์ ๊ฐ์ ๊ฒฝ์ฐ์์ ์ค์บํ๋ฉฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํ๋ ค๊ณ ์๋ํ๋ค.
์ด์ธ์๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์์ ์ง์์ ์ผ๋ก GC๊ฐ ๋์ํ๊ธฐ๋ ํ๋๋ฐ, ์ด๋ GC์ ์ข ๋ฅ๋ง๋ค ๋ฌ๋ผ์ง๋ค.
๊ทธ๋ ๋ค. ํ๋๋ผ๋ ์ฐธ์กฐ๋๊ณ ์๋ ๊ฐ์ฒด์ ๋ํด์๋ ์ ๋๋ก ์ ๊ฑฐํ์ง ์๋๋ค.
๋ง์ฝ ์ด๋ฅผ ์ ๊ฑฐํ๊ฒ ๋๋ค๋ฉด ์น๋ช ์ ์ธ ์์คํ ์ฅ์ ๋ก ์ด์ด์ง ์ ์๊ธฐ ๋๋ฌธ์, ์์ ํ๊ฒ ํ์ ๊ฐ๋ฅํ ๊ฐ์ฒด์ ๋ํด์๋ง ์ ๋ฆฌํ๋ค.
C/C++
๊ณผ ๊ฐ์ Unmanaged ์ธ์ด
๋, ๊ฐ๋ฐ์๊ฐ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํด์ ๋ฅผ ํด์ฃผ์ด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์กด์ฌํ๋ค.
๋ฐ๋ฉด GC๋ ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด๋ค์ ์์์ ์ ๋ฆฌํด์ค์ผ๋ก์จ, ๊ฐ๋ฐ์ ์ ์ฅ์์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๋ํ ์ ๊ฒฝ์ ์ฐ์ง ์๊ณ ์ค๋ก์ง ๊ฐ๋ฐ์๋ง ์ง์คํ ์ ์๊ฒ ๋๋ค.
ํนํ, ๋ฉ๋ชจ๋ฆฌ ๋์(Memory Leak)
๋ ์ด์ค ํด์ (Double Free)
์ ๊ฐ์ ๋ฌธ์ ์์ ๋น๊ต์ ์์ ๋ก์์ง ์ ์๋ค.
์ด๋ฌํ GC๋ Java์๋ง ์กด์ฌํ๋ ๊ฐ๋
์ ์๋๋ฉฐ, Python & JS & Go
๋ฑ ๋ค๋ฅธ ๋ง์ ์ธ์ด์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ด์ฅ๋์ด ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ค์ Managed ์ธ์ด
๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๋ฉ๋ชจ๋ฆฌ ๋์(Memory Leak)๋?
๋ ์ด์ ์ฌ์ฉํ์ง ์์ง๋ง, ์ฌ์ ํ ์ฐธ์กฐ๋๊ณ ์์ด์ GC(๋๋ ์์คํ )๊ฐ ํ์ํ์ง ๋ชปํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋งํ๋ค.์๋ฅผ ๋ค์ด, ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ๋ฑ๋กํ์ง๋ง ํด์ ํ์ง ์๊ฑฐ๋ & ์ปฌ๋ ์ ์ ๊ฐ์ฒด๋ฅผ ๊ณ์ ๋ด์๋๊ณ ์ ๊ฑฐํ์ง ์์ ๊ฒฝ์ฐ ๋ฑ์ด ์กด์ฌํ๋ค.
์ด ๊ฒฝ์ฐ์๋ ์ ์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ค์ด๋ค์ด ์ฑ๋ฅ ์ ํ๋ OOM(OutOfMemoryError) ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ์กด์ฌํ๋ค.
๋ฌผ๋ก GC์์๋ ํด๋น ๋ฌธ์ ๊ฐ ์ผ์ด๋ ์ฌ์ง๊ฐ ์์ผ๋, ๊ฐ๋ฐ์๊ฐ ์ฐธ์กฐ๋ง ๋๋๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ ๋ฆฌ๊ฐ ๋๊ธฐ์ ๋น๊ต์ ์์ ๋กญ๋ค.
์ด์ค ํด์ (Double Free)๋?
์ด๋ฏธ ํด์ ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ค์ ํด์ ํ๋ ค๊ณ ์๋ํ๋ ๊ฒ์ ๋งํ๋ค.์๋ฅผ ๋ค์ด
free(ptr);
ํธ์ถ ํ, ๊ฐ์ ptr์ ๋ค์free(ptr);
ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.๊ทธ ๊ฒฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฅ, ์์คํ ํฌ๋์ ๋ฑ์ด ๋ฐ์ํ ์ ์๋ค.
GC๋ฅผ ์ฌ์ฉํ๋ ์ธ์ด์์๋ ์ง์ ํด์ ๋ฅผ ํ์ง ์๊ธฐ ๋๋ฌธ์, ์ด์ค ํด์ ๋ฌธ์ ์์๋ ์์ ๋ก์ธ ์ ์๋ค.
GC๋ฅผ ์ฌ์ฉํ๋ ์ธ์ด๋ ๊ฐ๋ฐ์ ์ ์ฅ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋ ๋งค์ฐ ํธ๋ฆฌํ๊ฒ ๋๊ปด์ง๋ค.
๊ทธ๋ ๋ค๋ฉด ๊ณผ์ฐ ์ข์ ์ ๋ง ์กด์ฌํ ๊น? ๋ฌผ๋ก ์๋์ ๊ฐ์ ๋จ์ ๋ ์กด์ฌํ๋ค.
1.
Stop-the-World
๋ฐ์
๋ํ์ ์ผ๋ก ๋ฐ์ํ๋ ๋ฌธ์ ์ ์ผ๋ก, GC๊ฐ ๋์ํ ๋ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ค๋ ๋๊ฐ ์ผ์ ์ค์ง๋๋ ๊ฒ์ ๋งํ๋ค.์งง์ผ๋ฉด ์ ๋ฐ๋ฆฌ์ด, ๊ธธ๋ฉด ์ ์ด๊น์ง ์ค๋จ๋ ์ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ์ฒด๊ฐ ์ง์ฐ์ด ๋ฐ์ํ ์ ์๊ณ , ํนํ ์ค์๊ฐ์ฑ์ด ์ค์ํ ์๋น์ค์ ์น๋ช ์ ์ด๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์,
๊ฒ์ & ์๋ฒ ๋๋
๋ฑ ์ค์๊ฐ์ฑ๊ณผ ์ ๋ฐํ ๋ฉ๋ชจ๋ฆฌ ์ ์ด๊ฐ ์ค์ํ ํ๊ฒฝ์์๋ C++๊ณผ ๊ฐ์ Unmanaged ์ธ์ด๊ฐ ์ ํ๋๋ค.
2. GC ํ์ด๋ฐ ์์ธก ๋ถ๊ฐ
GC๋ JVM์ ๋ด๋ถ ์๊ณ ๋ฆฌ์ฆ์ ์ํด ๋ฐ์ํ๋ฏ๋ก ์ ํํ ์คํ ์์ ์ ์ ์ดํ ์๊ฐ ์๋ค.๋ง์ฝ ํน์ ์์ ์ ๊ผญ ํ์ํ ์์ ์ด ์๋๋ฐ, ๊ทธ ์ง์ ์ GC๊ฐ ๋ฐ์ํ๋ฉด ์์์น ๋ชปํ ๋ ์ดํด์๊ฐ ์๊ธฐ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
3. ์ฒ๋ฆฌ ๋น์ฉ(์ค๋ฒํค๋) ๋ฐ์
GC ์์ ๋ CPU ์์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ฒ๋ฆฌ ๋น์ฉ์ด ๋ฌผ๋ก ๋ฐ์ํ๋ค.
4. ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๋ํ ํต์ ๊ถ ๋ถ์กฑ
๊ฐ๋ฐ์๊ฐ ์ง์ ๊ฐ์ฒด๋ฅผ ํด์ ํ ์ ์์ผ๋ฏ๋ก, ๋ฉ๋ชจ๋ฆฌ ํ๋๊ณผ ๋๋ฒ๊น ์ด ๊น๋ค๋ก์ด ํธ์ด๋ค.
ํนํ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํด๋ GC๊ฐ ๊ด์ฌํ์ง ๋ชปํ๋ ์์ญ์ด๋ฉด ์ถ์ ์ด ์ด๋ ต๋ค.
์์์ ์ธ๊ธํ๋ ๊ฒ์ฒ๋ผ, ์๋ก์ด ๊ฐ์ฒด๋ ํ ์์ญ ๋ด์ ์ ์ฅ๋๋ฉฐ ์ด๋ฅผ ์คํ & ๋ฉ์๋ ์์ญ์์ ์ฐธ์กฐํ๊ฒ ๋๋ค.
๋ง์ฝ 1๊ณณ์์๋ผ๋ ์ฐธ์กฐ๋๊ณ ์๋ ๊ฐ์ฒด๋ผ๋ฉด Reachable
ํ๋ค๊ณ ๋งํ๋ฉฐ, ๊ทธ๋ ์ง ์๊ณ ์๋ฌด๋ ์ฐธ์กฐํ๊ณ ์์ง ์๋ค๋ฉด Unreachable
ํ ์ํ๊ฐ ๋์ด์ GC์ ๋์์ด ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ํ๋จํ๊ธฐ ์ํด์ GC๋ ๋๋ฌ์ฑ ๋ถ์์ ์คํํ๊ฒ ๋๋ค.
๋๋ฌ์ฑ ๋ถ์์ด๋?
๋๋ฌ์ฑ ๋ถ์์
GC Root
์์๋ถํฐ ์์ํด ๊ฐ์ฒด๋ค์ด ์๋ก๋ฅผ ์ฐธ์กฐํ๋ ์ฐ๊ฒฐ ๊ด๊ณ๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉฐ,ํด๋น ๊ฐ์ฒด๊ฐ ๋๋ฌ ๊ฐ๋ฅํ์ง
๋ฅผ ํ๋จํ๋ ๊ณผ์ ์ ๋งํ๋ค.๋๋ฌ์ด ๊ฐ๋ฅํ, ์ฆ
Reachable
ํ ๊ฐ์ฒด๋ ์์ง ์์คํ ๋ด์์ ์ฌ์ฉ์ค์ด๊ธฐ์ ์ ๊ฑฐํ์ง ์๊ณ , ๊ทธ๋ ์ง ์์Unreachable
ํ ๊ฐ์ฒด๋ ์ ๊ฑฐํ๊ฒ ๋๋ค.ํด๋น ๊ณผ์ ์ ์ผ๋ฐ์ ์ผ๋ก
BFS ๋๋ DFS
๋ก ์ด๋ฃจ์ด์ง๋ค.
GC Root?
JVM์์ ๋๋ฌ์ฑ ๋ถ์์ ํ ๋ ๊ธฐ์ค์ด ๋๋ ์ถ๋ฐ์ ์ผ๋ก, ๋ฃจํธ๋ค๋ก๋ถํฐ ์์ํด์ ์ฐธ์กฐ ๊ทธ๋ํ๋ฅผ ๋ฐ๋ผ๊ฐ๊ฒ ๋๋ค.
๋ํ์ ์ผ๋ก GC Root์ ์ข ๋ฅ๋ ์๋์ ๊ฐ๋ค.
- ํ์ฌ ์คํ ์ค์ธ ์ค๋ ๋์ ์คํ ํ๋ ์ ์์ ์๋ ์ง์ญ & ๋งค๊ฐ ๋ณ์
- ํด๋์ค์ static ํ๋์์ ์ฐธ์กฐํ๋ ๊ฐ์ฒด
- JNI์์ ์ฐธ์กฐ ์ค์ธ ๊ฐ์ฒด
Mark-and-Sweep ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ GC ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ๋ ๋์ ๊ฐ์ฒด๋ฅผ ์๋ณ(Mark)ํ๊ณ ์ ๊ฑฐ(Sweep)ํด ๋๊ฐ๋ค.
์ดํ GC ์ข
๋ฅ์ ๋ฐ๋ผ์, ํํธํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์์์๋ถํฐ ์ฑ์๋๊ฐ๋ฉฐ ์์ถํ๋ Compact
๊ณผ์ ์ด ์กด์ฌํ๊ธฐ๋ ํ๋ค.
1. Mark ๊ณผ์
- GC Root์์ ์์ํ์ฌ ์ฐธ์กฐ ๊ทธ๋ํ๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉฐ, ๋๋ฌํ ์ ์๋ ๊ฐ์ฒด๋ ๋ชจ๋ ๋งํนํ๋ค.
2. Sweep ๊ณผ์
- Mark ๊ณผ์ ์ด ๋๋ ์ดํ, ๋๋ฌํ์ง ๋ชป ํ๋(Unreachable) ๊ฐ์ฒด๋ค์ ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์์ ์ ๊ฑฐํ๋ค.
Stop-the-World
์๊ฐ์ด ๊ธธ์ด์ง๋ค.Compact
๊ณผ์ ์ด ์๋ค๋ฉด, ๋ฉ๋ชจ๋ฆฌ ๋จํธํ๊ฐ ๋ฐ์ํ๋ค.๋ฉ๋ชจ๋ฆฌ ๋จํธํ?
๊ฐ์ฒด๋ค์ด ์ ๊ฑฐ๋ ํ ๋น ๊ณต๊ฐ์ด ๋ ๋ฉ๋ชจ๋ฆฌ๋ค์ด, ์ฌ๊ธฐ์ ๊ธฐ์ ํฉ์ด์ ธ ์์ด์ ์ฐ์๋์ง ์์ ์กฐ๊ฐ์ผ๋ก ๋จ์ ๋นํจ์จ์ ์ธ ์ํฉ์ ๋งํ๋ค.
[ A ][ ][ C ][ ][ E ]
ํด๋น ์ํฉ์์ ๋น ๊ณต๊ฐ์ 2์นธ์ด์ง๋ง, ๋ ์นธ์ด ์ฐ์๋์ง ์๊ธฐ ๋๋ฌธ์ ์ฌ์ด์ฆ๊ฐ 2์ธ ๊ฐ์ฒด๋ฅผ ๋ฃ์ ์๋ ์๋ค.
์ด ๋๋ฌธ์ ์ ์ฒด ์ฌ์ฉ๋์ ๋ฎ์๋ฐ๋ OOM์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธด๋ค.
๐ง๐ปโ๐ป ๋ฉ๋ชจ๋ฆฌ ๋จํธํ์ ๊ฐ์ ๋ฌธ์ ๋๋ฌธ์,
Compact
๊ณผ์ ์ด ๋์ ๋๊ธฐ๋ ํ๋ค.
์ด ๊ณผ์ ์ ์ด์์๋ ๊ฐ์ฒด๋ค์ ํ์ชฝ์ผ๋ก ๋ชฐ์๋ถ์ฌ ์ฐ์๋ ๊ณต๊ฐ์ ํ๋ณดํ๋ ๋ฐฉ์์ด๋ค.ํ์ง๋ง ๊ฐ์ฒด๋ฅผ ์ด๋์ํค๋ ๋ฐ์๋
์ถ๊ฐ ์ฐ์ฐ๊ณผ ํฌ์ธํฐ ๊ฐฑ์ ๋น์ฉ
์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์,
์ฑ๋ฅ ์ค๋ฒํค๋๊ฐ ํฌ๊ณ , ์ฌ์ ํStop-the-World
๊ฐ ๋ฐ์ํ๋ค๋ ํ๊ณ๊ฐ ์กด์ฌํ๋ค.
ํ ์์ญ์ ์ฒ์ ์ค๊ณ๋ ๋, ์๋ 2๊ฐ์ง๋ฅผ ์ ์ ๋ก ์ค๊ณ๋์๋ค.
Weak Generational Hypothesis(์ฝํ ์ธ๋ ๊ฐ์ค)
- ๋๋ถ๋ถ์ ๊ฐ์ฒด๋ ๊ธ๋ฐฉ ์ ๊ทผ ๋ถ๊ฐ๋ฅํ ์ํ(Unreachable)๊ฐ ๋๋ค.
- ์ค๋๋ ๊ฐ์ฒด์์ ์๋ก์ด ๊ฐ์ฒด๋ก์ ์ฐธ์กฐ๋ ๋งค์ฐ ๋๋ฌผ๊ฒ ์กด์ฌํ๋ค.
์ฆ, ๋๋ถ๋ถ์ ๊ฐ์ฒด๋ ์ผํ์ฑ์ด๋ฉฐ ๋ฉ๋ชจ๋ฆฌ์ ์ค๋ ๋จ์์๋ ๊ฒฝ์ฐ๊ฐ ๋๋ฌผ๋ค๋ ๊ฒ์ด๋ค.
์ด๋ฌํ ํน์ฑ์ ์ด์ฉํด JVM ๊ฐ๋ฐ์๋ค์ ๋ณด๋ค ํจ์จ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํด์, 1) Young 2) Old
๋ก ๋ฌผ๋ฆฌ์ ์ธ ํ ์์ญ์ ๋๋๊ฒ ๋์๋ค.
Minor GC
๋ผ๊ณ ๋ถ๋ฅธ๋ค.Reachable
์ํ๋ฅผ ์ ์งํ์ฌ ์ด์๋จ์ ๊ฐ์ฒด๊ฐ ๋ณต์ฌ๋๋ ์์ญ์ด๋ค.Major GC
๋๋ Full GC
๋ผ๊ณ ๋ถ๋ฅธ๋ค.Young ์์ญ์์๋ ๊ฐ์ฒด๊ฐ ์์ฃผ ์์ฑ๋๊ณ ๊ธ๋ฐฉ ์ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์, JVM์ ์ด ์์ญ์์์ GC ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋ฐ ์ค์ ์ ๋๋ค.
๋๋ฌธ์ Young ์์ญ์ ๋ค์ 3๊ฐ์ง ์์ญ์ผ๋ก ๋๋๊ฒ ๋๋ค.
new
๋ฅผ ํตํด์ ์๋กญ๊ฒ ์์ฑ๋ ๊ฐ์ฒด๋ค์ด ์์นํ๊ฒ ๋๋ค.Minor GC
์์ ์ด์๋จ์ ๊ฐ์ฒด๋ค์ด ์กด์ฌํ๋ ์์ญ์ด๋ค.์์์ Minor GC๋ Young ์์ญ์์ ๋ฐ์ํ๋ GC ์์
์ด๋ผ๊ณ ์ธ๊ธํ์๋ค.
Minor GC๋ ์๋์ ๊ฐ์ ๋์ ๊ณผ์ ์ ๊ฐ์ง๋ค.
- ์ฒ์ ์์ฑ๋ ๊ฐ์ฒด๋ค์
Eden
์์ญ์ ์์นํ๋ค.- ๊ฐ์ฒด๊ฐ ๊ณ์ ์์ฑ๋์ด,
Eden
์์ญ์ด ๊ฝ ์ฐจ๊ฒ ๋๋ฉด Minor GC๊ฐ ์คํ๋๋ค.Mark
๋จ๊ณ์์Reachable
ํ ๊ฐ์ฒด๋ฅผ ํ์ํ๋ค.- Eden ์์ญ์์ ์ด์๋จ์ ๊ฐ์ฒด๋, ํ๋์
Survivor
์์ญ์ผ๋ก ์ด๋ํ๋ค.- Eden ์์ญ์์ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด(Unreachable)๋ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ค.(
Sweep
๋จ๊ณ)- ์ด์๋จ์ ๋ชจ๋ ๊ฐ์ฒด๋ค์
Age
๊ฐ์ด 1์ฉ ์ฆ๊ฐํ๋ค.
Age ๊ฐ์ด๋?
Survivor ์์ญ์์ ๊ฐ์ฒด๊ฐ ์ด์๋จ์ ํ์๋ฅผ ์๋ฏธํ๋ฉฐ, Object Header์ ๊ธฐ๋ก๋๋ค.
- Eden์ ์๋ ๊ฐ์ฒด์
์ด๊ธฐ age ๊ฐ์ 0
์ด๋ค.Object Header
๋ JVM์ด ๊ฐ์ฒด์ ๋ถ์ฌํ๋๋ด๋ถ ๋ฉํ๋ฐ์ดํฐ ๊ณต๊ฐ
์ด๋ค.๋ง์ฝ age ๊ฐ์ด ์๊ณ๊ฐ์ ๋ค๋ค๋ฅธ๋ค๋ฉด
Promotion(Old ์์ญ์ผ๋ก ์ด๋ํ๋)
์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ค.
๊ฐ์ฅ ๋ณดํธ์ ์ธ HotSpot JVM์ ๊ฒฝ์ฐ์๋ age์ ๊ธฐ๋ณธ ์๊ณ๊ฐ์ด 15์ด๋ค.์ฆ, age๊ฐ 15์ ๋๋ฌํ๋ฉด
Young -> Old ์์ญ
์ผ๋ก ์ด๋ํ ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
Minor GC๋ฅผ ์์๋ณด๋ฉฐ, ์๋์ ๊ฐ์ ๊ถ๊ธ์ฆ์ด ์๊ฒจ๋ฌ๋ค.
๊ทธ๋ ์ง ์๋ค. ์ฌ๊ธฐ์๋ Survivor From
์์ญ๋ ํฌํจ๋๋ค.
Survivor From ์์ญ์ด๋?
์์์ Survivor 0, 1 ์์ญ์ ์ค๋ช ํ๋ฉฐ, ๋ ์ค ํ๋๋ ๊ผญ ๋น์ด ์์ด์ผํ๋ค๊ณ ๋งํ์๋ค.
๊ทธ ์ด์ ๋ Minor GC์์ ์ด์๋จ์, age๋ฅผ +1 ํ๊ฒ ๋ ๊ฐ์ฒด๋ค์ด ๋ณต์ฌ๋ ๊นจ๋ํ ๊ณต๊ฐ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ฌ๊ธฐ์
Survivor From
์ Eden๊ณผ ํจ๊ป Minor GC์ ๋์์ด ๋๋ ์์ญ์ด๋ฉฐ,Survivor To
๋ ๋ณต์ฌ๊ฐ ๋๋ ๊ณต๊ฐ์ด ๋๋ค.์ด๋ฅผ ์ ์งํ๊ธฐ ์ํด์, Survivor 0, 1์ ๋ฒ๊ฐ์ ๊ฐ๋ฉฐ
From, To
์ญํ ์ ๋งก๊ฒ ๋๋ค.์ฆ, Survivor 0์ด From์ธ ์ํ์์ Minor GC๊ฐ ๋ฐ์ํ๋ค๋ฉด, Survivor 1์ด To์ธ ์ํ์ด๋ฏ๋ก age + 1 ๋ ๊ฐ์ฒด๋ค์ ๋ณต์ฌํ๊ฒ ๋๊ณ , ๋ค์ ๊ณผ์ ์์๋ ๊ทธ ๋ฐ๋๊ฐ ๋๋ ๊ฒ์ด๋ค.
Survivor From, to (=Survivor 0, 1)
์ ์๋ค๊ฐ๋คํ๋ฉฐ(age++) ์ด์๋จ์ ๊ฐ์ฒด๋ง์ด, Old ์์ญ์ผ๋ก ์ด๋ํ ์ ์๊ฒ ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก๋ Eden์ด ๊ฝ ์ฐฌ ๊ฒฝ์ฐ์ ๋ฐ์ํ๊ณ ๋ ํ๋ค.
ํ์ง๋ง Survivor ๊ณต๊ฐ์ด ๋ถ์กฑํ๊ฑฐ๋, System.gc()
ํธ์ถ ๋ฑ ์ธ๋ถ ์์ธ์ผ๋ก ์ธํด์ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ๋ ์กด์ฌํ๋ค.
Survivor ๊ณต๊ฐ์ด ๋ถ์กฑํ ๊ฒฝ์ฐ?
Survivor From -> To๋ก ์ด๋์์ผ์ผ ํ๋๋ฐ, ๊ณต๊ฐ์ด ๋ถ์กฑํ๋ค๋ฉด JVM์
Early Promotion (์กฐ๊ธฐ ์น๊ฒฉ)
์ ๋ฐฉ์์ ํํ๊ฒ ๋๋ค.์ด๋ age์ ์๊ด์์ด ์์ง Old๋ก ์น๊ฒฉํ ๋์ด๊ฐ ์ ๋ ๊ฐ์ฒด๋ฅผ ๊ทธ๋ฅ Old ์์ญ์ผ๋ก ์น๊ฒฉ์์ผ๋ฒ๋ฆฌ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์กฐ๊ธฐ ์น๊ฒฉ์ด ๋ง์ด ์ด๋ฃจ์ด์ง๊ฒ ๋๋ค๋ฉด, Old ์์ญ์ด ํฌํ๋์ด Major GC๊ฐ ๋ฐ์ํ๋ ํ์๊ฐ ๋์ด๋ ์ ์๋ค.
๋๋ฌธ์ ์ด๋ฅผ ํผํ๊ธฐ ์ํด์, Survivor ์์ญ ํฌ๊ธฐ์, ์๊ณ๊ฐ์ ์ ์ ํ๊ฒ ์กฐ์ ํ๋ ๊ฒ์ด ํ์ํ๋ค.
Java ๊ฐ์ฒด๋ ์์ฑ๋ ๋ Object Header
๋ผ๋ ๋ฉํ๋ฐ์ดํฐ ์์ญ์ ๊ฐ๋๋ค.
์ด ์ค์์๋ Mark Word
๋ GC ์ํ๊ณผ ๊ด๋ จ๋ ๋ค์ํ ์ ๋ณด๋ฅผ ํฌํจํ๋ ํ๋์ด๋ค.
Mark Word๋ ๋ณดํต 64๋นํธ ํฌ๊ธฐ์ด๋ฉฐ, ์ด ์์๋ ์๋์ ๊ฐ์ ์ ๋ณด๋ค์ด ํฌํจ๋๋ค.
- Identity Hash Code
- Lock ์ํ ์ ๋ณด (lightweight, biased locking ๋ฑ)
- Object age (๊ฐ์ฒด ์์กด ํ์)
์ด ์ค Object age
์๊ฒ๋ ์ฝ 5~6๋นํธ ์ ๋์ ๊ณต๊ฐ์ด ์ฃผ์ด์ง๋ค. ๋๋ฌธ์ 5๋นํธ๋ผ๊ณ ํ๋ค๋ฉด, 0~31
๊น์ง์ ๊ฐ์ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๊ธฐ์ ๋ง์ ์ฌ๋๋ค์ด Hotspot JVM์ ๊ธฐ๋ณธ ์๊ณ๊ฐ์ด 31์ด๋ผ๊ณ ๋ค ํ๋๋ฐ, ์ด๋ ์กฐ๊ธ ํ๋ฆฐ ๋ถ๋ถ์ธ ๊ฒ ๊ฐ๋ค.
31์ ํํ ๊ฐ๋ฅํ ๋ฒ์์ ๋, ์ฆ ์ต๋๊ฐ
์ผ ๋ฟ์ด๋ฉฐ, Old ์์ญ์ผ๋ก ์น๊ฒฉ๋๋ ๊ธฐ์ค ์๊ณ๊ฐ
์ ๊ธฐ๋ณธ์ ์ผ๋ก 15์ด๋ค.
๊ทธ๋ฆฌ๊ณ ํด๋น ์๊ณ๊ฐ์, ํ์์ ๋ฐ๋ผ -XX:MaxTenuringThreshold ์ต์
์ผ๋ก ๊ฐ๋ฐ์๊ฐ ์กฐ์ ๊ฐ๋ฅํ๋ค.
๋ค์ ์ ๋ฆฌํ์๋ฉด, Object age๋ ์ด๋ก ์ ์ผ๋ก ์ต๋ 31๊น์ง ํํํ ์ ์์ง๋ง, ์ฑ๋ฅ ์ต์ ํ์ GC ํจ์จ์ฑ์ ๊ณ ๋ คํด HotSpot JVM์ ๊ธฐ๋ณธ ์๊ณ๊ฐ์ 15๋ก ์ค์ ํด๋์๋ค.
์ด์ ๋ถํฐ๋ Old ์์ญ ๋ด์์ ๋ฐ์ํ๋ Major GC
์ ๋ํด ์ ๋ฆฌํ๊ณ ์ ํ๋ค.
๋ํ์ ์ผ๋ก Major GC
๊ฐ ๋ฐ์ํ๊ฒ ๋๋ ์๊ฐ์ ์๋์ ๊ฐ๋ค.
1. Old ์์ญ์ด ๊ฐ๋ ์ฐฌ ๊ฒฝ์ฐ
- Old ์์ญ ์์ฒด๊ฐ ์ด๋ฏธ ๋๋ถ๋ถ ์ฌ์ฉ ์ค์ธ ์ํ์ด๋ค.
- Old ์์ญ์ ์ฌ์ฉ๋ฅ ์ด ๋์์ JVM์ด ์ ์ ์ ์ผ๋ก Major GC๋ฅผ ์ํํ๋ค.
- ์ด ๊ฒฝ์ฐ์๋ ์ ๊ธฐ์ ์ธ GC ๊ด๋ฆฌ ์ฐจ์์์ ๋ฐ์ํ๋ค.
2. Promotion Failure (์น๊ฒฉ ์คํจ)
- Minor GC ์ดํ, age๊ฐ ์๊ณ๊ฐ์ ๋ค๋ค๋ฅธ ๊ฐ์ฒด๋ค์ Promotionํ๋ ค๋ ์์ ์ Old ์์ญ์ ์๋ฆฌ๊ฐ ์์ด ์คํจํ๋ ๊ฒฝ์ฐ์ด๋ค.
- ์ด ๋ JVM์ ์ฆ์ Major GC๋ฅผ ๊ฐ์ ๋ก ํธ๋ฆฌ๊ฑฐํ์ฌ Old ์์ญ์ ๋น์ฐ๋ ค๊ณ ์๋ํ๋ค.
Major GC ๐ Full GC?
- Major GC๋ ์ผ๋ฐ์ ์ผ๋ก Old ์์ญ๋ง์ ๋์์ผ๋ก ์ํ๋๋ GC์ด๋ค. ์ฆ,
Minor or Major GC
๋ก ์์ญ์ด ๋ช ํํ๊ฒ ๊ตฌ๋ถ๋์ด ์๋ค.๋ฐ๋ฉด,
Full GC
๋ Old + Young + ๊ธฐํ ์์ญ(Metaspace ๋ฑ)์ ๋ชจ๋ ์์งํ๋ ๋ฌด๊ฑฐ์ด ์์ ์ด๋ค.
- JVM์ด ๊ฐ์ ์ ์ผ๋ก ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ฒํด์ผ ํ๋ค๊ณ ํ๋จํ ๋ ๋ฐ์ํ๋ค.
System.gc() ํธ์ถ
Old ์์ญ ํฌํ / Promotion ์คํจ
Permanent/Metaspace ๋ถ์กฑ
๋ฑ ..G1 GC ๋ฑ ์ผ๋ถ ์๊ณ ๋ฆฌ์ฆ์์๋ ๋ ์ฉ์ด๊ฐ ์ ์ฐํ๊ฒ ๊ฐ์ ์๋ฏธ๋ก ์ฐ์ด๊ธฐ๋ ํ๋ค.
Major GC๋ Minor GC์ ๋นํด์ ๋ง์ ์๊ฐ์ด ์์๋๋ค. ๋๋ฌธ์ ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ๋ฉ์ถ๋ Stop-the-World
๋ฌธ์ ๊ฐ ๋์ฑ ๋๋๋๋ค. (๋ฌผ๋ก Minor GC์์๋ Stop-the-World
๋ฌธ์ ๋ ์๋ค.)
์ Major GC๊ฐ Minor GC๋ณด๋ค ์ค๋ ๊ฑธ๋ฆด๊น?
1. ๋์ ์์ญ์ ํฌ๊ธฐ๊ฐ ํฌ๋ค
- Major GC๋ Old ์์ญ ์ ์ฒด๋ฅผ ๋์์ผ๋ก ํ๋๋ฐ, ์ผ๋ฐ์ ์ผ๋ก Young ์์ญ๋ณด๋ค ํฌ๊ธฐ๋ ํฌ๊ณ ๊ฐ์ฒด ์๋ช ๋ ๊ธธ๋ค.
- ์ฆ, ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ฒ์ฌํ ๋์์ด ๋ง์ผ๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆด ์๋ฐ์ ์๋ ๊ฒ์ด๋ค.
2. ๊ฐ์ฒด ์๋ช ์ด ๊ธธ๋ค
- Old ์์ญ์๋ ์ค๋ซ๋์ ์ด์๋จ์ ๊ฐ์ฒด๋ค์ด ์กด์ฌํ๋๋ฐ, ์ด๋ค์ ์ฐ๊ฒฐ ๊ด๊ณ๊ฐ ๋ณต์กํ๊ณ ์ฐธ์กฐ ๊ทธ๋ํ๋ ๊น์ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
- ๋๋ฌธ์ Reachable ํ๋ณ(Mark ๋จ๊ณ)์ ์๊ฐ์ด ๋ ๋ง์ด ๋ค๊ฒ ๋๋ค.
์ง๊ธ๊น์ง GC๋ ๋ฌด์์ธ์ง, ๋์์๋ฆฌ๋ ์ด๋ป๊ฒ ๋๋์ง, ํ ์์ญ์ ์ด๋ป๊ฒ ๊ตฌ์ฑ๋์ด ์๊ณ ์ด๋ค GC๊ฐ ๋ฐ์ํ์ฌ ์ ๋ฆฌ๋๋์ง ๋ฑ์ ์์๋ณด์๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก GC์์ ๋ฐ์ํ๋ ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ Stop-the-World
์ด๊ธฐ ๋๋ฌธ์, ๊ฐ๋ฐ์๋ค์ ๋์์์ด GC ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ์ ์์ผ ์๋ค.
Java๋ฅผ ์ด์ํ๋ ํ๊ฒฝ์ด ๊ณ์ํด์ ๋ฐ์ ํจ์ ๋ฐ๋ผ์, ์ด๋ฅผ ๋ง์ถ๊ธฐ ์ํด ํ์ ์ฌ์ด์ฆ๋ ์ ์ ์ปค์ง๊ฒ ๋์๋ค.
๋๋ฌธ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์ฐ ํ์์ด ๋์ฑ ๋ฌธ์ ๊ฐ ๋์๊ณ , ์ด๋ฅผ ์ต์ ํํ๊ธฐ ์ํด์ ๋ค์ํ GC ์๊ณ ๋ฆฌ์ฆ์ด ๊ฐ๋ฐ๋์๋ค.
์๋์์ ์๊ฐํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ชจ๋ Java ๋ด์์ ์ค์ ์ ํตํด ์ ์ฉํ ์๊ฐ ์๋ค. ์ฆ, ์ํฉ์ ๋ฐ๋ผ์ ํ์ํ GC ๋ฐฉ์์ ์ธ ์ ์๋ค๋ ๊ฒ์ด๋ค.
Stop-the-World
์๊ฐ์ด ๊ธธ๋ค.Minor GC
์์๋ Mark-and-Sweep
/ Major GC
์์๋ Mark-Sweep-Compact
๋ฅผ ์ฌ์ฉํ๋ค.Java 8
์ ๋ํดํธ GC์ด๋ค.Serial GC
์ ๊ธฐ๋ณธ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ง๋ง, Young ์์ญ์ Minor GC๋ฅผ ๋ฉํฐ ์ค๋ ๋๋ก ์ํ (Old ์์ญ์ ์ฌ์ ํ ์ฑ๊ธ ์ค๋ ๋)ํ๋ค.Serial GC
์ ๋นํด Stop-the-World
์๊ฐ์ด ๊ฐ์๋์๋ค.Parallel GC
๋ฅผ ๊ฐ์ ํ ๋ฒ์ ์ด๋ค.Mark-Summary-Compact
๋ฐฉ์์ ์ด์ฉํ๋ค.Summary ๋จ๊ณ?
- ํ ์ ์ฒด๋ฅผ ์ค์บํ์ฌ
์ด์์๋ ๊ฐ์ฒด๋ค์ ์์น ์ ๋ณด
๋ฅผ ์์ฝ(Summary)ํ๋ค.- ์ฆ, ์ด๋ค ์์ญ์ด ๋น์๊ณ , ์ด๋ค ์์ญ์ ์ด์์์ผ๋ฉฐ, ์ด๋๋ก ๋ณต์ฌํด์ผ ํ ์ง๋ฅผ ๋ฏธ๋ฆฌ ๊ณ์ฐํ๋ ๊ฒ์ด๋ค.
- ํด๋น ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค์ ๋จ๊ณ์์ ์์ถ(compaction)์ ํจ์จ์ ์ผ๋ก ์ํํ ์ ์๊ฒ ๋๋ค.
Stop-the-World
์๊ฐ์ ์ต๋ํ ์ค์ด๊ธฐ ์ํด ๊ณ ์๋ GC ์๊ณ ๋ฆฌ์ฆ์ด๋ค.CMS GC
๋ Java9 ๋ฒ์ ๋ถํฐ deprecated ๋์๊ณ ๊ฒฐ๊ตญ Java14์์๋ ์ฌ์ฉ์ด ์ค์ง๋์๋ค.CMS GC
๋ฅผ ๋์ฒดํ๊ธฐ ์ํด jdk7 ๋ฒ์ ์์ ์ต์ด๋ก release๋ GC์ด๋ค.Young/Old ์์ญ
์ ๊ณ ์ ๋ ๊ตฌ์ญ์ผ๋ก ๋๋๋ ๋ฐฉ์์ด ์๋, Region
์ด๋ผ๋ ๊ณ ์ ํฌ๊ธฐ ๋ธ๋ก๋ค๋ก ์ ์ฒด Heap์ ๋ถํ ํด์ ์ ๋์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐฉ์์ด๋ค.Region์ด๋?
์ ์ฒด Heap ์์ญ์
Region
์ด๋ผ๋ ์์ญ์ผ๋ก ์ฒด์ค๊ฐ์ด ๋ถํ ํ์ฌ ์ํฉ์ ๋ฐ๋ผ Eden, Survivor, Old ๋ฑ ์ญํ ์ ๊ณ ์ ์ด ์๋ ๋์ ์ผ๋ก ๋ถ์ฌํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
Eden / Survivor / Old Region
๋ ๋ชจ๋Generation
๊ณผ ๋์ผํ๋ฉฐ, ๋งค์ฐ ํฐ ๊ฐ์ฒด(Region ํฌ๊ธฐ์ 50%๋ฅผ ์ด๊ณผ)๋ฅผ ์ ์ฅํ๋Humongous Region
์ด ์กด์ฌํ๋ ๊ฒ์ด ์ฐจ์ด์ ์ด๋ค.
ps. G1 GC์ ๋ํด์๋ ๋ ์์ธํ ๋ค์ ๊ธ์์ ๋ค๋ฃจ์ด ๋ณผ ์์ ์ด๋ค.
๋์์ฑ(Concurrent) GC
๋ก, Stop-The-World
์๊ฐ์ ๋ช ms ์์ค์ผ๋ก ์ต์ํํ๊ธฐ ์ํด ๊ณ ์๋ GC ์๊ณ ๋ฆฌ์ฆ์ด๋ค.์ฆ, GC๊ฐ ๋ ๋ง์ CPU ์์์ ์ฌ์ฉํ๋๋ผ๋, ์ ํ๋ฆฌ์ผ์ด์ ์ Stop-The-World ์๊ฐ์ ์ค์ด๊ธฐ ์ํด ์ค๊ณ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค
์ด์ ์ง์ฐ(low-latency)
์ ๋ชฉํ๋ก ์ค๊ณ๋ GC๋ก, Stop-The-World
์๊ฐ์ด 1~2ms ์์ค์ ๋์ง ์๋๋ก ๋ณด์ฅํ๋ ๊ฒ์ด ๊ฐ์ฅ ํฐ ํน์ง์ด๋ค.ZPage
๋ผ๋ ๋จ์๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ์ง๋ง, ZPage๋ ๊ณ ์ ํฌ๊ธฐ๊ฐ ์๋ 2MB ๋ฐฐ์์ ํฌ๊ธฐ๋ก ๋์ ํ์ฅ๋๋ค.Stop-The-World
๋ฅผ ๋ฐ์์ํจ๋ค.