Garbage Collection
Garbage Collection μ΄λ Java λ©λͺ¨λ¦¬ κ΄λ¦¬ λ°©λ² μ€ νλλ‘ λ μ΄μ μ°Έμ‘°λμ§ μλ κ°μ²΄λ€μ μ κ±°νλ μμ μ μλ―Ένλ©° JVM μ Heap Area μμ μ£Όλ‘ λμνλ€.
Garbage Collection μ λμ

κ°μ²΄λ€μ μ€μ§μ μΌλ‘ Heap Area μ μμ±λκ³ Method Area λ Stack Area λ± Root Area μμ Heap Area μ μμ±λ κ°μ²΄μ μ£Όμλ§ μ°Έμ‘°νλ€.
GC μ λμμ μ΄λ° κ°μ²΄λ€ μ€ μ°Έμ‘°λμ§ μλ κ°μ²΄λ€μ΄λ€. μ¬κΈ°μ μ°Έμ‘°λμ§ μλ κ°μ²΄λ€μ unreachable μ΄λΌκ³ νλ©° μ°Έμ‘°λκ³ μλ κ°μ²΄λ€μ reachable μ΄λΌκ³ νννλ€.
unreachable κ°μ²΄λ€μ λ©μλκ° μ’
λ£λλ©΄μ Stack Area μμ Frame μ΄ pop λκ±°λ μ°Έμ‘° λμμ΄ λ°λλ©΄μ μκΈ°λλ° GC λ μ΄λ° κ°μ²΄λ€μ μ κ±°νλ μν μ νλ€.
JVM Heap Area

JVM μ Heap Area λ GC κ° ν¨μ¨μ μΌλ‘ λμν μ μλλ‘ Eden Survivor0 Survivor1 Old Permanent 5κ°μ§λ‘ λλλ€. JDK1.8 λΆν° Permanent μμμ΄ Native Method Stack Area λ₯Ό μν MetaSpace μμμΌλ‘ λ³κ²½λμλ€. Survivor μμμ κ²½μ° GC κ° μΌμ΄λ λ λ μμ κ°μ 볡μ¬κ° μΌμ΄λλ€λ μ μ΄ μ€μνκ³ μ«μλ μ€μν μμκ° μλλ€.
Stop-The-World
GC λ₯Ό μνν λ GC λ₯Ό μννλ μ€λ λλ₯Ό μ μΈν λͺ¨λ μ€λ λλ μ μ§νλλ° μ΄λ₯Ό Stop-The-World λΌκ³ νλ€.
λΉλ²ν GC λ λ λ§μ Stop-The-World λ₯Ό λ°μμν€κ³ μ΄λ μ ν리μΌμ΄μ
μ±λ₯ μ νλ‘ μ΄μ΄μ§κΈ° λλ¬Έμ Stop-The-World μκ°μ μ€μ¬ μ€λ λκ° μ μ§λλ μκ°μ μ€μ΄λ κ²μ΄ μ€μνλ€.
Garbage Collection λμ κ³Όμ
GC λ Minor GC μ Major GC λ‘ κ΅¬λΆν μ μλ€. Minor GC λ young μμμμ Major GC λ old μμμμ μΌμ΄λλ€.
Minor GC
Minor GC λ young μμμμ μΌμ΄λλ©° Eden μμμ΄ κ°λ μ°¨λ©΄μ μμλλ€.
- μ΅μ΄μ κ°μ²΄κ° μμ±λλ©΄
age-bitμ΄ 0μΌλ‘ ν λΉλκ³Edenμμμ μ μ₯λλ€. Edenμμμ΄ κ°λμ°¨λ©΄ μ°Έμ‘°κ° λ¨μμλ κ°μ²΄λ₯Όmarkνλ€.Edenμμμμmarkλ κ°μ²΄λ₯ΌSurvivor0μμμΌλ‘ 볡μ¬νλ€.Edenμμμ λΉμ°κ³ μ΄μλ¨μ κ°μ²΄λ€μage-bitμ΄ μ¦κ°νλ€.Edenμμμ΄ λ€μ κ°λμ°¨λ©΄ μ°Έμ‘°κ° λ¨μμλ κ°μ²΄λ₯Ό λ€μmarkνλ€.Edenμμκ³ΌSurvivor0μμμμmarkλ κ°μ²΄λ₯ΌSurvivor1μμμΌλ‘ 볡μ¬νλ€.Edenμμκ³ΌSurvivor0μμμ λΉμ°κ³ μ΄μλ¨μ κ°μ²΄λ€μage-bitμ΄ μ¦κ°νλ€.Edenμμμ΄ λ€μ κ°λμ°¨λ©΄ μ°Έμ‘°κ° λ¨μμλ κ°μ²΄λ₯Ό λ€μmarkνλ€.Edenμμκ³ΌSurvivor1μμμμmarkλ κ°μ²΄λ₯ΌSurvivor0μμμΌλ‘ 볡μ¬νλ€.Edenμμκ³ΌSurvivor1μμμ λΉμ°κ³ μ΄μλ¨μ κ°μ²΄λ€μage-bitμ΄ μ¦κ°νλ€.- μ κ³Όμ μ λ°λ³΅νλ€κ° νΉμ
age-bitμ λλ¬ν κ°μ²΄λ€μoldμμμΌλ‘promotionνλ€.
Major GC
Major GC λ old μμμμ μΌμ΄λλ©° Minor GC μ λ°λλ‘ μ°Έμ‘°λμ§ μλ κ°μ²΄λ₯Ό mark νλ€.
old μμμ΄ κ°λμ°¨κ² λλ©΄ mark λ κ°μ²΄λ₯Ό μ κ±°νλ Full GC(Major GC) κ° μΌμ΄λλλ° μ΄λ Minor GC λ³΄λ€ ν¨μ¬ λ§μ μκ°μ μλͺ¨νλ€. μ¦, Stop-The-World μκ°μ΄ κΈΈλ€.
μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ Full GC μμ Mark-Sweep-Compact Algorithm μ κΈ°λ°ν μ¬λ¬ GC λ°©μλ€μ΄ μ ν λ° μ μ©λλ€.
Garbage Collection Algorithm
Weak Generational Hypothesis
Weak Generational Hypothesis λ λλΆλΆμ κ°μ²΄λ λΉ λ₯΄κ² unreachable μνλ‘ μ νλλ€λ κ°μ€μ΄λ€. μ΄λ GC λ₯Ό μ±κ³΅μ μΌλ‘ μννλ Algorithm μ μ€κ³νκΈ° μν΄μ μ¬μ©λλ λνμ μΈ κ°μ€μ΄λ€.
Mark-Sweep-Compact Algorithm

