C#μμμ κ°λΉμ§ 컬λ ν° λμ μ리μ λ©λͺ¨λ¦¬ κ΄λ¦¬
C# λ©λͺ¨λ¦¬ ꡬ쑰: ν(Heap)κ³Ό μ€ν(Stack)
C#μμ λ©λͺ¨λ¦¬ κ΄λ¦¬λ ν¬κ² λ κ°μ§ μμμΌλ‘ λλ©λλ€: μ€ν(Stack)κ³Ό ν(Heap)μ λλ€. μ΄ λ μμμ μλ‘ λ€λ₯Έ λ°©μμΌλ‘ λ©λͺ¨λ¦¬λ₯Ό κ΄λ¦¬νλ©°, κ°λΉμ§ 컬λ ν°λ μ£Όλ‘ ν(Heap) λ©λͺ¨λ¦¬λ₯Ό κ΄λ¦¬νλ μν μ ν©λλ€.
1. μ€ν μμ(Stack)
μ€νμ ν¨μ νΈμΆ μ μ§μ λ³μμ λ§€κ° λ³μλ₯Ό μ μ₯νλ λ©λͺ¨λ¦¬ 곡κ°μ λλ€. μ€νμ μ μ₯λλ λ°μ΄ν°λ μ»΄νμΌ νμμ ν¬κΈ°κ° κ²°μ λλ κ° νμ (Value Type)μ λλ€. μλ₯Ό λ€μ΄ int, float, bool, structμ κ°μ κ° νμ μ λͺ¨λ μ€νμ μ μ₯λ©λλ€.
- LIFO(Last In, First Out) ꡬ쑰λ‘, λ§μ§λ§μ λ€μ΄κ° λ°μ΄ν°κ° κ°μ₯ λ¨Όμ λμ΅λλ€.
- ν¨μκ° νΈμΆλ λ μ€νμ λ©λͺ¨λ¦¬κ° ν λΉλκ³ , ν¨μκ° μ’ λ£λλ©΄ ν΄λΉ λ©λͺ¨λ¦¬κ° μλμΌλ‘ ν΄μ λ©λλ€.
- λ©λͺ¨λ¦¬ κ΄λ¦¬κ° λ§€μ° λΉ λ₯΄κ³ κ°λ¨νμ§λ§, νμ λ ν¬κΈ°λ₯Ό κ°μ§λ©°, 볡μ‘ν κ°μ²΄λ₯Ό μ μ₯νκΈ°μλ μ ν©νμ§ μμ΅λλ€.
2. ν μμ(Heap)
νμ μ£Όλ‘ μ°Έμ‘° νμ (Reference Type) λ°μ΄ν°λ₯Ό μ μ₯νλ μμμ λλ€. ν΄λμ€ κ°μ²΄, λ°°μ΄, λΈλ¦¬κ²μ΄νΈ, λ¬Έμμ΄ κ°μ μ°Έμ‘° νμ μ νμ μ μ₯λλ©°, μ΄λ€μ λν μ°Έμ‘°(ν¬μΈν°)κ° μ€νμ μ μ₯λ©λλ€.
- νμ λμ λ©λͺ¨λ¦¬ ν λΉμ΄ μΌμ΄λλ κ³³μΌλ‘, ν¬κΈ°μ μλͺ μ΄ μ λμ μΈ λ°μ΄ν°λ₯Ό μ μ₯ν©λλ€.
- μ°Έμ‘° νμ μ΄ μμ±λλ©΄ νμ λ©λͺ¨λ¦¬κ° ν λΉλκ³ , ν΄λΉ λ©λͺ¨λ¦¬μ μ£Όμκ° μ€νμ μ μ₯λ©λλ€. μ΄ μ£Όμλ₯Ό ν΅ν΄ μ°Έμ‘° νμ κ°μ²΄μ μ κ·Όν μ μμ΅λλ€.
- νμ μ μ₯λ κ°μ²΄λ λͺ μμ μΌλ‘ ν΄μ λμ§ μμΌλ©°, μ¬μ©λμ§ μκ² λλ©΄ κ°λΉμ§ 컬λ ν°κ° μ΄λ₯Ό μλμΌλ‘ μ 리ν©λλ€.
κ°λΉμ§ 컬λ ν°(Garbage Collector)μ λμ μ리
κ°λΉμ§ 컬λ ν°λ ν μμμμ μ¬μ©λμ§ μλ κ°μ²΄λ₯Ό μ°Ύμ μλμΌλ‘ λ©λͺ¨λ¦¬λ₯Ό νμνλ μν μ ν©λλ€. μ΄λ κ°λ°μκ° μ§μ λ©λͺ¨λ¦¬ ν΄μ λ₯Ό μ κ²½ μΈ νμ μμ΄, νλ‘κ·Έλ¨μ΄ μ’ λ£λκ±°λ λ©λͺ¨λ¦¬ λΆμ‘± μν©μμ λ©λͺ¨λ¦¬κ° λμ λλ κ²μ λ°©μ§ν΄ μ€λλ€.
μΈλλ³(Generational) κ°λΉμ§ 컬λ μ
C#μ κ°λΉμ§ 컬λ ν°λ μΈλ(Generation) κ°λ μ λμ νμ¬, κ°μ²΄μ μλͺ μ£ΌκΈ°μ λ°λΌ λ€λ₯Έ λ°©μμΌλ‘ λ©λͺ¨λ¦¬λ₯Ό κ΄λ¦¬ν©λλ€. κ°λΉμ§ 컬λ ν°λ μΈ κ°μ§ μΈλλ‘ λλμ΄ κ°μ²΄λ₯Ό κ΄λ¦¬ν©λλ€.
- μΈλ 0 (Generation 0): μλ‘κ² ν λΉλ κ°μ²΄λ€μ΄ μ μ₯λ©λλ€. μΈλ 0μ κ°μ₯ λΉ λ₯΄κ² μμ§λλ©°, μλͺ μ΄ μ§§μ κ°μ²΄λ€μ΄ μ£Όλ‘ μ΄ μμμ ν λΉλ©λλ€. μΌμμ μΌλ‘ μ¬μ©λλ λ§μ κ°μ²΄λ€μ μΈλ 0μμ λ©λͺ¨λ¦¬κ° νμλ©λλ€.
- μΈλ 1 (Generation 1): μΈλ 0μ κ°λΉμ§ 컬λ μ μμ μ΄μλ¨μ κ°μ²΄λ€μ΄ μ΄κ³³μΌλ‘ μ΄λν©λλ€. λ³΄ν΅ μ€κ° μλͺ μ κ°μ²΄λ€μ΄ μ¬κΈ°μ μν©λλ€.
- μΈλ 2 (Generation 2): μ¬λ¬ λ²μ κ°λΉμ§ 컬λ μ μμ μ΄μλ¨μ μ₯κΈ° κ°μ²΄λ€μ΄ μ΄κ³³μ μμ΅λλ€. κΈ΄ μλͺ μ κ°μ§ κ°μ²΄λ€, μλ₯Ό λ€μ΄ μ ν리μΌμ΄μ μ λ°μ κ±Έμ³ μ¬μ©λλ κ°μ²΄λ μΈλ 2μ 머무λ₯΄κ² λ©λλ€.
κ°λΉμ§ 컬λ μ κ³Όμ
- 루νΈ(Root) νμ: κ°λΉμ§ 컬λ ν°λ λ¨Όμ νλ‘κ·Έλ¨μ λ£¨νΈ κ°μ²΄, μ¦ μ€ν, CPU λ μ§μ€ν°, μ μ λ³μ λ±μ λ£¨νΈ μ°Έμ‘°λ₯Ό μ°Ύμλ λλ€. μ΄ λ£¨νΈ κ°μ²΄λ€μ μ΄μ μλ κ°μ²΄λ€μ μ°Έμ‘°ν μ μμ΅λλ€.
- κ°μ²΄ κ·Έλν μΆμ : λ£¨νΈ μ°Έμ‘°μμ μ°κ²°λ λͺ¨λ κ°μ²΄λ€μ νμνμ¬ μ¬μ© μ€μΈ κ°μ²΄λ₯Ό μΆμ ν©λλ€. μ΄λ¬ν κ°μ²΄λ€μ κ°λΉμ§ 컬λ μ λμμμ μ μΈλ©λλ€.
- μ¬μ©λμ§ μλ κ°μ²΄(κ°λΉμ§) μλ³: λ£¨νΈ μ°Έμ‘°μμ λλ¬ν μ μλ κ°μ²΄λ λ μ΄μ μ¬μ©λμ§ μλ κ°μ²΄λ‘ κ°μ£Όλλ©°, κ°λΉμ§λ‘ μλ³λ©λλ€.
- λ©λͺ¨λ¦¬ νμ: κ°λΉμ§λ‘ μλ³λ κ°μ²΄λ€μ λ©λͺ¨λ¦¬λ ν΄μ λμ΄ λ€μ μ¬μ© κ°λ₯ν μνλ‘ λ°νλ©λλ€. λ©λͺ¨λ¦¬κ° ν΄μ λλ κ³Όμ μμ **μ’ λ£μ(Finalizer)**κ° νΈμΆλ μ μμΌλ©°, μ΄ μ’ λ£μλ κ°μ²΄κ° ν΄μ λκΈ° μ μ νΉλ³ν μμ μ μνν μ μμ΅λλ€.
μΈλλ³ μμ§ μ λ΅
- μΈλ 0 μμ§: κ°λΉμ§ 컬λ ν°λ μΈλ 0μ μμ£Ό μμ§ν©λλ€. μ΄λ 짧μ μλͺ μ κ°μ²΄λ€μ΄ μ΄ μμμ μ§μ€λκΈ° λλ¬Έμ λλ€. λλΆλΆμ κ°μ²΄λ μΈλ 0μμ μμ±λκ³ , κ°λΉμ§ 컬λ μ μ ν΅ν΄ 곧λ°λ‘ λ©λͺ¨λ¦¬μμ ν΄μ λ©λλ€.
- μΈλ 1 λ° 2 μμ§: μΈλ 0μμ κ°λΉμ§ 컬λ μ μ΄ λ°λ³΅λλ©΄μ μ΄μλ¨μ κ°μ²΄λ μΈλ 1, κ·Έ νμλ μΈλ 2λ‘ μ΄λν©λλ€. μΈλ 2λ κ°μ₯ μ€λλ κ°μ²΄λ€μ΄ 머무λ μμμ΄λ―λ‘, μΈλ 0μ λΉν΄ λ μμ£Ό μμ§λ©λλ€.
μ΄λ¬ν μΈλλ³ μμ§ μ λ΅μ ν΅ν΄, κ°λΉμ§ 컬λ ν°λ μμ£Ό μ¬μ©λλ κ°μ²΄λ λΉ λ₯΄κ² μμ§νλ©΄μλ μ₯κΈ°μ μΌλ‘ μ¬μ©λλ κ°μ²΄λ μμ§ λΉλλ₯Ό μ€μμΌλ‘μ¨ μ±λ₯μ μ΅μ νν©λλ€.
κ°λΉμ§ 컬λ ν°μ λμ μμ
κ°λΉμ§ 컬λ μ μ λ€μκ³Ό κ°μ μμ μ μ€νλ©λλ€.
- λ©λͺ¨λ¦¬ λΆμ‘±: ν μμμ λ μ΄μ κ°μ²΄λ₯Ό μ μ₯ν 곡κ°μ΄ λΆμ‘±ν λ.
- κ°λΉμ§ 컬λ μ μ΄ νμνλ€κ³ νλ¨λ λ: μ ν리μΌμ΄μ μ΄ λ©λͺ¨λ¦¬λ₯Ό μ§λμΉκ² λ§μ΄ μ¬μ©νκ³ μμ λ.
- λͺ μμ μΈ νΈμΆ: κ°λ°μκ° GC.Collect()λ₯Ό νΈμΆνμ¬ κ°λΉμ§ 컬λ μ μ κ°μ λ‘ μ€νν λ.
κ°λΉμ§ 컬λ ν°λ μ΅μ μ μ±λ₯μ μν΄ λΉλκΈ°λ‘ μ€νλ©λλ€. μ¦, νλ‘κ·Έλ¨μ μ€νκ³Ό λ³λλ‘ κ°λΉμ§ 컬λ μ μ΄ μνλμ΄, λ©λͺ¨λ¦¬ κ΄λ¦¬λ₯Ό μν΄ νλ‘κ·Έλ¨μ μ±λ₯μ μ§μ μ μΈ μν₯μ μ£Όμ§ μλλ‘ ν©λλ€. κ·Έλ¬λ κ°λΉμ§ 컬λ μ μ΄ λ°μν λλ μ μ μ€ν μ€μΈ νλ‘κ·Έλ¨μ λͺ¨λ μ€λ λλ₯Ό λ©μΆκ³ λ©λͺ¨λ¦¬ μ 리λ₯Ό μννκΈ° λλ¬Έμ, μ±λ₯μ΄ μ€μν μ ν리μΌμ΄μ μμλ κ°λΉμ§ 컬λ μ μ λ°μ μμ μ μ κ΄λ¦¬ν΄μΌ ν©λλ€.
νμ μΈλΆ ꡬ쑰
C#μ ν λ©λͺ¨λ¦¬λ λ¨μν νλμ 곡κ°μΌλ‘ ꡬμ±λμ§ μμΌλ©°, **ν° κ°μ²΄ ν(LOH, Large Object Heap)**κ³Ό **μν κ°μ²΄ ν(SOH, Small Object Heap)**μΌλ‘ λλ©λλ€.
- μν κ°μ²΄ ν(Small Object Heap, SOH): ν¬κΈ°κ° μκ³ μμ£Ό μ¬μ©λλ κ°μ²΄λ€μ΄ μ μ₯λ©λλ€. μΌλ°μ μΌλ‘ ν¬κΈ°κ° 85,000λ°μ΄νΈ λ―Έλ§μΈ κ°μ²΄λ μν κ°μ²΄ νμ ν λΉλ©λλ€.
- ν° κ°μ²΄ ν(Large Object Heap, LOH): ν¬κΈ°κ° ν° κ°μ²΄(85,000λ°μ΄νΈ μ΄μ)κ° ν λΉλλ ν μμμ λλ€. ν° κ°μ²΄λ μν κ°μ²΄μ λ¬λ¦¬ κ°λΉμ§ 컬λ μ μ μ±λ₯μ λ ν° μν₯μ λ―ΈμΉκΈ° λλ¬Έμ, LOHλ κ°λΉμ§ 컬λ ν°κ° λ μ μ€νκ² κ΄λ¦¬ν©λλ€.
LOHλ μΈλλ³ κ΄λ¦¬κ° μ μ©λμ§ μκ³ , μμ§μ΄ λ°μν λλ§λ€ μ£ΌκΈ°μ μΌλ‘ μ 리λ©λλ€. μ΄λ ν° κ°μ²΄μ μμ§ λΉμ©μ΄ λ ν¬κΈ° λλ¬Έμ μ±λ₯μ λ―ΈμΉλ μν₯μ μ΅μννκΈ° μν λ°©λ²μ λλ€.
κ²°λ‘
C#μ κ°λΉμ§ 컬λ ν°λ ν λ©λͺ¨λ¦¬μμ μ¬μ©λμ§ μλ κ°μ²΄λ₯Ό μλμΌλ‘ νμνμ¬ λ©λͺ¨λ¦¬ λμλ₯Ό λ°©μ§νλ μ€μν μν μ ν©λλ€. μ€νκ³Ό νμ ꡬλΆ, μΈλλ³ κ°λΉμ§ 컬λ μ μ λ΅, κ·Έλ¦¬κ³ νΉμ μμ μμ μλμΌλ‘ κ°λΉμ§ 컬λ μ μ μ μ΄νλ λ°©λ²μ μ΄ν΄νλ©΄, λ λμ λ©λͺ¨λ¦¬ κ΄λ¦¬μ μ±λ₯ μ΅μ νλ₯Ό μ΄λ£° μ μμ΅λλ€.
κ°λΉμ§ 컬λ ν°λ μλμΌλ‘ λμνμ§λ§, νλ‘μ νΈμ μ±κ²©μ λ°λΌ μ΄λ₯Ό μ μ ν μ μ΄νκ±°λ 컀μ€ν°λ§μ΄μ§ν μ μλ λ₯λ ₯μ C# κ°λ°μλ‘μ μ€μν μλμ λλ€.
'Develop' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μ€νλΌμΈ νκ²½μμ Git μ¬μ© λ°©λ²: SSHλ‘ μ격 μ μ₯μ μ κ·ΌνκΈ° (0) | 2024.11.05 |
---|---|
[ Python ] dataclass μμΈν μμ보기 (0) | 2024.11.03 |
Object-Oriented Programming ) Overroading,Override , Extend ? (0) | 2020.04.09 |