[Android] 메모리 캐시와 디스크 캐시
브라우저에서의 메모리/디스크 캐시
메모리 캐시 vs 디스크 캐시 :: 마이구미 (정리잘되어있음)
아래는 해당 링크의 요약본이다.
브라우저 측면이 아닌 하드웨어 측면에서 보면,
- 관련설명 잘 되어있는 추천영상: [bRd 3D] CPU는 어떻게 작동할까? 유투브링크
- 디스크 캐시는 하드디스크에 접근하는 시간을 개선하기 위해 RAM에 저장하는 기법이다.
- 캐시 메모리는 램에 접근하지 않고 더 빠른 시간으로 접근할 수 있는 CPU 칩 안에 있는 작지만 빠른 메모리이다.(L1, L2, L3)
브라우저 측면에서 보면,
기본적으로 캐시 데이터는 하드디스크에 저장되는데(즉, 디스크 캐시), 재사용 및 I/O 최소화 등의 이점이 있으나 더 빠른 처리를 위해 I/O 없이 웹코어 내부로 바로 접근하여 데이터를 가져오는 메모리 캐시가 존재한다.
앱, 비트맵 캐싱
- 참고 문서
- 안드로이드 공식 문서 - 비트맵 캐싱
- 찰스의 안드로이드 - 안드로이드에서 LruCache를 파헤치기
비트맵 캐싱은 LruCache를 사용하는 대표적인 예다.
디스크 캐시 및 메모리 캐시에 대해 구분하고자 한 계기는 Glide다. Glide에서는 비트맵 풀 설정을 재정의할 때 다음과 같이 사용한다.
1 | int bitmapPoolSizeBytes = 1024 * 1024 * 30; // 30mb |
(참고로 기존에 사용하던 UIL의 설정 중 하나는 .memoryCache(new LruMemoryCache(2 * 1024 * 1024))
였다.)
또한, 메모리 캐시를 사용하지 않거나 디스크 캐시를 어떻게 사용할지 Strategy(전략)을 설정할 수 있도록 하였다.
1 | .skipMemoryCache(true) // default is false |
그렇다면 왜 이 둘은 나뉘어져 있고, 왜 Lru를 사용할까.
비트맵 캐싱 측면에서 보는 메모리 캐시와 디스크 캐시
메모리 캐시는 “중요한 애플리케이션 메모리”를 사용하는 대신 비트맵에 빠르게 액세스할 수 있다. (인용 출처: 공식문서)
주석 > 링크 “중요한 애플리케이션 메모리”는 View > Tool Windows > Device File Explorer 로 들어가서 data/data 하위 폴더에서 확인할 수 있다.
하지만 애플리케이션이 종료되면 메모리 캐시는 사라지기 때문에, 일부 데이터는 “유지”될 필요가 있다.
이러한 경우 디스크 캐시를 사용하여 처리된 비트맵을 “유지”하고 메모리 캐시에서 이미지가 더 이상 사용 가능하지 않을 때 로드 시간을 줄일 수 있습니다.
결론
즉, 메모리 캐시는 빠르다. 앱 자체에서 가장 빠르게 도달할 수 있는 메모리에 저장되기 때문이다. 하지만 그 용량이 작아 이미지 로딩이 많은 경우 문제가 될 수 있으므로 디스크 캐시를 함께 사용하게된다.
디스크 캐시는 메모리 캐시에 비해서는 느리다. 따라서 여기에서 이미지를 불러올 경우 백그라운드에서 로딩이 되도록 비동기 처리를 함께 해줘야하는 대신 용량이 크다.
[Android] 메모리 캐시와 디스크 캐시
https://dl137584.github.io/2022/02/05/010-memory-cache-and-disk-cache/