JDK 5.0์ด์์์ ์ง์ํ๋ GC ๋ฐฉ์์๋ ๋ค๊ฐ์ง๊ฐ ์๋ค. WAS๋ ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ํ์ ์ต์ ์ ์ง์ ํ์ฌ ์ ํํ ์ ์๋ค.
4๊ฐ์ง GC(๊ฐ๋น์ง ์ฝ๋ ํฐ) ๋ฐฉ์
- Serial GC (์๋ฆฌ์ผ ์ฝ๋ ํฐ)
- Parallel GC (๋ณ๋ ฌ ์ฝ๋ ํฐ)
- Parallel Compacting GC (Parallel Old GC, ๋ณ๋ ฌ ์ปดํฉํ ์ฝ๋ ํฐ)
- Concurrent Mark-Sweep GC (CMS ์ฝ๋ ํฐ)
- Garbage First GC (G1 GC)
JVM GC ๋์ ์์
์์ฝํ๋ฉด GC ๋์์ ์๋ 3 STEP์ผ๋ก ๋๋ ์ง๋ค.
- Heap ์์ญ์ ์กด์ฌํ๋ ๊ฐ์ฒด๋ค์ ๋ํด ์ ๊ทผ ๊ฐ๋ฅํ์ง ํ์ธํ๋ค.
- GC Root์์ ๋ถํฐ ์์ํ์ฌ ์ฐธ์กฐ๊ฐ์ ๋ฐ๋ผ๊ฐ๋ฉฐ ์ ๊ทผ ๊ฐ๋ฅํ ๊ฐ์ฒด๋ค์ Markํ๋ ๊ณผ์ ์ ์งํํ๋ค.
- Mark ๋์ง ์์ ๊ฐ์ฒด ์ฆ, ์ ๊ทผํ ์ ์๋ ๊ฐ์ฒด๋ ์ ๊ฑฐ(Sweep) ๋์์ด ๋๊ณ , ํด๋น ๊ฐ์ฒด๋ค์ ์ ๊ฑฐํ๋ค.
์ ๊ทผ ๊ฐ๋ฅํ ๊ฐ์ฒด ํ๋จ ๊ณผ์
GC Root์์ ์์ํด์ ์ฐธ์กฐํ๋ ๊ฐ์ฒด๋ฅผ ์ฐพ๊ณ , ๋ ๊ทธ ๊ฐ์ฒด๊ฐ ์ฐธ์กฐํ๋ ๊ฐ์ฒด๋ฅผ ์ฐพ์๊ฐ๋ฉฐ Mark ํ๋ค.

Mark ๋์ง ์์ ๊ฐ์ฒด๋ ์ ๊ทผํ ์ ์๋ ๊ฐ์ฒด (Unreachable Object)๋ก ํ๋จํ๊ณ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋๋ฉฐ ์ ๊ฑฐ(Sweep)ํ๋ค.
GC Root๊ฐ ๋ ์ ์๋ ๋์
- JVM ๋ฉ๋ชจ๋ฆฌ์ Stack ์์ญ์ ์กด์ฌํ๋ ์ฐธ์กฐ ๋ณ์
- Method Area์ static ๋ฐ์ดํฐ
- JNI์ ์ํด ์์ฑ๋ ๊ฐ์ฒด๋ค

