ํ๋ก๊ทธ๋๋จธ๋ ํ์ ์ฌ์ฉํ ์ ์๋ ๋งํผ ์์ ๋กญ๊ฒ ์ฌ์ฉํ๊ณ , ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ์ค๋ธ์ ํธ๋ค์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ด๋นํ๋ ํ๋ก์ธ์ค๊ฐ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐํ๋๋ก ํ๋ ๊ฒ์ด ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๊ธฐ๋ณธ ๊ฐ๋
Garbage collection was invented by John McCarthy around 1959 to simplify manual memory management in Lisp. - (Wiki) Garbage collection (computer science)
GC๋ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ ์ค์ํ๋ค.
Heap ์์ญ์ ์ค๋ธ์ ํธ ์ค stack ์์ ๋๋ฌ ๋ถ๊ฐ๋ฅํ (Unreachable) ์ค๋ธ์ ํธ๋ค์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋์์ด ๋๋ค.
JVM ์ Garbage Collector ๋ Unreachable Object ๋ฅผ ์ฐ์ ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ๋ณดํ๋ค. Unreachable Object ๋ Stack ์์ ๋๋ฌํ ์ ์๋ Heap ์์ญ์ ๊ฐ์ฒด๋ฅผ ๋งํ๋๋ฐ Garbage Collection ์ด ์ผ์ด๋๋ฉด Unreachable ์ค๋ธ์ ํธ๋ค์ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐ๋๋ค.
System.gc() System.gc() ๋ฅผ ํธ์ถํ์ฌ ๋ช ์์ ์ผ๋ก ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ์ผ์ด๋๋๋ก ์ฝ๋๋ฅผ ์ฝ์ ํ ์ ์์ง๋ง, ๋ชจ๋ ์ค๋ ๋๊ฐ ์ค๋จ๋๊ธฐ ๋๋ฌธ์ ์ฝ๋๋จ์์ ํธ์ถํ๋ฉด ์ํํ๋ค.
// JAVA 7
<----- Java Heap -----> <--- Native Memory --->
+------+----+----+-----+-----------+--------+--------------+
| Eden | S0 | S1 | Old | Permanent | C Heap | Thread Stack |
+------+----+----+-----+-----------+--------+--------------+
<--------->
Permanent Heap
// JAVA 8
<----- Java Heap -----> <--------- Native Memory --------->
+------+----+----+-----+-----------+--------+--------------+
| Eden | S0 | S1 | Old | Metaspace | C Heap | Thread Stack |
+------+----+----+-----+-----------+--------+--------------+
// S0: Survivor 0
// S1: Survivor 1
Metaspace ๋ Heap ๊ณผ๋ ์๊ด์๋ ๋ค์ดํฐ๋ธ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ค. ์๋ฐ 7๊น์ง๋ Permanent Generation ์์ญ์ผ๋ก ์กด์ฌํ์์ผ๋ Java 8์ดํ๋ก Metaspace๋ก ๋์ฒด๋์๋ค.
์๋ฐ 7๊ณผ ์๋ฐ 8์ ์ฐจ์ด์
- Permanent Generation์ ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ค์ ํ๋๋ก ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ ๋ ํด๋์ค์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์์ญ์ด๋ค.(Java 7๊ธฐ์ค)
- ์๋์ ๊ฐ์ ๊ฒ๋ค์ด Java Heap ์ด๋ native heap ์์ญ์ผ๋ก ์ด๋ํ๋ค.
- Symbols -> native heap
- Interned String -> Java Heap
- Class statics -> Java Heap
- OutOfMemoryError: PermGen Space error ๋ ๋์ด์ ๋ณผ ์ ์๊ณ JVM ์ต์ ์ผ๋ก ์ฌ์ฉํ๋ PermSize ์ MaxPermSize๋ ๋์ด์ ์ฌ์ฉํ ํ์๊ฐ ์๋ค. ์ด ๋์ ์ MetaspaceSize ๋ฐ MaxMetaspaceSize๊ฐ ์๋กญ๊ฒ ์ฌ์ฉ๋๊ฒ ๋์๋ค.
๊ธฐ์กด์ Perm์ JVM์ ์ํด ํฌ๊ธฐ๊ฐ ๊ฐ์ ๋๋ ์์ญ์ด๋ค. Java 8 ์ดํ Metaspace๋ Native memory ์์ญ์ผ๋ก, OS๊ฐ ์๋์ผ๋ก ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฌ์ฉํ ์ ์๊ฒ ๋์์ผ๋ฉฐ ๊ทธ ์ด์ ๋ก OutOfMemoryError๋ฅผ ๋ณด๊ธฐ ํ๋ค์ด์ก๋ค.
์คํ์ ์ต์ ์ผ๋ก Metaspace์ ํฌ๊ธฐ๋ฅผ ์ค์ผ ์๋ ์๋ค.
์๋ฐ์ ํ ๋ฉ๋ชจ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ด Metaspace, Old, Eden, S0, S1 ์ด ๋ค์ฏ๊ฐ ์์ญ์ผ๋ก ๋๋์ด์ง๋ค.
- ์๋ก ์์ฑ๋ ์ค๋ธ์ ํธ๋
Eden์์ญ์ ํ ๋น๋๋ค. Survivor Space ์์ญ์ ๋น์์ง ์ฑ๋ก ์์๋๋ค. Eden์์ญ์ด ๊ฐ๋ ์ฐจ๋ฉด, Minor GC ๊ฐ ๋ฐ์ํ๋ค.Eden์ Reachable ์ค๋ธ์ ํธ๋ค์S0์ผ๋ก ์ฎ๊ฒจ์ง๋ค.Eden์ Unreachable ์ค๋ธ์ ํธ๋ค์Eden์์ญ์ด ํด๋ฆฌ์ด ๋ ๋ ๋ฉ๋ชจ๋ฆฌ์์ ๊ฐ์ด ํด์ ๋๋ค.
Eden์์ญ์ด ๊ฐ๋ ์ฐจ์ ๋๋ฒ์งธ Minor GC ๊ฐ ๋ฐ์ํ๋ค.Eden์ Reachable ์ค๋ธ์ ํธ๋ค์S1์ผ๋ก ์ฎ๊ฒจ์ง๋ค.Eden์ Unreachable ์ค๋ธ์ ํธ๋ค์Eden์์ญ์ด ํด๋ฆฌ์ด ๋ ๋ ๋ฉ๋ชจ๋ฆฌ์์ ๊ฐ์ด ํด์ ๋๋ค.S0์ Reachable ์ค๋ธ์ ํธ๋ค์S1์ผ๋ก ์ฎ๊ฒจ์ง๋ค. ์ด๋ age ๊ฐ์ด ์ฆ๊ฐ๋์ด ์ด๋๋๋ค.S0์ Unreachable ์ค๋ธ์ ํธ๋ค์S0์์ญ์ด ํด๋ฆฌ์ด ๋ ๋ ๋ฉ๋ชจ๋ฆฌ์์ ๊ฐ์ด ํด์ ๋๋ค.
- Minor GC๊ฐ ๋ฐ์ํจ์ ๋ฐ๋ผ ์์ ๊ฐ์ ์ํฉ์ด ๋ฐ๋ณต๋๋ฉด์ age๊ฐ์ ์ฆ๊ฐ์ํจ๋ค.
- Survivor Space ์์ Survivor Space ๋ก์ ์ด๋์ ์ด๋ํ ๋๋ง๋ค age ๊ฐ์ด ์ฆ๊ฐํ๋ค
Young Generation์์ ๊ณ์ ์ด์๋จ์ age๊ฐ์ด ํน์ ๊ฐ ์ด์์ด ๋๋ฉดOld Generation์ผ๋ก ์ฎ๊ฒจ์ง๋ค.- ์ด ๋จ๊ณ๋ฅผ Promotion ์ด๋ผ๊ณ ํ๋ค.
- Promotion ์์
์ด ๊ณ์ํด์ ๋ฐ๋ณต๋๋ฉด์
Old Generation์ด ๊ฐ๋์ฐจ๊ฒ ๋๋ฉด MajorGC ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค - GC๊ฐ ๋ฐ์๋ ๋ Thread๋ฅผ ์ ์ ๋ฉ์ถ๊ฒ ๋๊ณ Mark and Sweep ์์ ์ ์งํํ๋ค. (Stop the World)
GC ์ข ๋ฅ MinorGC : Young Generation ์์ ๋ฐ์ํ๋ GC. Major GC์ ๋นํด ์๋๊ฐ ๋น ๋ฅด๋ค. MajorGC : Old Generation (Tenured Space) ์์ ๋ฐ์ํ๋ GC. Minor GC์ ๋นํด ์๋๊ฐ ๋๋ฆฌ๋ค. FullGC : Heap ์ ์ฒด๋ฅผ clear ํ๋ ์์ (Young/Old ๊ณต๊ฐ ๋ชจ๋)
Garbage Collection ๊ณผ์ ์ Mark and Sweep ์ด๋ผ๊ณ ๋ ํ๋ค.
๊ฐ๋น์ง ์ปฌ๋ ํฐ์๋ GC Root๋ผ๋ ๊ฒ์ด ์๋ค. GC Root๋ค์ ํ ์ธ๋ถ์์ ์ ๊ทผํ ์ ์๋ ๋ณ์๋ ์ค๋ธ์ ํธ๋ฅผ ๋ปํ๋ค. GC Root๋ ๋ง๊ทธ๋๋ก ๊ฐ๋น์ง ์ปฌ๋ ์ ์ Root๋ผ๋ ๋ป์ด๋ค. GC Root์์ ์์ํด ์ด Root๊ฐ ์ฐธ์กฐํ๋ ๋ชจ๋ ์ค๋ธ์ ํธ, ๋ ๊ทธ ์ค๋ธ์ ํธ๋ค์ด ์ฐธ์กฐํ๋ ๋ค๋ฅธ ์ค๋ธ์ ํธ๋ค์ ํ์ํด ๋ด๋ ค๊ฐ๋ฉฐ ๋งํฌ(Mark)ํ๋ค. ์ด๊ฒ ๋ฐ๋ก ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ฒซ๋ฒ์งธ ๋จ๊ณ์ธ Mark๋จ๊ณ์ด๋ค.
์ฒซ๋ฒ์งธ ๋จ๊ณ์ธ marking ์์
์ ์ํด ๋ชจ๋ ์ค๋ ๋๋ ์ค๋จ๋๋๋ฐ ์ด๋ฅผ stop the world ๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค.
GC Root๊ฐ ๋ ์ ์๋ ๊ฒ๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์คํ์ค์ธ ์ฐ๋ ๋ (Active Thread)
- ์ ์ ๋ณ์ (Static Variable)
- ๋ก์ปฌ ๋ณ์ (Local Variable)
- JNI ๋ ํผ๋ฐ์ค (JNI Reference)
mark ๋์ด์์ง ์์ ๋ชจ๋ ์ค๋ธ์ ํธ๋ค์ ํ์์ ์ ๊ฑฐํ๋ ๊ณผ์ ์ด Sweep ์ด๋ค.
Garbage Collection ์ด๋ผ๊ณ ํ๋ฉด garbage ๋ค์ ์์งํ ๊ฒ ๊ฐ์ง๋ง ์ค์ ๋ก๋ garbage ๋ฅผ ์์งํ์ฌ ์ ๊ฑฐํ๋ ๊ฒ์ด ์๋๋ผ, garbage ๊ฐ ์๋ ๊ฒ์ ๋ฐ๋ก mark ํ๊ณ ๊ทธ ์ธ์ ๊ฒ์ ๋ชจ๋ ์ง์ฐ๋ ๊ฒ์ด๋ค. ๋ง์ฝ ํ์ garbage ๋ง ๊ฐ๋ํ๋ค๋ฉด ์ ๊ฑฐ ๊ณผ์ ์ ์ฆ๊ฐ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
Unreachable Object๋ค์ด ๋ชจ๋ ์ฆ๊ฐ์ ์ผ๋ก ํด์ ๋ ์๋ ์๊ณ ๋ค๋ฅธ๊ณณ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฎ๊ฒจ์ง ์๋ ์๋ค.
Collector ์๊ณ ๋ฆฌ์ฆ
| Garbage Collector | Option | YG ์๊ณ ๋ฆฌ์ฆ | OG ์๊ณ ๋ฆฌ์ฆ |
|---|---|---|---|
| Serial Collector | -XX:+UseSerialGC | Serial | Serial Mark-Sweep-Compact |
| Parallel Collector | -XX:+UseParallelGC | Parallel Scavenge | Serial Mark-Sweep-Compact |
| Parallel Compacting Collector | -XX:+UseParallelOldGC | Parallel Scavenge | Parallel Mark-Sweep-Compact |
| CMS Collector | -XX:+UseConcMarkSweepGC | Parallel | Concurrent Mark-Sweep |
| G1 Collector | -XX:+UseG1GC | Young GC(Evacuation Pause) Concurrent Mark - Marking Current Mark - Remarking |
Old Region Reclaim - Remarking Old Region Reclaim - Evacuation Pause Compaction Phase |
Serial GC ๋ Java SE 5, 6 ์์ ์ฌ์ฉ๋๋ ๋ํดํธ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ด๋ค.
-XX:+UseSerialGC
MinorGC, MajorGC ๋ชจ๋ ์์ฐจ์ ์ผ๋ก ์ํ๋๋ค. Mark-Compact collection method ๋ฅผ ์ฌ์ฉ
Mark-Compact collection method ๋ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋น ๋ฅด๊ฒ ํ๊ธฐ ์ํด์ ๊ธฐ์กด์ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ์ค๋ธ์ ํธ๋ค์ ํ์ ์์์์น๋ก ์ฎ๊ฒจ ๋๋ ๋ฐฉ๋ฒ ์ฐฝ๊ณ ์์ ํ์์๋ ๋ฌผ๊ฑด๋ค์ ๋ฒ๋ฆฐ ํ, ์ฐฝ๊ณ ์ ๋ฌผ๊ฑด์ ์ฐจ๊ณก์ฐจ๊ณก ์๊ธฐ์ํด ์ฐฝ๊ณ ์์ ์ ๋ฆฌํ๋ ๊ฒ์ด๋ผ ์๊ฐํ ์ ์๋ค.
Parallel ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ young generation ์ ๋ํ ๊ฐ๋น์ง ์ปฌ๋ ์
์ํ์ ๋ฉํฐ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ค.
๋ฉํฐ์ค๋ ๋ฉ์ ํ ์ ์๋ ParallelGC ๋ฅผ ์ฌ์ฉํ๋๋ก ์ต์
์ ์ฃผ์๋๋ผ๋, ํธ์คํธ ๋จธ์ ์ด ์ฑ๊ธ CPU ๋ผ๋ฉด ๋ํดํธ ๊ฐ๋น์ง ์ปฌ๋ ํฐ(Serial GC)๊ฐ ์ฌ์ฉ๋๋ค.
ํ์ง๋ง, ํธ์คํธ์ CPU ๊ฐ ๋๊ฐ ์ด์์ด๋ผ๋ฉด young generation ์ ๊ฐ๋น์ง ์ปฌ๋ ์
์๊ฐ์ ์ค์ผ ์ ์๋ค.
๊ฐ๋น์ง ์ปฌ๋ ํฐ ์ค๋ ๋ ๊ฐ์๋ ๋ํดํธ๋ก CPU ๊ฐ์๋งํผ์ด ํ ๋น๋๋๋ฐ -XX:ParallelGCThread=<N> ์ต์
์ผ๋ก ์กฐ์ ๊ฐ๋ฅํ๋ค. ๋ํ, -XX:+UseParallelOldGC ์ต์
์ ์ฌ์ฉํ๋ค๋ฉด, old generation ์ ๊ฐ๋น์ง ์ปฌ๋ ์
์์๋ ๋ฉํฐ์ค๋ ๋ฉ์ ํ์ฉํ ์ ์๋ค.
-XX:+UseParallelGC # ParallelGC ์ฌ์ฉ
-XX:ParallelGCThread=<N> # ๊ฐ๋น์ง ์ปฌ๋ ํฐ ์ค๋ ๋ ๊ฐฏ์ (default : Cpu ๊ฐฏ์)
-XX:+UseParallelOldGC # old generation์๋ ๋ฉํฐ์ค๋ ๋ฉ ์ฌ์ฉ
Old Generation์ผ๋ก Promotion ์์
์ ๋ ๊ฐ์ ์ค๋ ๋๊ฐ ๋์์ ์ํํ์ฌ ์ถฉ๋์ด ๋๋ ์ํฉ์ด ๋ฐ์์ ํด๊ฒฐํ๊ธฐ ์ํด Minor GC๋ฅผ ์ํํ๋ ์ค๋ ๋๋ง๋ค Old Generation์ ์ผ์ ๋ถ๋ถ์ PLAB์ด๋ผ๋ ๋ฒํผ๋ฅผ ํ ๋นํ์ฌ ์ถฉ๋์ํฉ์ ํผํ๊ณ ์๋ค.

