ARC vs GC

JJUDEV·2023년 6월 20일
2

Swift

목록 보기
5/15
post-thumbnail

* ARC(Automatic Reference Counting) vs GC(Garbage Collection)

오늘은 메모리 관리의 핵심인 ARC, GC를 비교한 글을 올리고자 합니다!
이 두가지를 비교하는 질문은 면접 단골 질문 중의 하나이기도 하답니다 :)

ARC (Automatic Reference Counting) 설명을 하자면 사실, Strong/Weak/Unowned 키워드부터 시작해야 하는데요, 여기선 간략하게 다루고 다음에 포스팅하도록 하겠습니다.

Strong/Weak/Unowned

Outlet 연결시 Strong/Weak/Unowend 키워드는 메모리 회수 정책을 나타내는 키워드입니다. 이 중, Weak/Unowned의 경우 참조 계수(Reference Count)를 증가시키지 않습니다.

ARC(Automatic Reference Counting)

ARC는 iOS에서 앱의 메모리 사용을 컴파일 타임에서 자동으로 추적하고 관리해주는 기술입니다. Reference Count를 추적하여 0이 되면 메모리에서 해제하며 예전 Objective-C(iOS 5 이전)에서 개발자가 직접 retain/release 코드 작성하여 참조 계수를 증가/감소시키던 것을 자동으로 해주는 것입니다.

GC(Garbage Collection)

JAVA의 메모리 관리 방법 중 하나로, Garbage Collector라는 것이 런타임에 주기적으로 참조를 추적하여 사용하지 않는 메모리를 해제하는 것입니다. garbage라는 것은 참조가 0이 된 메모리 영역을 의미합니다.

그렇다면, 둘의 차이점은 뭘까요? ARC vs GC ?

ARC와 GC는 모두 메모리 관리를 해주는 녀석들입니다. 그럼 무슨 차이가 있을까요? 가장 큰 차이점은 참조를 계산하는 시점입니다. ARC는 컴파일 타임에, 그리고 GC는 런타임에 동작합니다. 그로 인해서 두 방식의 장/단점이 생기게 됩니다.

ARC

  • 컴파일 타임에 컴파일러가 iOS5 이전 Objective-C에서 개발자가 retain/release 코드 작성하던 것을 실행파일에 자동으로 삽입합니다.
  • 런타임에 계속 추적하는 추가 리소스가 들지 않으므로 성능 저하가 없습니다.
  • 두 개 이상의 객체가 상호 참조하는 경우 강한 순환 참조가 되어 메모리 누수가 발생할 수 있습니다.
    (ARC는 강한 참조가 남아 있는 이상 메모리에서 해제하지 않기 때문에, 영원히 해제되지 않을 수 있습니다.)

GC

  • 런타임 시점에 주기적ㅇ으로 작동하며 불확실한 간격으로 발생하여 release 시점을 정확히 알 수 없습니다.
  • 런타임 시점에 계속 추적하는 리소스가 필요하여 성능 저하가 발생할 수 있습니다.
  • 인스턴스가 해제될 확률이 높습니다. (ARC에 비해)

이상 마칩니다 :)

참고자료

profile
4년차 앱개발자입니다.

0개의 댓글