Sobes.tech
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:

  1. 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.
  2. 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.
  3. Cache miss: Agar ma'lumotlar keshda topilmasa ("cache miss"), dastur ularni asl manbadan (tarmoq, ma'lumotlar bazasi va boshqalar) oladi.
  4. Keshga joylash: Ma'lumotlar olgach, ular kelajakdagi so'rovlar uchun bir xil kalit bilan keshga joylashtiriladi.
  5. 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);
}