πΎ [CS] κ°λΉμ§ 컬λ μ (Garbage Collection)μ΄λ 무μμΌκΉμ?
- κ°λΉμ§ 컬λ μ (Garbage Collection)μ λ μ΄μ μ¬μ©νμ§ μλ κ°μ²΄λ₯Ό λ©λͺ¨λ¦¬μμ μλμΌλ‘ ν΄μ νλ λ©λͺ¨λ¦¬ κ΄λ¦¬ κΈ°λ²μ λλ€.
- μλ°(Java)μ κ°μ νλ‘κ·Έλλ° μΈμ΄μμ, κ°λ°μκ° μλμΌλ‘ λ©λͺ¨λ¦¬λ₯Ό ν΄μ νμ§ μμλ κ°λΉμ§ 컬λ ν°(Garbage Collector)κ° μλμΌλ‘ λΆνμν κ°μ²΄λ₯Ό κ°μ§νκ³ λ©λͺ¨λ¦¬λ₯Ό νμνμ¬ λ©λͺ¨λ¦¬ λμ(Memory Leak)λ₯Ό λ°©μ§ν©λλ€.
1οΈβ£ κ°λΉμ§ 컬λ μ μ νμμ±.
1οΈβ£ μλ λ©λͺ¨λ¦¬ κ΄λ¦¬.
- κ°λΉμ§ 컬λ μ (Garbage Collection)μ νλ‘κ·Έλλ¨Έκ° λ©λͺ¨λ¦¬ ν λΉκ³Ό ν΄μ λ₯Ό μ§μ κ΄λ¦¬ν νμ μμ΄, ν λ©λͺ¨λ¦¬(Heap Memory)μμ λ μ΄μ μ°Έμ‘°λμ§ μλ κ°μ²΄λ₯Ό μλμΌλ‘ μ κ±°νμ¬ λ©λͺ¨λ¦¬ κ΄λ¦¬λ₯Ό κ°νΈνκ² ν©λλ€.
- μλ°(Java)μ κ°μ μΈμ΄μμλ new ν€μλλ‘ κ°μ²΄λ₯Ό μμ±νκ³ λλ©΄, λ©λͺ¨λ¦¬ ν΄μ λ₯Ό κ°λΉμ§ 컬λ ν°(Garbage Collector)μ λ§‘κΈ°κ² λ©λλ€.
2οΈβ£ λ©λͺ¨λ¦¬ λμ λ°©μ§.
- κ°λΉμ§ 컬λ μ
(Garbage Collection)μ λ μ΄μ νμνμ§ μμ κ°μ²΄κ° λ©λͺ¨λ¦¬μμ ν΄μ λμ§ μκ³ κ³μ λ¨μ μμ΄ λ©λͺ¨λ¦¬λ₯Ό μ°¨μ§νλ μν©, μ¦ λ©λͺ¨λ¦¬ λμ(Memory Leak)λ₯Ό λ°©μ§ν©λλ€.
- μ΄λ₯Ό ν΅ν΄ ν¨μ¨μ μΈ λ©λͺ¨λ¦¬ μ¬μ©μ 보μ₯ν©λλ€.
2οΈβ£ κ°λΉμ§ 컬λ μ (Garbage Collection)μ κΈ°λ³Έ μ리.
1οΈβ£ κ°μ²΄μ μλͺ μ£ΌκΈ°.
- μλ° νλ‘κ·Έλ¨μ΄ μ€νλλ©΄μ, κ°μ²΄λ ν λ©λͺ¨λ¦¬(Heap Memory)μ ν λΉλ©λλ€.
- μ΄λ€ κ°μ²΄κ° μμ±λ ν, ν΄λΉ κ°μ²΄λ₯Ό μ°Έμ‘°νλ λ³μλ λ€λ₯Έ κ°μ²΄κ° μμΌλ©΄, κ·Έ κ°μ²΄λ λ μ΄μ μ¬μ©λμ§ μλ βμ°λ κΈ°(Garbage)βκ° λ©λλ€.
- κ°λΉμ§ 컬λ ν°(Garbage Collector)λ μ£ΌκΈ°μ μΌλ‘ ν λ©λͺ¨λ¦¬(Heap Memory)λ₯Ό μ€μΊνμ¬ λ μ΄μ μ°Έμ‘°λμ§ μλ κ°μ²΄λ₯Ό μ°Ύμ λ©λͺ¨λ¦¬μμ μ κ±° ν©λλ€.
2οΈβ£ μ°Έμ‘°μ κ°λ .
- κ°μ²΄λ μ°Έμ‘° λ³μλ₯Ό ν΅ν΄ μ κ·Όν μ μμΌλ©°, κ°λΉμ§ 컬λ ν°(Garbage Collector)λ κ°μ²΄κ° λ€λ₯Έ κ°μ²΄λ λ³μλ‘λΆν° μ°Έμ‘°λκ³ μλμ§λ₯Ό νλ¨ν΄ κ°λΉμ§(Garbage) μ¬λΆλ₯Ό κ²°μ ν©λλ€.
- μ°Έμ‘°λμ§ μλ κ°μ²΄λ λ μ΄μ μ κ·Όν μ μμΌλ―λ‘, κ°λΉμ§ 컬λ ν°(Garbage Collector)κ° λ©λͺ¨λ¦¬μμ μ κ±°ν μ μμ΅λλ€.
3οΈβ£ κ°λΉμ§ 컬λ μ (Garbage Collection)μ λμ λ°©μ.
- κ°λΉμ§ 컬λ μ
(Garbage Collection)μ ꡬ체μ μΈ λμ λ°©μμ μ¬μ©λλ μκ³ λ¦¬μ¦μ λ°λΌ λ€λ¦
λλ€.
- μλ°μμλ λ€μν μκ³ λ¦¬μ¦μ΄ κ°λΉμ§ 컬λ μ (Garbage Collection)μ μν΄ μ¬μ©λλ©°, κ·Έμ€ λνμ μΈ λͺ κ°μ§ λ°©λ²μ μ€λͺ νκ² μ΅λλ€.
1οΈβ£ λ§ν¬-μ€-μ€μ(Mark-and-Sweep) μκ³ λ¦¬μ¦.
-
λ§ν¬ λ¨κ³(Mark Phase)
- νλ‘κ·Έλ¨μ΄ μ€νλλ λμ μ°Έμ‘° κ°λν κ°μ²΄λ₯Ό βλ§νΉβ ν©λλ€.
- μ°Έμ‘°λμ§ μλ κ°μ²΄λ λ§νΉλμ§ μμ μ±λ‘ λ¨μ΅λλ€.
- νλ‘κ·Έλ¨μ΄ μ€νλλ λμ μ°Έμ‘° κ°λν κ°μ²΄λ₯Ό βλ§νΉβ ν©λλ€.
-
μ€μ λ¨κ³(Sweep Phase)
- λ§νΉμ΄ λμ§ μμ κ°μ²΄λ₯Ό ν λ©λͺ¨λ¦¬(Heap Memory)μμ μ κ±°νμ¬ λ©λͺ¨λ¦¬λ₯Ό νμν©λλ€.
- μ΄ κ³Όμ μμ ν λ©λͺ¨λ¦¬ μ‘°κ°ν(Fragmentation)κ° λ°μν μ μμ΅λλ€.
2οΈβ£ 볡μ¬(Copying) μκ³ λ¦¬μ¦
- ν λ©λͺ¨λ¦¬(Heap Memory) λ κ°μ μμ(From-Spaceμ To-Space)μΌλ‘ λλλλ€.
- μ°Έμ‘° κ°λ₯ν κ°μ²΄λ₯Ό To-Spaceλ‘ λ³΅μ¬νκ³ , From-Spaceμ λ¨μ μ°λ κΈ° κ°μ²΄λ μμ ν©λλ€.
- λ³΅μ¬ κ³Όμ μμ λ©λͺ¨λ¦¬ μ‘°κ°ν(Memory Fragmentation) λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ§λ§, λ©λͺ¨λ¦¬λ₯Ό λ κ°μ μμμΌλ‘ λλμ΄μΌ νλ€λ λ¨μ μ΄ μμ΅λλ€.
π λ©λͺ¨λ¦¬ μ‘°κ°ν(Memory Fragmentation)
νλ‘κ·Έλ¨μ΄ λ©λͺ¨λ¦¬λ₯Ό ν λΉνκ³ ν΄μ νλ κ³Όμ μμ λ©λͺ¨λ¦¬ 곡κ°μ΄ μͺΌκ°μ Έ ν¨μ¨μ μΌλ‘ μ¬μ©ν μ μλ μνλ₯Ό λ§ν©λλ€.
μ΄λ λ©λͺ¨λ¦¬μ μ¬μ© κ°λ₯ν 곡κ°μ΄ μΆ©λΆν μ‘΄μ¬ν¨μλ λΆκ΅¬νκ³ , μ°μμ μΈ ν° λ©λͺ¨λ¦¬λ₯Ό ν λΉνμ§ λͺ»νλ μν©μ μ΄λν μ μμ΅λλ€.
λ©λͺ¨λ¦¬ μ‘°κ°ν(Memory Fragmentation)λ μμ€ν μ μ±λ₯ μ νμ λ©λͺ¨λ¦¬ λλΉμ μμΈμ΄ λλ©°, νΉν λμ λ©λͺ¨λ¦¬ ν λΉμ λ§μ΄ μ¬μ©νλ νλ‘κ·Έλ¨μμ μμ£Ό λ°μν©λλ€.
3οΈβ£ μΈλλ³(Generational) κ°λΉμ§ 컬λ μ .
- μλ°μ HotSpot JVMμμ μ¬μ©λλ κ°λΉμ§ 컬λ μ λ°©μμΌλ‘, κ°μ²΄μ μλͺ μ κΈ°λ°μΌλ‘ λ©λͺ¨λ¦¬λ₯Ό κ΄λ¦¬ν©λλ€.
- ν λ©λͺ¨λ¦¬(Heap Memory)λ₯Ό Young Generation, Old Generation, Permanent GenerationμΌλ‘ λλμ΄, κ°μ²΄μ μλͺ
μ λ°λΌ ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν©λλ€.
-
Young Generation
- μλ‘ μμ±λ κ°μ²΄κ° μ μ₯λλ 곡κ°μΌλ‘, λλΆλΆμ κ°μ²΄λ μ¬κΈ°μ μμ±λλ©° λΉ λ₯΄κ² μλ©Έν©λλ€.
- Minor GCκ° μ£ΌκΈ°μ μΌλ‘ λ°μνμ¬ λ©λͺ¨λ¦¬λ₯Ό ν΄μ ν©λλ€.
- μλ‘ μμ±λ κ°μ²΄κ° μ μ₯λλ 곡κ°μΌλ‘, λλΆλΆμ κ°μ²΄λ μ¬κΈ°μ μμ±λλ©° λΉ λ₯΄κ² μλ©Έν©λλ€.
-
Old Generation
- Young Generationμ κ±°μ³ μ€λ μ΄μλ¨μ κ°μ²΄κ° μ΄λνλ 곡κ°μΌλ‘, Major GCκ° λ°μνμ¬ λ©λͺ¨λ¦¬λ₯Ό ν΄μ ν©λλ€.
-
Permanent Generation(Metaspace)
- ν΄λμ€ μ 보, λ©μλ, μμ ν λ± JVMμ νμν λ©νλ°μ΄ν°λ₯Ό μ μ₯νλ 곡κ°μ
λλ€.
- Java 8 λΆν°λ MetaspaceλΌλ μλ‘μ΄ ννλ‘ κ΄λ¦¬λ©λλ€.
- ν΄λμ€ μ 보, λ©μλ, μμ ν λ± JVMμ νμν λ©νλ°μ΄ν°λ₯Ό μ μ₯νλ 곡κ°μ
λλ€.
-
Young Generation
π λ©νλ°μ΄ν°(Metadata)
λ°μ΄ν°λ₯Ό μ€λͺ νλ λ°μ΄ν°λ₯Ό μλ―Έν©λλ€.
μ¦, μ΄λ€ λ°μ΄ν°μ λν μ 보λ μμ±μ μ 곡νλ λ°μ΄ν°λ‘, μλ³Έ λ°μ΄ν°μ λ΄μ©, ꡬ쑰, νμ, μμ± λ±μ μ€λͺ νκ³ μ μνλ μν μ ν©λλ€.
λ©νλ°μ΄ν°λ λ°μ΄ν°λ₯Ό λ μ μ΄ν΄νκ³ , μ°Ύκ³ , κ΄λ¦¬ν μ μλλ‘ λμμ€λλ€.
4οΈβ£ μλ°μ κ°λΉμ§ 컬λ μ κ³Όμ .
1οΈβ£ Minor GC
-
Young Generationμμ λ°μνλ κ°λΉμ§ 컬λ μ
μ
λλ€.
- μλ‘μ΄ κ°μ²΄κ° μμ±λλ€κ° Young Generationμ΄ κ°λ μ°¨κ² λλ©΄ Minor GCκ° μ€νλμ΄ μ°Έμ‘°λμ§ μλ κ°μ²΄λ₯Ό μ κ±°ν©λλ€.
- Minor GCλ λΉ λ₯΄κ³ μμ£Ό μ€νλ©λλ€.
2οΈβ£ Major GC(Full GC)
-
Old Generationμμ λ°μνλ κ°λΉμ§ 컬λ μ
μ
λλ€.
- Young Generationμ κ±°μ³ μ€λ μ΄μλ¨μ κ°μ²΄κ° Old GenerationμΌλ‘ μ΄λνκ² λλ©°, Old Generationμ΄ κ°λ μ°¨λ©΄ Major GCκ° μ€νλ©λλ€.
- Major GCλ Minor GCμ λΉν΄ λλ¦¬κ³ , νλ‘κ·Έλ¨μ μΌμμ μΈ μ€λ¨(Stop-the-World)μ μ λ°ν μ μμ΅λλ€.
5οΈβ£ κ°λΉμ§ 컬λ μ μ μ₯λ¨μ .
1οΈβ£ μ₯μ .
-
μλ λ©λͺ¨λ¦¬ κ΄λ¦¬
- κ°λ°μκ° λ©λͺ¨λ¦¬ κ΄λ¦¬λ₯Ό μλμΌλ‘ νμ μμλ λμ΄ νλ‘κ·Έλλ°μ΄ κ°νΈν΄μ§κ³ , λ©λͺ¨λ¦¬ λμ(Memory Leak)μ λ°©μ§ν μ μμ΅λλ€.
-
ν¨μ¨μ μΈ λ©λͺ¨λ¦¬ μ¬μ©
- κ°λΉμ§ 컬λ ν°(Garbage Collector)λ λΆνμν κ°μ²΄λ₯Ό μλμΌλ‘ νμνμ¬ λ©λͺ¨λ¦¬ μ¬μ©μ μ΅μ νν©λλ€.
2οΈβ£ λ¨μ .
-
μ±λ₯ λ¬Έμ
- κ°λΉμ§ 컬λ μ (Garbage Collection)μ΄ μ€νλ λ νλ‘κ·Έλ¨μ΄ μΌμμ μΌλ‘ λ©μΆ μ μλ βStop-the-Worldβ νμμ΄ λ°μν μ μμ΅λλ€.
-
μμΈ‘ λΆκ°λ₯ν μ€ν μμ
- κ°λΉμ§ 컬λ μ (Garbage Collection)μ νΉμ μμ μ μμΈ‘ λΆκ°λ₯νκ² μ€νλλ―λ‘, μ€μκ° μ ν리μΌμ΄μ μμλ μ±λ₯μ μν₯μ μ€ μ μμ΅λλ€.
6οΈβ£ κ°λΉμ§ 컬λ μ μ μ΅μ ν λ°©λ².
1οΈβ£ JVM μ΅μ μ€μ .
-
-Xms
,-Xmx
,-Xmn
λ±μ μ¬μ©νμ¬ ν λ©λͺ¨λ¦¬ ν¬κΈ°λ₯Ό μ μ ν μ€μ ν¨μΌλ‘μ¨ κ°λΉμ§ 컬λ μ μ λΉλλ₯Ό μ‘°μ ν μ μμ΅λλ€. - μλ₯Ό λ€μ΄,
-Xms512m -Xmx1024m
μ΅μ μ JVMμ΄ μμν λ 512MBμ ν λ©λͺ¨λ¦¬(Heap Memory)λ₯Ό μ¬μ©νκ³ , μ΅λ 1024MBκΉμ§ μ¬μ©ν μ μλλ‘ μ€μ ν©λλ€.
2οΈβ£ GC μκ³ λ¦¬μ¦ μ ν.
- JVMμ λ€μν κ°λΉμ§ 컬λ ν° μκ³ λ¦¬μ¦μ μ§μνλ©°, νλ‘κ·Έλ¨μ νΉμ±μ λ§λ μκ³ λ¦¬μ¦μ μ ννλ©΄ μ±λ₯μ μ΅μ νν μ μμ΅λλ€.
- μ: Serial GC, Paralle GC, G1 GC λ±. G1 GCλ Stop-the-World νμμ μ΅μννλ λ° μ 리ν©λλ€.
3οΈβ£ λ©λͺ¨λ¦¬ λμ μλ°©.
- κ°λΉμ§ 컬λ ν°(Garbage Collector)κ° λ©λͺ¨λ¦¬λ₯Ό μλμΌλ‘ κ΄λ¦¬νμ§λ§, λͺ μμ μΌλ‘ ν΄μ ν μ μλ 리μμ€(νμΌ νΈλ€, λ°μ΄ν° λ² μ΄μ€ μ°κ²° λ±)λ μ½λμμ μ§μ κ΄λ¦¬ν΄μΌ ν©λλ€.
-
μ μ λ³μλ static κ°μ²΄λ‘ μΈν λ©λͺ¨λ¦¬ λμ(Memory Leak)λ₯Ό μ£Όμν΄μΌ ν©λλ€.
- μ΄λ¬ν κ°μ²΄κ° μ°Έμ‘°λ₯Ό μ μ§νκ³ μμΌλ©΄ κ°λΉμ§ 컬λ ν°(Garbage Collector)λ λ©λͺ¨λ¦¬λ₯Ό ν΄μ νμ§ μμ΅λλ€.
7οΈβ£ μμ½.
- κ°λΉμ§ 컬λ μ (Garbage Collection)μ μλ°μ κ°μ νλ‘κ·Έλλ° μΈμ΄μμ μ¬μ©λμ§ μμ κ°μ²΄λ₯Ό μλμΌλ‘ λ©λͺ¨λ¦¬μμ ν΄μ νμ¬ λ©λͺ¨λ¦¬ λμ(Memory Leak)λ₯Ό λ°©μ§νλ λ©λͺ¨λ¦¬ κ΄λ¦¬ κΈ°λ²μ λλ€.
- κ°λΉμ§ 컬λ ν°(Garbage Collector)λ μ£ΌκΈ°μ μΌλ‘ μ€νλμ΄, μ°Έμ‘°λμ§ μλ κ°μ²΄λ₯Ό κ°μ§νκ³ λ©λͺ¨λ¦¬λ₯Ό νμν©λλ€.
- μλ°μμλ μΈλλ³ κ°λΉμ§ 컬λ μ (Garbage Collection)μ ν΅ν΄ κ°μ²΄μ μλͺ μ λ°λΌ λ©λͺ¨λ¦¬λ₯Ό ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν©λλ€.
- κ°λΉμ§ 컬λ μ λλΆμ κ°λ°μλ λ©λͺ¨λ¦¬ κ΄λ¦¬μ λν λΆλ΄μ λκ³ , λ μμ μ μ΄κ³ ν¨μ¨μ μΈ νλ‘κ·Έλ¨μ μμ±ν μ μμ΅λλ€.