1. Serial GC
Young ์์ญ๊ณผ Old ์์ญ์ด ์๋ฆฌ์ผํ๊ฒ(์ฐ์์ ์ผ๋ก) ์ฒ๋ฆฌ๋๋ฉฐ ํ๋์ CPU๋ฅผ ์ฌ์ฉํ๋ค.
์ด ์ฒ๋ฆฌ๋ฅผ ์ํํ ๋๋ฅผ Stop-the-world๋ผ๊ณ ํํํ๋ค. ๋ค์ ๋งํ๋ฉด, ์ฝ๋ ์ ์ด ์ํ๋ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ํ์ด ์ ์ง๋๋ค.
- ๊ฐ์ฅ ๋จ์ํ ๋ฐฉ์์ GC๋ก ์ฑ๊ธ ์ค๋ ๋(์ค๋ ๋ 1๊ฐ)๋ก ๋์ํ๋ค.
- ์ฑ๊ธ ์ค๋ ๋๋ก ๋์ํ์ฌ ๋๋ฆฌ๊ณ , ๊ทธ๋งํผ Stop The World ์๊ฐ์ด ๋ค๋ฅธ GC์ ๋นํด ๊ธธ๋ค.
- Mark & Sweep & Compact ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉ
- ๋ณดํต ์ค๋ฌด์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์์ (๋๋ฐ์ด์ค ์ฑ๋ฅ์ด ์์ข์์ CPU ์ฝ์ด๊ฐ 1๊ฐ์ธ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉ)


- ์ผ๋จ ์ด์์๋ ๊ฐ์ฒด๋ค์ Eden ์์ญ์ ์๋ค.
- Eden ์์ญ์ด ๊ฝ์ฐจ๊ฒ ๋๋ฉด To Survivor ์์ญ(๋น์ด์๋ ์์ญ)์ผ๋ก ์ด์ ์๋ ๊ฐ์ฒด๊ฐ ์ด๋ํ๋ค. ์ด๋ Survivor ์์ญ์ ๋ค์ด๊ฐ๊ธฐ์ ๋๋ฌด ํฐ ๊ฐ์ฒด๋ ๋ฐ๋ก Old ์์ญ์ผ๋ก ์ด๋ํ๋ค. ๊ทธ๋ฆฌ๊ณ From Survivor ์์ญ์ ์๋ ์ด์ ์๋ ๊ฐ์ฒด๋ To Survivor ์์ญ์ผ๋ก ์ด๋ํ๋ค.
- To Survivor ์์ญ์ด ๊ฝ ์ฐผ์ ๊ฒฝ์ฐ, Eden ์์ญ์ด๋ From Survivor ์์ญ์ ๋จ์ ์๋ ๊ฐ์ฒด๋ค์ Old ์์ญ์ผ๋ก ์ด๋ํฉ๋๋ค.
์ด ์ดํ์ Old ์์ญ์ด๋ Perm ์์ญ์ ์๋ ๊ฐ์ฒด๋ค์ Mark-sweep-compact ์ฝ๋ ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ฅธ๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ํด์ ๊ฐ๋จํ๊ฒ ๋งํ๋ฉด, ์ ์ฐ๋ ๊ฑฐ ํ์ํด์ ์ญ์ ํ๊ณ ํ ๊ณณ์ผ๋ก ๋ชจ์ผ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
Mark-sweep-compact ์๊ณ ๋ฆฌ์ฆ
1) Old ์์ญ์ผ๋ก ์ด๋๋ ๊ฐ์ฒด๋ค ์ค ์ด์ ์๋ ๊ฐ์ฒด๋ฅผ ์๋ณํ๋ค. (Mark)
2) Old ์์ญ์ ๊ฐ์ฒด๋ค์ ํ๋ ์์ ์ ์ํํ์ฌ ์ฐ๋ ๊ธฐ ๊ฐ์ฒด๋ฅผ ์๋ณํ๋ค. (Sweep)
3) ํ์ ์๋ ๊ฐ์ฒด๋ค์ ์ง์ฐ๊ณ ์ด์ ์๋ ๊ฐ์ฒด๋ค์ ํ ๊ณณ์ผ๋ก ๋ชจ์๋ค. (Compact)
์ด๋ ๊ฒ ์๋ํ๋ ์๋ฆฌ์ผ ์ฝ๋ ํฐ๋ ์ผ๋ฐ์ ์ผ๋ก ํด๋ผ์ด์ธํธ ์ข ๋ฅ์ ์ฅ๋น์์ ๋ง์ด ์ฌ์ฉ๋๋ค. ๋ค์ ๋งํ๋ฉด, ๋๊ธฐ ์๊ฐ์ด ๋ง์๋ ํฌ๊ฒ ๋ฌธ์ ๋์ง ์๋ ์์คํ ์์ ์ฌ์ฉ๋๋ค.
๋ช ์์ ์ง์ ๋ฐฉ๋ฒ
-XX:+UseSerialGC
2. Parallel GC
์ด ๋ฐฉ์์ throughput collector๋ก๋ ์๋ ค์ง ๋ฐฉ์์ด๋ค. ์ด ๋ฐฉ์์ ๋ชฉํ๋ ๋ค๋ฅธ CPU๊ฐ ๋๊ธฐ ์ํ๋ก ๋จ์ ์๋ ๊ฒ์ ์ต์ํํ๋ ๊ฒ์ด๋ค.
์๋ฆฌ์ผ ์ฝ๋ ํฐ์ ๋ฌ๋ฆฌ Young ์์ญ์์์ ์ฝ๋ ์ ์ ๋ณ๋ ฌ(Parallel)๋ก ์ฒ๋ฆฌํ๋ค. ๋ง์ CPU ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ GC์ ๋ถํ๋ฅผ ์ค์ด๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ๋ฆฌ๋์ ์ฆ๊ฐ์ํฌ ์ ์๋ค.
- Java 8์ default GC
- Young ์์ญ์ GC๋ฅผ ๋ฉํฐ ์ค๋ ๋ ๋ฐฉ์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, Serial GC์ ๋นํด ์๋์ ์ผ๋ก Stop The World ๊ฐ ์งง๋ค
- Old ์์ญ์ ์๋
- Old ์์ญ์ GC๋ ์๋ฆฌ์ผ ์ฝ๋ ํฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก Mark-Sweep-Compact ์ฝ๋ ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.