PLAB(Parallel Allocation Buffer) ๋จ์ PLAB ๋๋ฌธ์ ์ด์ฉ ์ ์์ด Old Generation์ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ๊ฐ ์๊ธฐ๊ณค ํ๋ค.
Concurrent Low Pause Collector ๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ CMS ์ปฌ๋ ํฐ๋ ๋๋ถ๋ถ์ ๊ฐ๋น์ง ์ปฌ๋ ์
์์
์ ์ ํ๋ฆฌ์ผ์ด์
์ค๋ ๋์ ๋์์ ์ํํจ์ผ๋ก์จ ๊ฐ๋น์ง ์ปฌ๋ ์
์ผ๋ก ์ธํ stop-the-world ์๊ฐ์ ์ต์ํํ๋ GC์ด๋ค.
CMS ์ปฌ๋ ํฐ๋ young generation ์ ๋ํ ๊ฐ๋น์ง ์ปฌ๋ ์
์ Parallel GC ์ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋๋ฐ, -XX:ParallelCMSThreads=<N> ์ต์
์ผ๋ก ์ค๋ ๋ ๊ฐ์๋ฅผ ์ค์ ํ ์ ์๋ค.
์ผ๋ฐ์ ์ผ๋ก CMS ์ปฌ๋ ํฐ๋ ์ด์์๋ ์ค๋ธ์ ํธ๋ค์ ๋ํ compact ์์ ์ ์ํํ์ง ์์ผ๋ฏ๋ก, ๋ฉ๋ชจ๋ฆฌ์ ํํธํ(Fragmentation) ๊ฐ ๋ฌธ์ ๊ฐ ๋๋ค๋ฉด ๋ ํฐ ํ์ฌ์ด์ฆ๋ฅผ ํ ๋นํด์ผ ํ๋ค.
-XX:+UseConcMarkSweepGC # CMS Collector ์ฌ์ฉ
-XX:ParallelCMSThreads=<N> # ์ค๋ ๋ ๊ฐ์๋ฅผ ์ค์
Garbage First ๋ผ๋ ์๋ฏธ์ G1 ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ Java 7 ๋ถํฐ ์ฌ์ฉ๊ฐ๋ฅํ๋ฉฐ, ์ฅ๊ธฐ์ ์ผ๋ก CMS ์ปฌ๋ ํฐ๋ฅผ ๋์ฒดํ๊ธฐ ์ํด ๋ง๋ค์ด์ก๋ค. G1์ ํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ง ๋ฉํฐ ํ๋ก์ธ์ ์์คํ ์์ ์ฌ์ฉํ๊ธฐ ์ํด ๊ฐ๋ฐ๋ GC์ด๋ฉฐ ์ฐ๋ ๊ธฐ๋ก ๊ฐ๋์ฐฌ heap ์์ญ์ ์ง์ค์ ์ผ๋ก ์์งํ๋ค. GC ์ผ์ ์ ์ง ์๊ฐ์ ์ต์ํํ๋ฉด์, ๋ฐ๋ก ์ค์ ์ ํ์ง ์์๋ ๊ฐ๋ฅํ ํ ์ฒ๋ฆฌ๋(throughput)๋ ํ๋ณดํ๋ ๊ฒ์ด G1GC์ ๋ชฉํ์ด๋ค. G1์ ์ค์๊ฐ(real time) GC๊ฐ ์๋๋ค. ์ผ์ ์ ์ง ์๊ฐ์ ์ต์ํํ๊ธด ํ์ง๋ง ์์ ํ ์์ ์ง๋ ๋ชปํ๋ค. ํต๊ณ๋ฅผ ๊ณ์ฐํด๊ฐ๋ฉด์ GC ์์ ๋์ ์กฐ์ ํ๋ค.
Oracle๋ฌธ์์ ๋ฐ๋ฅด๋ฉด heap size๊ฐ 6GB๋ณด๋ค ํด ๊ฒฝ์ฐ GC์ latency๋ฅผ 0.5sec์ดํ๋ก ๋ฎ์ถ์ ์๋ค๊ณ ํ๋ค.(
// G1GC๋ Java 9๋ถํฐ ๋ํดํธ์ด๋ฏ๋ก ๋ณดํต์ ๋ฐ๋ก ์ต์
์ ์จ์ ํ์ฑํํ ํ์๊ฐ ์๋ค.
-XX:+UseG1GC
-XX:ParallelGCThreads # ์ค๋ ๋ ๊ฐฏ์ ์กฐ์
G1GC๋ ์ ์ฒด heap์ ์ฒด์คํ์ฒ๋ผ ์ฌ๋ฌ ์์ญ(region)์ผ๋ก ๋๋์ด ๊ด๋ฆฌํ๋ค.
๋ฐ๋ผ์ G1์ ์์ญ์ ์ฐธ์กฐ๋ฅผ ๊ด๋ฆฌํ ๋ชฉ์ ์ผ๋ก remember set๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ค. remember set์ total heap์ 5% ๋ฏธ๋ง ํฌ๊ธฐ.
- ๋น์ด ์๋ ์์ญ์๋ง ์๋ก์ด ๊ฐ์ฒด๊ฐ ๋ค์ด๊ฐ๋ค.
- ์ฐ๋ ๊ธฐ๊ฐ ์์ฌ ๊ฝ ์ฐฌ ์์ญ์ ์ฐ์ ์ ์ผ๋ก ์ฒญ์ํ๋ค.
- ๊ฝ ์ฐฌ ์์ญ์์ ๋ผ์ด๋ธ ๊ฐ์ฒด๋ฅผ ๋ค๋ฅธ ์์ญ์ผ๋ก ์ฎ๊ธฐ๊ณ , ๊ฝ ์ฐฌ ์์ญ์ ๊นจ๋ํ๊ฒ ๋น์ด๋ค.
- ์ด๋ ๊ฒ ์ฎ๊ธฐ๋ ๊ณผ์ ์ด ์กฐ๊ฐ ๋ชจ์์ ์ญํ ๋ ํ๋ค.
Oracle์์ G1 GC๋ฅผ ์ฌ์ฉ์ ๊ถํ๋(Recommend) ๊ธฐ์ค Full GC durations are too long or too frequent. The rate of object allocation rate or promotion varies significantly. Undesired long garbage collection or compaction pauses (longer than 0.5 to 1 second)
Garbage Collection์ด ์์คํ ์ ํฐ ์ํฅ์ ๋ผ์น๋ ์ด์ ๋ ์์ ์ค๋ช ํ๋ฏ์ด GC๋ฅผ ์ํํ๋ Thread๋ฅผ ์ ์ธํ ๋ชจ๋ Thread์ ์์ ์ด ๋ฉ์ถ๊ธฐ ๋๋ฌธ ์ค์๊ฐ์ผ๋ก ํต์ ์ด ํ์ํ ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ Full GC๊ฐ ์ผ์ด๋ ์ ์ด ๋์ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ฉ์ถ๋ค๋ฉด ์ฅ์ ๋ก ์ด์ด์ง๋ค. ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ๋ ๊ฐ์ ์ํฉ์ด ์ผ์ด๋๋ค๋ฉด GC๊ฐ ์๋ฃ๋ ์ดํ Thread๊ฐ ๋ณต๊ตฌ ๋๋ค ํ๋๋ผ๊ณ ์ด๋ฏธ ๋๊ธฐํ๊ณ ์๋ ์๋ง์ ์์ฒญ์ผ๋ก ์ธํด ์์คํ ์ด ํ๊บผ๋ฒ์ ๋ง์ ๋ถํ๊ฐ ๊ฑธ๋ฆฐ๋ค.
๊ฐ ์๋น์ค๋ง๋ค ๋ชจ๋๊ฐ ๊ฐ์ ์๊ฐ ์๊ณ ๊ฐ์ฒด์ ํฌ๊ธฐ์ ์์กด ์ฃผ๊ธฐ๊ฐ ๋ค ๋ฌ๋ผ GC์ ๋ํ ์ต์ ์ ๊ณ์ ๋ค๋ฅด๊ฒ ์ค์ ํ๊ณ ๊พธ์คํ๊ฒ ๋ชจ๋ํฐ๋งํ์ฌ ์ต์ ์ ๊ฐ์ ์ฐพ์๋ด์ด ํ๋์ ํ์ฌ์ผ ํ๋ค.



