일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ios
- Refactoring
- tableView
- RxCocoa
- Observable
- UICollectionView
- Clean Code
- 스위프트
- UITextView
- map
- uitableview
- uiscrollview
- SWIFT
- Protocol
- clean architecture
- Human interface guide
- combine
- 리펙토링
- MVVM
- HIG
- ribs
- collectionview
- 리펙터링
- 애니메이션
- 리팩토링
- swiftUI
- swift documentation
- 클린 코드
- rxswift
- Xcode
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 1. Memory Deep Dive - iOS 메모리 운영체제 기초 (가상 메모리, 페이징, clean memory, dirty memory, compressed memory) 본문
[iOS - swift] 1. Memory Deep Dive - iOS 메모리 운영체제 기초 (가상 메모리, 페이징, clean memory, dirty memory, compressed memory)
jake-kim 2023. 12. 7. 01:56
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)
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: 값이 변경되지 않은 깨끗한 메모리
- 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.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
'iOS 응용 (swift)' 카테고리의 다른 글
[iOS - swift] 2. Memory Deep Dive - Memory를 줄여야 하는 이유 (+ 앱 메모리 사용량 아는 방법) (0) | 2023.12.09 |
---|---|
[iOS - swift] UILayoutGuide 개념 (0) | 2023.12.08 |
[iOS - swift] UITextView 패딩, 인셋 (lineFragmentPadding) (0) | 2023.12.06 |
[iOS - swift] 제스쳐 동시 인식 처리 방법 (gestureRecognizer(_:shouldRecognizeSimultaneouslyWith:)) (2) | 2023.12.05 |
[iOS - swift] UISwipeGestureRecognizer 개념 (스와이프 제스처) (0) | 2023.12.04 |