ARC가 메모리 영역 중 힙 영역을 관리하는 특징을 가지고 있습니다.
일단 리마인드하면 인스턴스,클로저 등등 참조 타입(Reference Tyoe)은 자동으로 힙에 할당 됩니다.
class Human {
var name: String?
var age: Int?
init(name: String?, age: Int?) {
self.name = name
self.age = age
}
}
let sodeul = Human(name: "Sodeul", age: 26)
human이라는 클래스가 있고 sodeul이라는 인스턴스를 생성하고 값을 초기화 하였습니다.
일단 여기서 변수가 전역 변수로 보이겠지만 일단 보통 개발 하듯이 클래스에 생성된 지역 변수라고 생각해줍시다.
지역 변수 sodeul은 스택에 할당 되고 실제 Human의 인스턴스는 힙에 할당됩니다.
스택에 있는 sodeul은 힙 영역에 있는 인스턴스를 참조하는 형태이고 따라서 sodeul안에 힙에 할당된 인스턴스 주소값이 들어가게 됩니다.
let clone = sodeul
이라는 코드를 작성하는 인스턴스가 복사되지는 않습니다.
이렇게 같은 힙 영역의 인스턴스를 가르키고 있습니다.
근데 힙의 특징 중에 사용하고 난 후에는 반드시 메모리 해제를 해줘야 한다라도 나와있습니다.
여기서 이제 ARC의 개념이 나오게 됩니다.
일단, ARC의 정의를 알고 가도록 하겠습니다. ARC는 클래스 인스턴스가 더 이상 필요하지 않을 때 메모리를 자동으로 해제해준다. ->
ARC란, 힙에 할당된 인스턴스의 메모리를 알아서 관리를 해준다 라는 의미를 가지게 됩니다
다음으로 힙 영역의 메모리를 관리하는 방법으로 GC와 RC에 대하여 알아 보도록 합시다. 일단 GC의 대표는 자바가 있습니다.
GC | RC | |
참조 계산 시점 | Run Time - 어플 실행 동안 주기적으로 참조를 추적하여 사용하지 않는 instance를 해제함 |
Complie Time -컴파일 시점에 언제 참조되고 해제되는지 결정되어 런타임 떄 그대로 실행됨 |
장점 | - 인스턴스가 해제될 확률이 높다 | - 개발자가 참조 해제 시점을 파악 할 수 있다 - RunTime 시점에 추가 리소스가 발생하지 않는다 |
단점 | - 개발자가 참조 해제 시점을 파악 할 수가 없다 - RunTime 시점에 계속 추적하는 추가 리소스가 필요하여 성능저하가 발생할수 있다. |
- 순환 참조가 발생 시 메모리가 해제되지 않을 수가 있다. |
'CS > 운영체제' 카테고리의 다른 글
[운영체제] 1. 운영체제란? (0) | 2022.05.29 |
---|---|
[운영체제] System Call (0) | 2022.05.24 |
[운영체제] 인터럽트(Interrupt) (0) | 2022.05.24 |
[운영체제] 프로세스의 주소 공간 (0) | 2022.05.24 |
[운영체제] 메모리 구조(Code,Data,Stack,Heap)은 무엇일까? (0) | 2022.05.05 |