Middle
Kesh-karta qanday ishlashini bilasizmi?
sobes.tech AI
AIdan javob
Android'da Memory Cache (Xotira Kesh) - bu qurilmaning operativ xotirasida ma'lumotlarni tezkor kirish uchun saqlash mexanizmi. Bu assotsiativ kesh tamoyonlariga asoslangan.
Qanday ishlaydi:
- Ma'lumot so'rovi: So'rovda keshga saqlanishi mumkin bo'lgan ma'lumotlar (masalan, tarmoqdan olingan rasm yoki murakkab operatsiyaning natijasi) bo'lsa, dastur avvalo keshni tekshiradi.
- Keshda qidirish: Agar ma'lumotlar keshda topilsa (ya'ni, so'rov kaliti keshdagi kalit bilan mos kelsa), ular darhol qaytariladi, sekin kirish/chiqish operatsiyalaridan yoki hisoblashlardan qochish uchun. Bu "cache hit" deb ataladi.
- Cache miss: Agar ma'lumotlar keshda topilmasa ("cache miss"), dastur ularni asl manbadan (tarmoq, ma'lumotlar bazasi va boshqalar) oladi.
- Keshga joylash: Ma'lumotlar olgach, ular kelajakdagi so'rovlar uchun bir xil kalit bilan keshga joylashtiriladi.
- Esvash (Cache Eviction): Kesh cheklangan o'lchamga ega. To'ldirilganda, eski yoki kamroq ishlatiladigan elementlar chiqariladi, yangi uchun joy bo'shatish uchun. Odatda ishlatiladigan algoritmlar LRU (Least Recently Used - eng kam foydalanilgan) va LFU (Least Frequently Used - kamroq foydalanilgan).
Androidda LruCache yordamida misol:
// Maksimal o'lcham bilan LruCache yaratish
private LruCache<String, Bitmap> memoryCache;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Ilova uchun mavjud bo'lgan maksimal xotira o'lchamini (KB) olish
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
// 1/8 qismini cache uchun ishlatish
final int cacheSize = maxMemory / 8;
memoryCache = new LruCache<String, Bitmap>(cacheSize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
// Har bir elementning o'lchamini hisoblash uchun metod
return bitmap.getByteCount() / 1024;
}
};
}
// Elementni cachega qo'shish
public void addBitmapToMemoryCache(String key, Bitmap bitmap) {
if (getBitmapFromMemCache(key) == null) {
memoryCache.put(key, bitmap);
}
}
// Elementni cachedan olish
public Bitmap getBitmapFromMemCache(String key) {
return memoryCache.get(key);
}