관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] 1. Memory Deep Dive - iOS 메모리 운영체제 기초 (가상 메모리, 페이징, clean memory, dirty memory, compressed memory) 본문

iOS 응용 (swift)

[iOS - swift] 1. Memory Deep Dive - iOS 메모리 운영체제 기초 (가상 메모리, 페이징, clean memory, dirty memory, compressed memory)

jake-kim 2023. 12. 7. 01:56

* 가장 기초) iOS 메모리 기초 개념 - virtual memory, dirty memory, clean memory, compressed memory, swapped memory 이해하기 포스팅 글

 

1. Memory Deep Dive - iOS 메모리 운영체제 기초 (가상 메모리, 페이징, clean memory, dirty memory, compressed memory)

2. Memory Deep Dive - Memory를 줄여야 하는 이유 (+ 앱 메모리 사용량 아는 방법)

3. Memory Deep Dive - Memory Footprint (페이징, Compressed 메모리)

4. Memory Deep Dive - Memory Footprint 프로파일링 방법 (Allocation, Leaks, VM Tracker, Virtual memory trace)

5. Memory Deep Dive - Memory Footprint 프로파일링 방법 (2) (Xcode Memory Debugger, Memory Graph, Memgraph)

6. Memory Deep Dive - Memory Footprint 프로파일링 방법 (3) (vmmap, leaks, heap, malloc_history)

7. Memory Deep Dive - 이미지 로드 매커니즘, 이미지 핸들링 최적화 (UIGraphicsBeginImageContextWithOptions, UIGraphicsImageRenderer)

8. Memory Deep Dive - 이미지 리사이징, 이미지 다운 샘플링 (ImageIO, ImageSource)

9. Memory Deep Dive - 백그라운드에서 메모리 최적화하는 방법

가상 메모리 (Virtual Memory)

  • CPU는 일을 처리하기 위해서 RAM을 사용하고 이 RAM의 한정된 공간의 한계를 극복하기 위해서 디스크 (Disk) 공간에 메모리가 참조할 수 있는 주소를 맵핑하여 사용하는 것
  • 즉, 메모리가 디스크의 공간을 사용하는데 마치 디스크 공간을 가상 메모리처럼 사용하는 것 (단, 캐싱 및 페이징을 통해 자주쓰는 데이터를 파악하여 디스크에서 메모리로 올리며 이런 것들을 통해 그냥 디스크만 쓰는 것보다 빠른 것)

페이징

  • 디스크 공간을 가능하면 쪼개서 여러개의 Page라는 일정한 크기로 RAM이 사용할 수 있는 공간으로 분할
  • 이 분할된 공간에 접근하려면 분할된 공간의 주소가 Page Table이라는곳에 저장되고 RAM은 이 Page Table을 보고 디스크 공간에 접근

clean memory, dirty memory 개념

  • 가상 메모리(virtual memory) = clean memory + dirty memory
    • clean memory: 값이 변경되지 않은 깨끗한 메모리
      • 새로운 데이터를 쓰기 위해 사용
      • disk에서 로드될 수 있으며 실행 코드 or 읽기 전용 파일들을 의미
    • dirty memory: 값이 변경된 더러운 메모리
      • 쓰기 작업이 발생했기 때문에 다시 읽을 필요가 있거나, 변경된 내용을 디스크에 반영해야 할 때 사용
      • 힙, 싱글 톤 등 인스턴스들이 스택으로 채워진 메모리
  • clean memory는 새로운 작업을 위해 재사용되거나 더 이상 필요하지 않을 경우 해제될 수 있음
  • dirty memory는 변경이 일어났으니, 디스크에 쓰여지거나 새로운 데이터로 업데이트될 수 있음

compressed memory 개념

  • iOS 7부터 나온 개념 (2013)
  • compressed memory가 나온 이유는 메모리 효율성을 높이기 위함
    • 메모리 사용공간 축소: Compressed Memory는 사용되지 않는 메모리 영역이나 중복 데이터를 찾아내어 압축
    • 가상 메모리 사용 시, disk에서 swap하는 비용을 최소화
    • 저전력 소모: 메모리 압축은 물리적 메모리의 사용을 최적화하면서도 전력 소모를 최소화 (효율적인 메모리 사용은 전력에도 영향을 미침)
  • compressed memory 동작 원리
    • 시스템의 메모리가 채워지기 시작하면, compressed memory는 메모리에서 가장 최근에 사용된 항목을 자동으로 압축하여 원래 크기의 반으로 압축
    • 만약, 이 압축된 데이터들이 필요할 때 compressed memory가 즉시 압축 해제를 시도

참고) 아래는 Mac의 Compressed Memory 설명

https://www.apple.com/media/us/osx/2013/docs/OSX_Mavericks_Core_Technology_Overview.pdf

* 참고

- https://www.apple.com/media/us/osx/2013/docs/OSX_Mavericks_Core_Technology_Overview.pdf

- https://www.lifewire.com/understanding-compressed-memory-os-x-2260327

- https://itecnote.com/tecnote/ios-resident-and-dirty-memory-of-ios/

- https://namu.wiki/w/%EA%B0%80%EC%83%81%20%EB%A9%94%EB%AA%A8%EB%A6%AC

- https://developer.apple.com/videos/play/wwdc2018/416/

Comments