โ๏ธ ์ ๋ฒ ์๊ฐ์ ๊ณต๋ถํ๋ JVM ๋ด์ฉ๊ณผ ์ฐ๊ฒฐ๋๋ ์ด์ ๋ก Garbage Collector(์ดํ GC)์ ๋ํด ๊ณต๋ถํด๋ณด๋ ค๊ณ ํ๋ค.
Reference Type ๊ณผ Heap Memory๋ฅผ ๊ณต๋ถํ๋ฉด์ Heap Memory ๋ด์ ์กด์ฌํ๋ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๊ณณ์ด ์์ ๋ GC๊ฐ ์ด๋ฅผ ์ฒ๋ฆฌํด์ค๋ค๋ ๊ฒ์ ์กฐ๊ธ์ด๋๋ง ์ดํดํ๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ค ์์ ์, ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก GC๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๋ฆฌํด์ฃผ๋๊ฑธ๊น?
์ด๋ฒ ์๊ฐ์ ํตํด ์์๋ณด์!
Un-Managed Language, Managed Language
๋ง์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค์ Mangaed Language, Un-Managed Language ๋ก ๋๋์ด ๊ตฌ๋ถ๋ ์ ์๋ค. ์ด ๋์ ์๋ฏธ๋ ๋ฌด์์ ๋ปํ๋๊ฑธ๊น? ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด์ฌํด์ผ ํ๋ค๋ฉด Un-Managed Language, ๊ด์ฌํ์ง ์์๋ ์์์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ต์ ํ๊ฐ ์งํ๋๋ค๋ฉด Managed Language ๋ผ๊ณ ํ๋ค.
Un-Managed Language
C, Cpp, Assembly ๋ฑ์ด ์ฌ๊ธฐ์ ์ํ๋ค. ํด๋น ์์ญ์ ์ธ์ด๋ค์ ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ฉ๋ชจ๋ฆฌ๋ CPU์ ์ ๊ทผํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ํ๋ฅผ ๊ธฐ๋ ํ ์ ์๋ค. ํ์ง๋ง ์์์น ๋ชปํ๊ฒ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ๋ ๋ฑ์ ๋ฌธ์ ๋ฐ๊ฒฌ ์, ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ๊ฐ ์ด๋ ต๋ค.
Managed Language
Java, Ruby, PHP ๋ฑ ์ธํฐํ๋ฆฌํฐ, ์ปดํ์ผ๋ฌ ํน์ ๋ฐํ์ ํ๊ฒฝ์์ ๋์ํ๋ ์ธ์ด๋ค์ด ํด๋น ์์ญ์ ์ํ๋ค. ํด๋น ์ธ์ด๋ค์ ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ ๊ถํ์ด ์๊ฑฐ๋ ๊ทนํ ์ ํ์ ์ด๋ค. ๋๋ฌธ์ GC ๋ฑ์ ํตํด ์์ฒด์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ค. ๋ค๋ง Managed Language์ ๋นํด ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ ์๋๊ฐ ๋๋ฆฌ๊ณ ์ฌ์ฉ๋๋ ๋ฐฉ์์ ๋ฐ๋ผ ๋ค์ํ ๋จ์ ์ด ์กด์ฌํ๋ค.
Garbage Collector
์ง๋ ์๊ฐ์ ํตํด Reference Type์ Heap ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ด ์ ์ฅ๋๋ค๋ ๊ฒ์ ๋ฐฐ์ ๋ค. ๊ธฐ์กด Java์์๋ GC ์์ ์ด ๊ฐ๋ฐ์๊ฐ ๊ด์ฌํ์ง ์๋๋ก ๊ฐ๋ฐ๋์๋๋ฐ, JDK 1.2๋ถํฐ ์กฐ๊ธ์ด๋๋ง ๊ด์ฌ ํ ์ ์๋๋ก ์์ ๋์๋ค. ์ด๋ฅผ ํตํด java.lang.ref ํจํค์ง๊ฐ ์ ๊ณต๋์ด Strong, Week, Soft, Phantom Reference ํด๋์ค๋ฅผ ์ด์ฉํ์ฌ ๊ฐ๋ฐ์๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ์ ์ผ์ ๋ถ๋ถ ๊ด์ฌ ํ ์ ์๊ฒ ๋์๋ค.
์ด๋ฌํ GC๋ ๋ ๊ฐ์ง ๊ฐ์ ์ ๊ธฐ์ค์ผ๋ก ๋ง๋ค์ด์ก๋ค.
- ๋๋ถ๋ถ์ ๊ฐ์ฒด๋ ๊ธ๋ฐฉ ์ ๊ทผ ๋ถ๊ฐ๋ฅํ ์ํ(Un-Reachable)๊ฐ ๋๋ค.
- ์ค๋๋ ๊ฐ์ฒด์์ ์๋ก์ด ๊ฐ์ฒด๋ก์ ์ฐธ์กฐ๋ ์์ฃผ ๋๋ฌผ๊ฒ ์ผ์ด๋๋ค.
๊ทธ๋ ๋ค๋ฉด GC๋ Heap ๋ฉ๋ชจ๋ฆฌ์์ ์ฐธ์กฐํ์ง ์๋ ๊ฐ์ ์ฐพ์ ์ ๊ฑฐํ๋๋ฐ ์ด๋ป๊ฒ ์ง์์ผ ํ ๊ฐ์ธ์ง ์๋์ง ๊ตฌ๋ถํ๋๊ฑธ๊น? ๋ง์ฝ GC๊ฐ ์ด๋ฅผ ๊ตฌ๋ถํ๋ค๋ฉด Heap ๋ฉ๋ชจ๋ฆฌ๋ GC๊ฐ ๊ฐ์ ์ ๊ตฌ๋ถ ํ ์ ์๋๋ก ์ธ๋ถ์ ์ผ๋ก ์์ญ์ด ๋๋์ด์ ธ ์์ง ์์๊น?
Reachablilty
๊ธฐ๋ณธ์ ์ผ๋ก Heap ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋ ๊ฐ์ฒด๋ Reachablilty ๊ฐ๋ ์ ํตํด ํด๋น ๊ฐ์ฒด๊ฐ ์ฐธ์กฐ๋์๋์ง ๋์ง ์์๋์ง ๊ตฌ๋ถ๋๋ค.
โ๏ธ Reachable ์ ํจํ ์ฐธ์กฐ๊ฐ ์๋ ๊ฐ์ฒด
โ๏ธ Un-Reachable ์ด๋ค ๊ณณ์์๋ ์ฐธ์กฐํ์ง ์๋ ๊ฐ์ฒด, Garbage Collector ๋์
โ๏ธ Root Set ๊ฐ์ฒด๊ฐ ์ฐธ์กฐํ๊ณ ์๋ ์ต์ด์ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ค. Root Set์ ์ฐธ์กฐํ๊ณ ์๋ ๊ฐ์ฒด๋ค์ ์ฐธ์กฐ๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด ํด๋น ๊ฐ์ฒด๋ค๊ณผ Root Set ๊ฐ์ฒด๋ Un-Reachable ๋ก ๊ฐ์ฃผ๋์ด GC์ ์ํด ์ ๋ฆฌ๋๋ค. (21/05/17 hpotter1993๋, ํผ๋๋ฐฑ ๊ฐ์ฌํฉ๋๋ค!)
Garbage Collector ๊ณผ์
(์ข์ธก์ JDK 1.7 ์ด์ , ์ฐ์ธค์ JDK 8 ์ดํ / Perm ์์ญ์ด MetaSpace๋ก ๋ณ๊ฒฝ๋์ด OS์์ ์์ฒด์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ค.)
1๏ธโฃ Minor Garbage Collector Young Generetion ์์ ๋ฐ์ํ๋ค.
2๏ธโฃ Major Garbage Collector Old Generetion, Perm ์์ ๋ฐ์ํ๋ค.
3๏ธโฃ Full Garbage Collector ๋ชจ๋ ์์ญ์ ๋์์ผ๋ก ๋ฐ์ํ๋ค. ํด๋น ์ข ๋ฅ์ GC๊ฐ ๋ฐ์ํ๋ฉด JVM์ด ๋ฉ์ถ๋๋ฐ ์ด๋ฅผ Stop-the-World ๋ผ๊ณ ํ๋ค.
System.gc()
Runs the garbage collector. Calling the gc method suggests that the Java Virtual Machine expend effort toward recycling unused objects in order to make the memory they currently occupy available for quick reuse. When control returns from the method call, the Java Virtual Machine has made a best effort to reclaim space from all discarded objects.
System.gc() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์ค ๊ฐ์ ์ ์ผ๋ก GC๋ฅผ ์ํํ๊ฒ ๋๋ค. ํ์ง๋ง ๋ชจ๋ ์ค๋ ๋๊ฐ ๋ฉ์ถ๊ธฐ ๋๋ฌธ์ ์ฝ๋ ์ค๊ฐ์ ํด๋น ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ํ์๋ ํ์ง ์๋ ๊ฒ์ด ์ข๋ค.
public class GcTest {
public static void main(String[] args) {
long start = System.nanoTime();
System.gc();
long end = System.nanoTime();
System.out.println(start - end + "ns");
}
}
Young Generation
์๋กญ๊ฒ ์์ฑ๋ ๊ฐ์ฒด๊ฐ ์ฒ์ ๋จธ๋ฌด๋ฅด๋ ์์ญ์ด๋ค. Minor GC๊ฐ ๊ด์ฌํ๋ ์์ญ์ด๋ฉฐ, HotSpot JVM์์๋ ๋น ๋ฅธ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ํด ๋ ๊ฐ์ง ๊ธฐ์ ์ ์ฌ์ฉํ๋ค. bump-the-pointer ์ TLABs ๊ธฐ์ ์ด๋ค.
๐ Eden new ์์ฑ์๋ก ์๋กญ๊ฒ ์ด๊ธฐํ๋๊ฑฐ๋ ์์ฑ๋ ๊ฐ์ฒด๋ค์ด ๊ฐ์ฅ ์ฒ์ ๋จธ๋ฌด๋ฅด๋ ์์ญ์ด๋ค. ํด๋น ์์ญ์ด ๋ชจ๋ ์ฐจ๋ฉด GC๊ฐ Un-Reachable ํ ๊ฐ์ฒด๋ฅผ ์ฐพ์ ์ ๊ฑฐํ๊ณ ์ด์๋จ์ Reachable ๊ฐ์ฒด๋ฅผ Survivor 1 ์์ญ์ผ๋ก ์ด๋์ํจ๋ค.
๐ Survivor 1/2 Eden ์์ญ์์ ์ด์๋จ์ Reachable ๊ฐ์ฒด๋ค์ด Survivor 1 ์์ญ์ ํ ๋น๋๊ณ , ํด๋น ์์ญ์ด ๊ฝ ์ฐจ๋ฉด ๋ค์ GC๊ฐ Un-Reachable ํ ๊ฐ์ฒด๋ฅผ ์ฐพ์ ์ ๊ฑฐํ ํ, Reachable ๊ฐ์ฒด๋ฅผ Survivor 2 ์์ญ์ผ๋ก ์ด๋์ํค๊ณ Survivor 1 ์์ญ์ ๋น์ด๋ค. Survivor 2 ์์ญ์ด ์ฐจ๊ฒ ๋๋ฉด ๋ค์ ์์ ๊ณผ์ ์ ๊ฑฐ์ณ Survivor 1์ ๊ฐ์ฒด๋ฅผ ์ฎ๊ธฐ๊ณ Survivor 2 ์์ญ์ ๋น์ด๋ค. ์ฆ, ๋ ์์ญ ์ค ํ ์์ญ์ ๋น์์ ธ ์์ด์ผ ํ๋ค. ์์ธ์ ์ผ๋ก ํด๋น ์์ญ์ ๊ฑฐ์น์ง ์๊ณ Old ์์ญ์ผ๋ก ๋ค์ด๋ ํธ๋ก ๋์ด๊ฐ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ, ์ด๋ ๊ฐ์ฒด์ ํฌ๊ธฐ๊ฐ Survivor ํฌ๊ธฐ๋ณด๋ค ํด ๊ฒฝ์ฐ์ ํด๋น๋๋ค.
Old Generetion
Young ์์ญ์์ ์ด์๋จ์ Reachable ๊ฐ์ฒด๋ก Full GC, Major GC ๊ฐ ์ผ์ด๋์ง ์๋ ์ด์ ๋ฉ๋ชจ๋ฆฌ์์ ์ฌ๋ผ์ง์ง ์๋๋ค. ์ด ๋, ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ JDK 7์ ๊ธฐ์ค์ผ๋ก 5๊ฐ์ง๊ฐ ์กด์ฌํ๋ค.
GC์ ์ข ๋ฅ
๐ฅ Serial GC (-XX:+UseSerialGC)
Young ๊ณผ Old ์์ญ์ด ์ฐ์์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ฉฐ ํด๋น GC๊ฐ ์ํ๋ ๋ JVM์ ์ํ์ ๋ฉ์ถ๊ณ GC๋ฅผ ์ํํ๋๋ฐ, ์ด๋ฅผ Sun์์๋ Stop-the World๋ผ๊ณ ํํํ๋ค. ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์๋ ์ฌ์ฉ ํ ์ ์๋ ์ฑ๊ธ ์ค๋ ๋ ์์คํ ์ ์ ํฉํ GC๋ก, ๋ชจ๋ ์ข ๋ฅ์ GC๋ฅผ ์ํํ๋ค. Young ์์ญ์์๋ Serial ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ์ฉ๋๊ณ , Old ์์ญ์์๋ Serial Mark-Sweep-Compact ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ์ฉ๋๋ค.
โก๏ธ Mark-Sweep-Compact ์๊ณ ๋ฆฌ์ฆ Old ์์ญ์ ์ด์์๋ ๊ฐ์ฒด๋ฅผ ์๋ณ(Mark)ํ๊ณ Heap ๋ฉ๋ชจ๋ฆฌ์ ์๋ถ๋ถ๋ถํฐ ํ์ธํด์ Reachableํ ๊ฐ์ฒด๋ง ๋จ๊ธด๋ค.(Sweep) ๋ง์ง๋ง์ผ๋ก Reachable ๊ฐ์ฒด๋ค์ด ์ฐ์์ผ๋ก Heap ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ฅ ์์์ ๋ถํฐ ์์ด๋๋ก ํ ๋ค์ ๊ฐ์ฒด๊ฐ ์กด์ฌํ๋ ๊ณต๊ฐ๊ณผ ์กด์ฌํ์ง ์๋ ๊ณต๊ฐ์ ๋๋์ด ์ํํ๋ค.(Compact)
๐ฅ Parallel GC (-XX:+UseParallelGC)
Parallel GC๋ ๊ธฐ๋ณธ์ ์ผ๋ก Old ์์ญ์์๋ Serial GC์ ๋์ผํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋์ํ์ง๋ง Young ์์ญ์์๋ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํด CPU๋ฅผ ์ฌ์ฉํด GC์ ๋ถํ๋ฅผ ์ค์ฌ CPU์ ๋๊ธฐ ์ํ๋ฅผ ์ต์ํํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ์์ ๋์ด ์ฌ๋ฆด ์ ์๋ค. ๋ณดํต ThroughPut GC ๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
๐ฅ Parallel Old GC
Young ์์ญ์์๋ ๋ณ๋ ฌ์ ์ผ๋ก Garbage๋ฅผ ์ฒ๋ฆฌํ๋ฉฐ, Old ์์ญ์์๋ Mark-Summary-Compaction ๋จ๊ณ๋ฅผ ์ฌ์ฉํ์ฌ ์ฒ๋ฆฌํ๋ค. Parallel GC์ Mark-Sweep-Compact ์๊ณ ๋ฆฌ์ฆ์์ Sweep ๋ถ๋ถ๊ณผ Summary ๋ถ๋ถ์ด ์ฝ๊ฐ ๋ค๋ฅธ๋ฐ, Summary ๋จ๊ณ์์ GC๋ฅผ ์ํํ ์์ญ์์ ํ๋ฒ ๋ Reachable ๊ฐ์ฒด๋ฅผ ํ์ธํ๋ค๋ ์ ์์ ์กฐ๊ธ ๋ ๋ณต์กํ๋ค.
๐ฅ CMS GC (-XX:+UseConcMarkSweepGC)
๊ธฐ์กด์ ๋ค๋ฅธ GC ๋ฐฉ์๋ณด๋ค ํจ์ฌ ๋ณต์กํ๋ฐ, ์ด 3๋๊ณ์ Mark ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ค. 1) Init Mark ๋จ๊ณ์์๋ ํด๋์ค ๋ก๋์์ ๊ฐ๊น์ด Reachable ๊ฐ์ฒด๋ฅผ ํ์ธํ๊ณ , 2)ํด๋น ๊ฐ์ฒด๋ค์ Current Mark ๋จ๊ณ์์ Root Set ๊ฐ์ฒด๋ฅผ ๋ฐ๋ผ ํ์ธํ๋ค. ์ด ๋จ๊ณ์์๋ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์คํ ์ค ์ผ ๋ ๋์์ ์งํ๋๋ค. 3) Remark ๋จ๊ณ์์๋ ์ด์ ๋จ๊ณ์์ ์๋ก ์์ฑ๋๊ฑฐ๋ ์ฐธ์กฐ๊ฐ ๋๊ธด ๊ฐ์ฒด๋ฅผ ํ์ธํ๊ณ , ์ด๋ฅผ Cuncurrent Sweep ๋จ๊ณ๋ก ๋๊ฒจ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ต์ ํํ๋ค. ์ด๋ฌํ ๋จ๊ณ๋ก ์งํ๋๊ธฐ ๋๋ฌธ์ Stop-the-World ์๊ฐ์ด ์งง์์ ธ ์คํ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ต ์๋๊ฐ ์ค์ํ ๋ ์ฌ์ฉ๋๋ค. ๊ทธ๋์ CMS GC๋ฅผ Low Latency GC๋ผ๊ณ ๋ถ๋ฅธ๋ค. ํ์ง๋ง ์ด๋ฐ ์ด์ ์๋ ๋ถ๊ตฌํ๊ณ CMS GC๋ Compaction ๊ณผ์ ์ด ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ๋ผ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉฐ, ๋ค๋ฅธ GC ๋ฐฉ์๋ณด๋ค ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ์ CPU๋ฅผ ์ฌ์ฉํ๋ค.
๐ฅ G1 (Garbage First) GC
ํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ง ๋ฉํฐ ํ๋ก์ธ์ ์์คํ ์ ์ฌ์ฉํ๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก ๊ฐ๋ฐ๋ GC๋ก, ๋ณ๋ ฌ ์ค๋ ๋ ๋ฐ ๋์ ์ค๋ ๋ ๋ชจ๋ ์ฌ์ฉํ๋ฉฐ, Java ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋์ ๋์ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ด์์๋ Reachable ๊ฐ์ฒด๋ฅผ ํ์ํ๊ณ , ๋ณ๋ ฌ ์ค๋ ๋๋ฅผ ์ด์ฉํด ํด๋น ๊ฐ์ฒด๋ฅผ ๋น ๋ฅด๊ฒ ๋ณต์ฌํด์ Stop-the-World ์๊ฐ์ ๋จ์ถํ๋ฉด์ ๋ณ๋์ ์ค์ ์ ํ์ง ์์๋ ๊ฐ๋ฅํ ํ ์ฒ๋ฆฌ๋์ ํ๋ณดํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ค. JDK 7 ๋ถํฐ ์ ์ ์ง์ํ๋ฉฐ JDK 9 ๋ถํฐ Default GC๋ก ์ฌ์ฉ๋๋ค. ๋ค๋ง, Stop-the-World์ ์๊ฐ์ด ๋จ์ถ๋์๋ค๊ณ ํด์ G1 GC๊ฐ ์ค์๊ฐ(Real Time) GC๋ ์๋๋ค.
G1 GC๋ CMS GC์ ๋น์ทํ๊ฒ ์๋๋์ง๋ง, G1 GC๋ ์ ์ญ ํ์ ๋จ๊ณ๋ฅผ ๊ฑฐ์ฒ Heap ์ ์ฒด์ ๊ฐ์ฒด ์๋ช ์ ๊ฒฐ์ ํ๋ค. ์ด ๋, ํ์ ๋จ๊ณ๊ฐ ์๋ฃ๋๋ฉด G1 GC๋ ์ด๋ค ์์ญ์ด ๋น์์ ธ์ผ ํ๋์ง ์๊ฒ ๋๊ณ , ์ด๋ฅผ ์ค์ ์ ์ผ๋ก ๋น ๋ฅด๊ฒ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๋ฆฌํ๋ค.
๐คฆโ๏ธ Garbage Collector๋ฅผ ์ ๋ฆฌํ๋๋ฐ ์ ๋ง ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฐ ๊ฒ ๊ฐ๋ค.
๋ฌด์๋ณด๋ค ์ฌ๋ฌ ๋ธ๋ก๊ทธ๋ฅผ ๊ฒ์ํด์ ์ฝ์ด๋ด๋ ์ดํด๋์ง ์๋ ๋ถ๋ถ์ด ๋๋ฌด ๋ง์์ ๊ณ์ ๋ฐ๋ณตํด์ ๋ค์ ์๊ฐํ๋ ๋ฐฉ์์ผ๋ก ๊ณต๋ถํ๋ค ๋ณด๋ ๊ทธ๋ฐ ๊ฒ ๊ฐ๋ค.
์ฝ์ดํ ๋ด์ฉ์ ์ ๊ทผํ๋ฉด ํ ์๋ก CS์ ์ค์์ฑ์ด ํฌ๊ฒ ์๋ฟ๋๋ค. ์๋ํ๋ฉด ์ผ๋จ CS ์ง์์ด ์์ผ๋ ์ฝ๊ฒ ์ดํด๊ฐ ๋์ง ์๋๋ค.
๊ทธ๋๋ ๋ง์ ๋ถ๋ค์ด ์ฝ๊ฒ ์ค๋ช ํด์ฃผ์ ๋ถ๋ถ์ด ์์ด ๊ทธ๊ฑธ ํตํด ํ๋์ฉ ๊นจ์ฐ์น๊ณ ์์ง๋ง ๋ ๊น๊ฒ ํ๊ณ ์ถ์ด ์๋ฌธ์ ์ฐพ์๋ณด๋ฉด ๋๋์ฒด ๋ฌด์จ ๋ง์ธ์ง ์ ์ ์๋ ๊ฒ๋ค์ด ๋ง๋ค.
๊ทธ๋๋ ๋ด๊ฐ ๋ ํ๋ ๋ ์๊ฒ ๋์ใท๋ ์ ์์ ๋ฟ๋ฏํ๊ณ ์ฌ๋ฐ๋ค!
์ด๋ฒ ๋ด์ฉ์ Java ํ๋ก๊ทธ๋๋ฐ์ ๊ทผ๊ฐ์ด ๋๋ ๋ด์ฉ์ด๋๊น ๊พธ์คํ ์๊ธฐํ ์ ์๋๋ก ํด์ผ๊ฒ ๋ค.
(๊ทธ๋ฆฌ๊ณ ์์ด ์๋ฌธ๋ ์ฝ๊ณ ์ดํด ํ ์ ์๋๋ก ๋ ธ๋ ฅํด์ผ๊ฒ ๋ค!)
์ฐธ๊ณ ๋ฌธ์
Understanding Garbage Collectors
Getting Started with the G1 Garbage Collector
'Programming > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
F010 - System.out.println(), Logger (0) | 2021.05.19 |
---|---|
F009 - Inheritance, Composition (0) | 2021.05.18 |
F007 - JVM : Memory Architecture (0) | 2021.05.14 |
F006 - Throwable, Exception, Error (0) | 2021.05.11 |
F005 - Stack & Heap Memory (0) | 2021.05.08 |