GC κ° μνλ λ reachable κ°μ²΄λ€μ mark λλ€. unreachable ν κ°μ²΄λ€μ mark λμ§μμκΈ° λλ¬Έμ μ΄λ° κ°μ²΄λ€μ μΆμ νκ³ μμ νλ κ²μ sweep μ΄λΌκ³ νλ€.
mark λμ§ μμ κ°μ²΄λ€μ μ κ±°νλ©΄ λ©λͺ¨λ¦¬ 곡κ°μ ꡬλ©μ΄ μκΈ°λ λ¨νΈνκ° λ°μνλλ° μ΄λ₯Ό Fragmentation μ΄λΌκ³ λΆλ₯Έλ€.
μ λ ¬λμ§ μμ Fragmentation λ λ©λͺ¨λ¦¬ 곡κ°μ μ λμ μΈ κ³΅κ°μ μΆ©λΆν΄λ μ°μλλ λ©λͺ¨λ¦¬ 곡κ°μ΄ λΆμ‘±ν΄ λ©λͺ¨λ¦¬ ν λΉμ΄ μ΄λ €μΈ μ μλ€. λλ¬Έμ λ©λͺ¨λ¦¬λ₯Ό μ 리ν΄μ£Όλλ° μ΄ λ°©μμ Compaction μ΄λΌκ³ νλ€.
Garbage Collection μ μ©
java -XX:+UseG1GC -XX:+DisableExplicitGC SampleProgramJava μ ν리μΌμ΄μ
μ€ν μ μμ²λΌ GC λ₯Ό μ νν΄μ μ¬μ©ν μ μλ€. κ°μ₯ κ°λ¨ν SerialGC κ° λνμ μ΄κ³ μ‘°κΈ λ μ§λ³΄λ G1GC ZGC λ±μ΄ μλ€.