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 SampleProgram
Java μ ν리μΌμ΄μ
μ€ν μ μμ²λΌ GC λ₯Ό μ νν΄μ μ¬μ©ν μ μλ€. κ°μ₯ κ°λ¨ν SerialGC
κ° λνμ μ΄κ³ μ‘°κΈ λ μ§λ³΄λ G1GC
ZGC
λ±μ΄ μλ€.