4T2F / ThinkBig2

🌟씽크빅 2팀 스터디 🌟
2 stars 0 forks source link

iOS에서 메모리 사이즈와 관련된 개념과 고려 사항에 대해 설명해주세요. #17

Open Hminchae opened 7 months ago

Hminchae commented 7 months ago
Hminchae commented 7 months ago

💡 메모리 기초

메모리와 관련하여 기초적인 용어와 개념을 먼저 정리하고 넘어가보겠음. 아래 내용은 WWDC18의 Memory Deep Dive 내용을 많이 포함하고 있음..

메모리 용어

  1. virtual memory

    • 운영체제에서의 가상메모리
    • 하드웨어 RAM을 물리적 메모리라고 한다면, 이 물리적 메모리가 부족해서 디스크 공간도 같이 사용하는 방법임
    • 즉, 메모리가 디스크의 공간을 사용하는데 마치 디스크 공간을 가상 메모리처럼 사용하는 것 (단, 캐싱및 페이징을 통해 자주쓰는 데이터를 파악하여 디스크에서 메모리로 올리며 이런 것들을 통해 그냥 디스크만 쓰는 것보다 빠른 것)
    • virtual memory = clean memory + dirty memory

      • 스크린샷 2024-04-17 오전 2 04 00

      • process가 계산을 하다가 메모리에서 데이터를 찾는데, 이 때 virtual memory 라는 것을 두고 virtual memory 에서는 RAM과 disk 공간을 바라봄

      • virtual memory 부분을 적절한 단위로 나누게 되는데, 이것을 Page 라고 함

      • 이 분할된 공간에 접근하려면 분할된 공간의 주소가 Page Table이라는곳에 저장되고 RAM은 이 Page Table을 보고 디스크 공간에 접근

      • page out: 물리메모리에 page에 대응하는 데이터가 없어서, 물리메모리에 있는 어느 한 page와 disk에 있는 page랑 swap 해야하는데, 이 때 물리메모리에서 사용하지 않은 공간을 내준다는 의미로 page out이라 함

      • page in : 위에서 page out 되면서 반대로 디스크 입장에서는 swap 될 때 보내는 page를 의미

  2. dirty memory 와 clean memory
    • clean memory : 값이 변경되지 않은 깨끗한 메모리
      • 새로운 데이터를 쓰기 위하여 사용
      • page out 될 수 있는 공간
      • 아직 물리 메모리에서 사용되지 않아서 디스크로 언제든지 보낼 수 있어 여유공간을 의미함
    • dirty memory : 값이 변경되어 더러운 메모리
      • page out 될 수 없는 이미 수정된 데이터 영역
      • 쓰기 작업이 발생했기 때문에 다시 읽을 필요가 있거나, 변경된 내용을 디스크에 반영해야 할 때 사용
      • 힙, 싱글톤 등 인스턴스들이 스택으로 채워진 메모리 ex) 배열을 선언하고 특정 인덱스에 값을 할당하면, 그 인덱스 영역은 이미 사용했으므로 page out이 불가능한 영역
  3. compressed memory
    • 가상 메모리를 사용하면 결국 디스크까지 가느라 I/O 작업으로 인하여 속도가 저하될 수 있어, WWDC 2013에서 디스크까지 굳이 가지 않고 RAM을 먼저 최적화 하는 방식인 compressed memory를 발표했음 -> 메모리 효율성
    • 동작원리
      • 시스템의 메모리가 채워지기 시작하면, compressed memory는 메모리에서 가장 최근에 사용된 항목을 자동으로 압축하여 원래 크기의 반으로 압축함
      • 만약, 이 압축된 데이터들이 필요할 때 compressed memory가 즉시 압축 해제를 시도함
    • 효과
      • 가상메모리 사용 시, disk에서 swap 하는 비용을 최소화
      • 메모리 압축은 물리적 메모리의 사용을 최적화 하면서도 전력 소모를 최소화하게 됨
    • 압축률은 50퍼센트 이상이며 하나의 페이지를 압축하는데 백만분의 수 초가 수요됨
    • 더 알아보고 싶으면 여기참고
  4. swapped memory
    • 물리 메모리가 가득 찬 상태에서 더 많은 공간이 필요한 경우, 디스크 공간을 이용하여 부족한 메모리를 대체할 수 있는 공간
  5. resident memory(resident size)
    • RAM에 올라온 데이터들, 즉 실제 사용되어지는 데이터들을 의미

      iOS의 Memory Footprint

      앱에서 메모리가 필요하면, 시스템에서 메모리 페이지를 줌(페이징). 이 페이지에는 여러 객체들이 저장되고, 큰 용량의 객체는 여러 페이지에 걸쳐 존재할 수 있다. 한 페이지는 16KB 정도이고, 각 페이지는 write 한 적이 있는지에 따라 앞서 살펴본 clean memory 와 dirty memory 로 나뉘게 됨

한 앱의 전체 메모리 사이즈는 이렇게 계산됨

WWDC 피셜 메모리 제한에 관한..

스크린샷 2024-04-17 오전 2 09 14

💡iOS 앱에서 대용량 데이터를 다룰 때 메모리 사이즈를 고려한 최적화 방안에 대해 설명해주세요.

이미 동호님과 창준님이 아래 이슈에서 정리해주셨기 때문에 넘어가겠음

📝 참고