๋ช ์์ ์ง์ ๋ฐฉ๋ฒ
-XX:+UseParallelGC
3. Parallel Compacting GC
๋ณ๋ ฌ ์ฝ๋ ํฐ์ ๋ค๋ฅธ ์ ์ Old ์์ญ GC์์ ์๋ก์ด ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.
- Parallel GC๋ Young ์์ญ์ ๋ํด์๋ง ๋ฉํฐ ์ค๋ ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค๋ฉด, Parallel Old GC๋ Old์์ญ๊น์ง ๋ฉํฐ์ค๋ ๋ ๋ฐฉ์์ ์ฌ์ฉ
๊ทธ๋ฌ๋ฏ๋ก Young ์์ญ์ ๋ํ GC๋ ๋ณ๋ ฌ ์ฝ๋ ํฐ์ ๋์ผํ์ง๋ง, Old ์์ญ์ GC๋ ๋ค์์ 3๋จ๊ณ๋ฅผ ๊ฑฐ์น๊ฒ ๋๋ค.
- Mark ๋จ๊ณ : ์ด์ ์๋ ๊ฐ์ฒด๋ฅผ ์๋ณํ์ฌ ํ์ํด ๋๋ ๋จ๊ณ
- Sweep ๋จ๊ณ : ์ด์ ์ GC๋ฅผ ์ํํ์ฌ ์ปดํฉ์ ๋ ์์ญ์ ์ด์ ์๋ ๊ฐ์ฒด์ ์์น๋ฅผ ์กฐ์ฌํ๋ ๋จ๊ณ
- Compact ๋จ๊ณ : ์ปดํฉ์ ์ ์ํํ๋ ๋จ๊ณ. ์ํ ์ดํ์๋ ์ปดํฉ์ ๋ ์์ญ๊ณผ ๋น์ด ์๋ ์์ญ์ผ๋ก ๋๋ฉ๋๋ค.
๋ณ๋ ฌ ์ฝ๋ ํฐ์ ๋์ผํ๊ฒ ์ด ๋ฐฉ์๋ ์ฌ๋ฌ CPU๋ฅผ ์ฌ์ฉํ๋ ์๋ฒ์ ์ ํฉํ๋ค. GC๋ฅผ ์ฌ์ฉํ๋ ์ค๋ ๋ ๊ฐ์๋ -XX:+ParallelGCThreads=n ์ต์ ์ผ๋ก ์ง์ ํ ์ ์๋ค.
๋ช ์์ ์ง์ ๋ฐฉ๋ฒ
-XX:+UseParallelOldGC
-XX:+ParallelGCThreads=n
4. Concurrent Mark-Sweep GC
Stop The World๋ก Java Application์ด ๋ฉ์ถ๋ ํ์์ ์ค์ด๊ณ ์ ๋ง๋ GC
Reacable ํ ๊ฐ์ฒด๋ฅผ ํ๋ฒ์ ์ฐพ์ง ์๊ณ ๋๋ ์ ์ฐพ๋ ๋ฐฉ์์ ์ฌ์ฉ (4 STEP)
์ด ๋ฐฉ์์ low-latency collector๋ก๋ ์๋ ค์ ธ ์์ผ๋ฉฐ, ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํฌ๊ธฐ๊ฐ ํด ๋ ์ ํฉํ๋ค. Young ์์ญ์ ๋ํ GC๋ ๋ณ๋ ฌ ์ฝ๋ ํฐ์ ๋์ผํฉ๋๋ค. Old ์์ญ์ GC๋ ๋ค์ 4๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ค.

