가비지 컬렉션이란 ?

sonny·2024년 11월 16일
2

개발 지식이 통통

목록 보기
11/11

가비지 컬렉션(Garbage Collection)은 프로그램에서 더 이상 사용되지 않는 메모리 공간을 자동으로 해제하는 기술이다.

이 기술은 메모리 관리를 자동으로 처리하여 프로그래머가 수동으로 메모리를 해제할 필요가 없도록 돕는다.

가비지 컬렉션은 프로그램이 실행되는 동안 메모리를 효율적으로 관리하고, 메모리 누수를 방지하는 데 중요한 역할을 한다.

가비지 컬렉션의 동작 원리

가비지 컬렉션은 일반적으로 참조 추적 또는 마크-스윕(Mark-Sweep) 알고리즘을 사용하여,

더 이상 사용되지 않는 객체를 찾아 메모리에서 해제한다.

  1. 참조 추적(Reference Counting):

    • 객체마다 참조 카운트를 두고, 객체가 참조될 때마다 카운트가 증가하며, 참조가 끊어지면 카운트가 감소한다.
    • 카운트가 0이 된 객체는 더 이상 참조되지 않으므로, 해당 객체의 메모리가 해제된다.
  2. 마크-스윕(Mark-Sweep) 알고리즘:

    • 마크 단계 : 프로그램에서 활성 객체를 찾아 마크한다.
    • 스윕 단계 : 마크되지 않은 객체는 더 이상 필요하지 않다고 판단하여 메모리에서 해제된다.
  3. 압축(Compaction):

    • 메모리 단편화를 해결하기 위해, 가비지 컬렉터는 빈 공간을 모아서 새로운 객체가 빠르게 할당될 수 있도록 한다.

가비지 컬렉션의 장점

  1. 자동 메모리 관리 : 프로그래머가 메모리를 수동으로 관리하지 않아도 되며, 이는 코드의 간결함과 안정성을 높인다.
  2. 메모리 누수 방지 : 객체가 더 이상 사용되지 않으면 자동으로 메모리를 해제하여 메모리 누수를 예방한다.
  3. 개발 효율성 증가 : 메모리 관리의 부담이 줄어들어, 개발자는 비즈니스 로직에 집중할 수 있다.

가비지 컬렉션의 단점

  1. 성능 저하 : 가비지 컬렉션이 백그라운드에서 동작하면서 잠깐의 성능 저하를 초래할 수 있다.

  2. 예측 불가능한 실행 시간 : 가비지 컬렉션이 언제 실행될지 예측하기 어려워, 실시간 시스템에서 문제가 될 수 있다.

  3. 메모리 사용 증가 : 가비지 컬렉션이 메모리 추적과 관리에 추가적인 자원을 소모하므로, 전체적인 메모리 사용량이 증가할 수 있다.

Swift의 ARC (Automatic Reference Counting)

Swift에서는 ARC(Automatic Reference Counting)라는 방식으로 가비지 컬렉션을 구현하고 있다.

ARC는 객체의 참조 카운트를 추적하여, 객체가 더 이상 필요 없을 때 자동으로 메모리를 해제한다.

  • 강한 참조(strong reference)는 객체를 메모리에서 유지하며, 참조가 더 이상 없으면 객체는 메모리에서 해제된다.
  • 순환 참조(retain cycles)를 방지하기 위해 약한 참조(weak reference)와 미약한 참조(unowned reference)를 사용하여 메모리를 안전하게 관리한다.

결론

가비지 컬렉션은 메모리 관리의 복잡성을 줄여 주고, 프로그램의 안정성을 높이는 중요한 기술이다.

자동으로 메모리 해제를 처리함으로써 메모리 누수 문제를 예방할 수 있지만,

성능 저하나 예측 불가능한 동작이 있을 수 있어 이를 고려하여 적절하게 관리하는 것이 필요하다.

profile
iOS 좋아. swift 좋아.

0개의 댓글