나의 발자취

WWDC18: iOS Memory Deep Dive 본문

앱 개발/iOS

WWDC18: iOS Memory Deep Dive

달모드 2022. 5. 9. 21:52

iOS의 메모리 관리 기법에 대해 더 깊게 알아보고, 정리를 해보고 싶어서 듣게 되었다.

세 명의 엔지니어들이 10분정도씩 돌아가며 설명을 해준다.

Memory Footprint

iOS 에서 어떻게 메모리를 관리하는지 설명하는 부분인데, 일단 메모리는 크게 Clean, Dirty, Compressed로 명칭이 나뉜다. (Clean <-> Dirty, Dirty가 압축되면 Compressed)

메모리 공간을 나눠서 세는 단위(?)를 page라고 하는데 각각 클린 메모리에는 뭐가 들어가고, 더티 메모리는 뭐가 해당된다고 설명하는 부분이다. 우리가 흔히 메모리를 사용하게 되는 앱은 더티 메모리에 해당된다.

메모리를 절약하기에 좋은 방법은 Singleton, Global Initializers이다. 싱글턴의 경우 한번 생성되면 계속 메모리에 남아있으므로 메모리를 아끼는데에 좋다.

예를 들어 딕셔너리를 사용해서 이것이 더티 메모리가 되었다고 치면, 이것을 오랫동안 사용하지 않을 때 compressed memory가 되고 2페이지의 여유 메모리를 확보하게 된다. 미래의 어느 시점에 다시 딕셔너리를 사용하게 된다면 다시금 늘어난다.

하지만 확실히, 캐싱을 많이 하는 것은 메모리와 CPU의 tradeoff이므로 많이 하면 좋지 않다. 메모리의 한계에 접근하게 되면 EXC_RESOURCE_EXCEPTION 이 뜨게 된다.

메모리의 footprint를 추적할 때는 Dirty, Compressed만 포함된다. 우리가 footprint를 프로파일링하는것은 이제 다른 엔지니어가 설명해주신다.

Tools for Profiling Footprint

XCode10에 오면서 위에서 설명한 메모리 추적을 할 수 있게 되었다.

여기서 새로 보이는 것은 VM Tracker, Virtual memory trace인데 위에서 설명한 메모리 풋프린트를 추적하기 좋은 기능이다.

VM Tracker- 이것은 위에서 설명했듯 Dirty, Compressed(Swapped)를 볼 수 있다.

Virtual Memory Trace - VM에서의 page cache hit, page zero fills 등을 상세히 볼 수 있다.

위에 말했다시피 이렇게 경고문이 뜨며..이를 누르면 손쉽게 추적 가능.

메모리가 어떻게 연결되어 관리되는지 멤그래프를 볼 수 있는데, 우리에게 소개해주는것은 이 Memgraph를 export해서 command로 볼 수 있다는거다. 일단 이렇게 export해서 터미널로 간다 ♪

그리고 이렇게 명령어를 친다. vmmap은 VM상의 메모리 맵을 보여주는 강력한 명령어다.

이렇게 구간별로 나뉘어져서 볼 수 있는데, 여기서 swapped size는 압축된 사이즈가 아니라 precompressed size이다.

상세히 보고 싶으면 이렇게 코드 영역과 같이 non-writable region이 먼저 나오고 그 다음 writable region이 나온다.

-pages 플래그를 사용하면 비트 단위가 아니라 페이지 단위로 볼 수 있다.

또한



iOS Memory Deep Dive - WWDC18 - Videos - Apple Developer

Discover how memory graphs can be used to get a close up look at what is contributing to an app's memory footprint. Understand the true...

developer.apple.com

자료: https://devstreaming-cdn.apple.com/videos/wwdc/2018/416n2fmzz0fz88f/416/416_ios_memory_deep_dive.pdf




Comments