- Initial Mark : GC Root๊ฐ ์ฐธ์กฐํ๋ ๊ฐ์ฒด๋ง ๋งํน (stop-the-world ๋ฐ์)
- ์ด์ ์๋ ๊ฐ์ฒด๋ฅผ ์ฐพ๋ ๋จ๊ณ
- Concurrent Mark : ์ฐธ์กฐํ๋ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉฐ, ์ง์์ ์ผ๋ก ๋งํน. (stop-the-world ์์ด ์ด๋ฃจ์ด์ง)
- ์๋ฒ ์ํ๊ณผ ๋์์ ์ด์ ์๋ ๊ฐ์ฒด์ ํ์๋ฅผ ํด๋๋ ๋จ๊ณ
- Remark : concurrent mark ๊ณผ์ ์์ ๋ณ๊ฒฝ๋ ์ฌํญ์ด ์๋์ง ๋ค์ ํ๋ฒ ๋งํนํ๋ฉฐ ํ์ ํ๋ ๊ณผ์ . (stop-the-world ๋ฐ์)
- Concurrent Sweep : ์ ๊ทผํ ์ ์๋ ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํ๋ ๊ณผ์ (stop-the-world ์์ด ์ด๋ฃจ์ด์ง)
์์ ๊ฐ์ด stop-the-world๊ฐ ์ต๋ํ ๋ ๋ฐ์ํ๋๋ก ํ์ฌ, Java Application์ด ๋ฉ์ถ๋ ํ์์ ์ค์ธ๋ค.
CMS๋ ์ปดํฉ์ ๋จ๊ณ๋ฅผ ๊ฑฐ์น์ง ์๊ธฐ ๋๋ฌธ์ ์ผ์ชฝ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ชฐ์ ๋๋ ์์ ์ ์ํํ์ง ์๋๋ค. ๊ทธ๋์ GC ์ดํ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋น ๊ณต๊ฐ์ด ๋ฐ์ํ๋ฏ๋ก, -XX:+CMSInitiatingOccupancyFraction=n ์ต์ ์ ์ฌ์ฉํ์ฌ Old ์์ญ์ %๋ฅผ n ๊ฐ์ ์ง์ ํฉ๋๋ค. (๊ธฐ๋ณธ๊ฐ : 68)
CMS ์ฝ๋ ํฐ๋ ์ถ๊ฐ์ ์ธ ์ต์
์ผ๋ก ์ ์ง์ ๋ฐฉ์์ ์ง์ํ๋ค. ์ด ๋ฐฉ์์ Young ์์ญ์ GC๋ฅผ ๋ ์๊ฒ ์ชผ๊ฐ์ด ์๋ฒ์ ๋๊ธฐ ์๊ฐ์ ์ค์ผ ์ ์๋ค. CPU๊ฐ ๋ง์ง ์๊ณ ์์คํ
์ ๋๊ธฐ ์๊ฐ์ด ์งง์์ผ ํ ๋ ์ฌ์ฉํ๋ฉด ์ข๋ค.
์ ์ง์ ์ GC๋ฅผ ์ํํ๋ ค๋ฉด -XX:+CMSIncrementalMode ์ต์
์ ์ง์ ํ๋ฉด ๋๋ค. JVM์ ๋ฐ๋ผ์๋ -Xingc๋ผ๋ ์ต์
์ ์ง์ ํด๋ ๊ฐ์ ์๋ฏธ๊ฐ ๋๋ค. ํ์ง๋ง ์ด ์ต์
์ ์ง์ ํ ๊ฒฝ์ฐ ์๊ธฐ์น ๋ชปํ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก, ์ถฉ๋ถํ ํ
์คํธ๋ฅผ ํ ํ์ ์ด์ ์๋ฒ์ ์ ์ฉํด์ผ ํ๋ค.
CMS GC๋ 2๊ฐ ์ด์์ ํ๋ก์ธ์๋ฅผ ์ฌ์ฉํ๋ ์๋ฒ์ ์ ๋นํ๋ค. ๊ฐ์ฅ ์ ๋นํ ๋์์ผ๋ก๋ ์น ์๋ฒ๊ฐ ์๋ค.
๋ช ์์ ์ง์ ๋ฐฉ๋ฒ
-XX:+UseConcMarkSweepGC
-XX:+CMSInitiatingOccupancyFraction=n
-XX:+CMSIncrementalMode
CMS GC๋ Java9 ๋ฒ์ ผ๋ถํฐ deprecated ๋์๊ณ ๊ฒฐ๊ตญ Java14์์๋ ์ฌ์ฉ์ด ์ค์ง๋์๋ค.
5. G1 GC
- Java 9 ๋ถํฐ default GC
- ํ์ฌ GC ์ค stop-the-world์ ์๊ฐ์ด ์ ์ผ ์งง์
- ์ด๋ ํ GC ๋ฐฉ์๋ณด๋ค ์ฒ๋ฆฌ ์๋๊ฐ ๋น ๋ฅด๋ฉฐ ํฐ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์์ ๋ฉํฐ ํ๋ก๋ ์ค ๊ธฐ๋ฐ์ผ๋ก ์ด์๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํด ๊ณ ์๋์๋ค. ๋ํ G1 GC๋ ๋ค๋ฅธ GC ๋ฐฉ์์ ์ฒ๋ฆฌ์๋๋ฅผ ๋ฅ๊ฐํ๋ค.
- CMS GC ๋ฅผ ๊ฐ์ ํ์ฌ ๋ง๋ GC๋ก ์์์ ์ดํด๋ณธ GC์๋ ๋ค๋ฅธ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค.


