Garbage Collection - accidentlywoo/legacyVue GitHub Wiki
Garbage Collection
Minor GC
μλ‘ μμ±λ λλΆλΆμ κ°μ²΄(Instance)λ Eden μμμ μμΉνλ€. Edenμμμμ GCκ° ν λ² λ°μν ν μ΄μλ¨μ κ°μ²΄λ Suvivor μμ μ€ νλλ‘ μ΄λλλ€. μ΄ κ³Όμ μ λ°λ³΅νλ€κ° κ³μν΄μ μ΄μλ¨μ μλ κ°μ²΄λ μΌμ μκ° μ°Έμ‘°λκ³ μλ€λ λ»μ΄λ―λ‘ OldμμμΌλ‘ μ΄λμν¨λ€.
Major GC
Old μμμ μλ λͺ¨λ κ°μ²΄λ€μ κ²μ¬νμ¬ μ°Έμ‘°λμ§ μμ κ°μ²΄λ€μ νκΊΌλ²μ μμ νλ€. μκ°μ΄ μ€λ κ±Έλ¦¬κ³ μ€ν μ€ νλ‘μΈμ€κ° μ μ§λλ€. μ΄κ²μ 'stop-the-world'λΌκ³ νλλ° Major Gcκ° λ°μνλ©΄ GCλ₯Ό μ€ννλ μ€λ λλ₯Ό μ μΈν λλ¨Έμ§ μ€λ λλ λͺ¨λ μμ μ λ©μΆλ€. GCμμ μ μλ£ν μ΄νμμΌ μ€λ¨νλ μμ μ λ€μ μμνλ€.
κ°λΉμ§ 컬λ μ μ μ΄λ€ μλ¦¬λ‘ μλͺ μν¬ λμμ μ μ νλκ°?
μκ³ λ¦¬μ¦μ λ°λΌ λμ λ°©μμ΄ λ§€μ° λ€μνμ§λ§ 곡ν΅μ μΈ μλ¦¬κ° μλ€. Garbage Collectorλ ν λ΄μ κ°μ²΄ μ€μμ κ°λΉμ§(Garbage)λ₯Ό μ°Ύμλ΄κ³ μ°ΎμλΈ κ°λΉμ§λ₯Ό μ²λ¦¬ν΄μ νμ λ©λͺ¨λ¦¬λ₯Ό νμνλ€. μ°Έμ‘°λκ³ μμ§ μμ κ°μ²΄(Intance)λ₯Ό κ°λΉμ§λΌκ³ νλ©° κ°μ²΄κ° κ°λΉμ§μΈμ§ μλμ§ νλ¨νκΈ° μν΄μ reachabilityλΌλ κ°λ μ μ¬μ©νλ€. μ΄λ€ ν μμμ ν λΉλ κ°μ²΄κ° μ ν¨ν μ°Έμ‘°κ° μμΌλ©΄ reachability ,μλ€λ©΄ unreachability λ‘ νλ¨νλ€. νλμ κ°μ²΄λ λ€λ₯Έ κ°μ²΄λ₯Ό μ°Έμ‘°νκ³ , λ€λ₯Έ κ°μ²΄λ λ λ€λ₯Έ κ°μ²΄λ₯Ό μ°Έμ‘°ν μ μκΈ° λλ¬Έμ μ°Έμ‘° μ¬μ¬μ΄ νμ±μ΄ λλλ°, μ΄ μ°Έμ‘° μ¬μ¬ μ€ μ΅μ΄μ μ°Έμ‘°ν κ²μ Root Setμ΄λΌκ³ μΉνλ€. ν μμμ μλ κ°μ²΄λ€μ μ΄ 4κ°μ§μ λν μ°Έμ‘°λ₯Ό νκ² λλ€.
-
- ν λ΄μ λ€λ₯Έ κ°μ²΄μ μν μ°Έμ‘°
-
- Javaμ€ν, μ¦ Javaλ©μλ μ€ν μμ μ¬μ©νλ μ§μλ³μμ νλΌλ―Έν°λ€μ μν μ°Έμ‘°
-
- λ€μ΄ν°λΈ μ€ν(JNI,Java Native Interface)μ μν΄ μμ±λ κ°μ²΄μ λν μ°Έμ‘°
-
- λ©μλ μμμ μ μ λ³μμ μν μ°Έμ‘° 2,3,4λ Root Setμ΄λ€. μ¦ μ°Έμ‘° μ¬μ¬ μ€ μ΅μ΄μ μ°Έμ‘°ν κ²μ΄λ€.
μΈμ€ν΄μ€κ° κ°λΉμ§ 컬λ μ μ λμμ΄ λμλ€κ³ ν΄μ λ°λ‘ μλ©Έμ΄ λλ κ²μ μλλ€. λΉλ²ν κ°λΉμ§ 컬λ μ μ μ€νμ μμ€ν μ λΆλ΄μ΄ λ μ μκΈ°μ μ±λ₯μ μν₯μ λ―ΈμΉμ§ μλλ‘ κ°λΉμ§ 컬λ μ μ€ν νμ΄λ°μ λ³λμ μκ³ λ¦¬μ¦μ κΈ°λ°μΌλ‘ κ³μ°μ΄ λλ©°, μ΄ κ³μ°κ²°κ³Όλ₯Ό κΈ°λ°μΌλ‘ κ°λΉμ§ 컬λ μ μ΄ μνλλ€.
Serial GC
Old μμμ GCλ mark-sweep-compact λΌλ μκ³ λ¦¬μ¦μ μ¬μ©νλ€. μ΄ μκ³ λ¦¬μ¦μ 첫 λ¨κ³λ Old μμμ μ΄μμλ κ°μ²΄λ₯Ό μλ³(Mark)νλ κ²μ΄λ€. κ·Έ λ€μμλ ν(Heap)μ μ λΆλΆλΆν° νμΈνμ¬ μ΄μμλ κ²λ§ λ¨κΈ΄λ€(Sweep). λ§μ§λ§ λ¨κ³μμλ κ° κ°μ²΄λ€μ΄ μ°μλκ² μμ΄λλ‘ νμ κ°μ₯ μ λΆλΆλΆν° μ±μμ κ°μ²΄κ° μ‘΄μ¬νλ λΆλΆκ³Ό κ°μ²΄κ° μλ λΆλΆμΌλ‘ λλλ€. λ§μ§λ§μ Compactionμ΄λΌ νλ€.
Parallel GC
κΈ°λ³Έμ μΈ GC μκ³ λ¦¬μ¦μ Serial GCμ λμΌνμ§λ§ Parallel GCλ GCλ₯Ό μ²λ¦¬νλ μ€λ λκ° μ¬λ¬ κ°λΌμ λ³΄λ€ λΉ λ₯Έ GCλ₯Ό μνν μ μλ€. λ©λͺ¨λ¦¬κ° μΆ©λΆνκ³ μ½μ΄μ κ°μκ° λ§μ λ μ 리νλ€.
Parallel Old GC(Parallel Compacting GC)
JDK 5 update 6λΆν° μ 곡ν GCλ°©μμ΄λ€. λ³λλ‘ μ΄μμλ κ°μ²΄λ₯Ό μλ³νλ€λ λΆλΆμμ λ³΄λ€ λ³΅μ‘ν λ¨κ³λ‘ μνλλ€.
- Concurrent Mark & Sweep GC(μ΄ν CMS)
- G1(Garbage First) GC