- Heap์ Region์ด๋ผ๋ ์ผ์ ํ ๋ถ๋ถ์ผ๋ก ๋๋ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ค.
- ๊ธฐ์กด GC์ฒ๋ผ ๋ฌผ๋ฆฌ์ ์ธ ์์ญ์ผ๋ก ๋๋์ง ์๊ณ , Region(์ง์ญ)์ด๋ผ๋ ๊ฐ๋ ์ ์๋ก ๋์ ํ์ฌ Heap์ ๊ท ๋ฑํ๊ฒ ์ฌ๋ฌ ๊ฐ์ ์ง์ญ์ผ๋ก ๋๋๊ณ , ๊ฐ ์ง์ญ์ ์ญํ ๊ณผ ํจ๊ป ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ตฌ๋ถํ์ฌ(Eden ์ง์ญ์ธ์ง, Survivor ์ง์ญ์ธ์ง, Old ์ง์ญ์ธ์ง) ๊ฐ์ฒด๋ฅผ ํ ๋นํ๋ค.
- G1 GC์์๋ Eden, Survivor, Old ์ญํ ์ ๋ํด Humongous์ Availalbe/Unused๋ผ๋ 2๊ฐ์ง ์ญํ ์ ์ถ๊ฐํ์๋ค. Humongous๋ Region ํฌ๊ธฐ์ 50%๋ฅผ ์ด๊ณผํ๋ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ Region์ ์๋ฏธํ๋ฉฐ, Availabe/Unused๋ ์ฌ์ฉ๋์ง ์์ Region์ ์๋ฏธํ๋ค.
- G1 GC์ ํต์ฌ์ ์ ์ฒด Heap์ ๋ํด์ ํ์ํ์ง ์๊ณ ๋ถ๋ถ์ ์ผ๋ก Region ๋จ์๋ก ํ์ํ์ฌ, ๊ฐ๋น์ง๊ฐ ๋ง์ Region์๋ง ์ฐ์ ์ ์ผ๋ก GC๋ฅผ ์ํํ๋ ๊ฒ์ด๋ค.
- G1 GC๋ ๋ค๋ฅธ ๊ฐ๋น์ง ์ปฌ๋ ์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก 2๊ฐ์ง GC(Minor GC, Major GC)๋ก ๋๋์ด ์ํ๋๋ค.
1. Minor GC
ํ ์ง์ญ์ ๊ฐ์ฒด๋ฅผ ํ ๋นํ๋ค๊ฐ ํด๋น ์ง์ญ์ด ๊ฝ ์ฐจ๋ฉด ๋ค๋ฅธ ์ง์ญ์ ๊ฐ์ฒด๋ฅผ ํ ๋นํ๊ณ , Minor GC๊ฐ ์คํ๋๋ค. G1 GC๋ ๊ฐ ์ง์ญ์ ์ถ์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์, ๊ฐ๋น์ง๊ฐ ๊ฐ์ฅ ๋ง์(Garbage First) ์ง์ญ์ ์ฐพ์์ Mark and Sweep๋ฅผ ์ํํ๋ค.
Eden ์ง์ญ์์ GC๊ฐ ์ํ๋๋ฉด ์ด์๋จ์ ๊ฐ์ฒด๋ฅผ ์๋ณ(Mark)ํ๊ณ , ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์(Sweep)ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์๋จ์ ๊ฐ์ฒด๋ฅผ ๋ค๋ฅธ ์ง์ญ์ผ๋ก ์ด๋์ํค๊ฒ ๋๋ค. ๋ณต์ ๋๋ ์ง์ญ์ด Available/Unused ์ง์ญ์ด๋ฉด ํด๋น ์ง์ญ์ ์ด์ Survivor ์์ญ์ด ๋๊ณ , Eden ์์ญ์ Available/Unused ์ง์ญ์ด ๋๋ค.
2. Major GC(Full GC)
์์คํ ์ด ๊ณ์ ์ด์๋๋ค๊ฐ ๊ฐ์ฒด๊ฐ ๋๋ฌด ๋ง์ ๋น ๋ฅด๊ฒ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ ํ ์ ์์ ๋ Major GC(Full GC)๊ฐ ์คํ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ G1 GC์ ๋ค๋ฅธ GC์ ์ฐจ์ด์ ์ด ๋๊ฐ์ ๋ณด์ธ๋ค.
๊ธฐ์กด์ ๋ค๋ฅธ GC ์๊ณ ๋ฆฌ์ฆ์ ๋ชจ๋ Heap์ ์์ญ์์ GC๊ฐ ์ํ๋์์ผ๋ฉฐ, ๊ทธ์ ๋ฐ๋ผ ์ฒ๋ฆฌ ์๊ฐ์ด ์๋นํ ์ค๋ ๊ฑธ๋ ธ๋ค. ํ์ง๋ง G1 GC๋ ์ด๋ ์์ญ์ ๊ฐ๋น์ง๊ฐ ๋ง์์ง๋ฅผ ์๊ณ ์๊ธฐ ๋๋ฌธ์ GC๋ฅผ ์ํํ ์ง์ญ์ ์กฐํฉํ์ฌ ํด๋น ์ง์ญ์ ๋ํด์๋ง GC๋ฅผ ์ํํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ์์ ์ Concurrentํ๊ฒ ์ํ๋๊ธฐ ๋๋ฌธ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์ฐ๋ ์ต์ํํ ์ ์๋ ๊ฒ์ด๋ค.
๋ฌผ๋ก G1 GC๋ ๋ค๋ฅธ GC ๋ฐฉ์์ ๋นํด ์ฆ๊ฒ ํธ์ถ๋ ๊ฒ์ด๋ค. ํ์ง๋ง ์์ ๊ท๋ชจ์ ๋ฉ๋ชจ๋ฆฌ ์ ๋ฆฌ ์์
์ด๊ณ Concurrentํ๊ฒ ์ํ๋๊ธฐ ๋๋ฌธ์ด ์ง์ฐ์ด ํฌ์ง ์์ผ๋ฉฐ, ๊ฐ๋น์ง๊ฐ ๋ง์ ์ง์ญ์ ๋ํด ์ ๋ฆฌ๋ฅผ ํ๋ฏ๋ก ํจ์ฌ ํจ์จ์ ์ด๋ค.
๋ช ์์ ์ง์ ๋ฐฉ๋ฒ
-XX:+UseG1GC
GC ๋ฐฉ์ ๋น๊ต
๋ค ์ข ๋ฅ GC ๋ฐฉ์์ ๋ํ ์ฑ๋ฅ ๋ฐ ๊ธฐ๋ฅ ๋น๊ต ํ


์์ ๋ด์ฉ์ ์ข ํฉํ๋ฉด, GC ์ํ ์์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๊ฐ ์์ญ์ ํ ๋น๋ ํฌ๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ฉ์น๋ฅผ ๋์ ๋
- ๊ฐ๋ฐ์๊ฐ ์ปจํธ๋กคํ ์์ญ์ ์๋
๊ฐ๋ฐ์๋ผ๋ฉด, ์๋ฐ์ GC ๋ฐฉ์์ ์ธ์ฐ๋ฉด์ ๊ฐ๋ฐํ๊ฑฐ๋ ์๋ฒ๋ฅผ ์ธํ ํ ํ์๋ ์๋ค. ์ดํด๋ง ํ๊ณ ์์ผ๋ฉด ๋๋ค. ๋จ, ํ์ํ ๋(์์คํ ์คํ ์ ์ฑ๋ฅ ํ ์คํธ / ์๋ฒ ์ธํ ์), ์๋ง์ GC ๋ฐฉ์์ ๊ฐ๋ฐํ ์์คํ ์ ์ ์ฉํ๋ฉด ๋๋ค๊ณ ํ๋ค.
์ฐธ๊ณ
'๐ > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ์ถ์ ํด๋์ค vs ์ธํฐํ์ด์ค (0) | 2021.08.18 |
---|---|
[Java] Java SE, Java EE, Java ME (0) | 2021.08.18 |
[Java] ๋ณ์์ scope์ static (0) | 2021.08.11 |
[Java] ๊ฐ๋น์ง ์ปฌ๋ ์ (Garbage Collection) (0) | 2021.08.11 |
[Java] ๋๋ค์ (0) | 2021.08.10 |
๋๊ธ