Sobes.tech
Middle

Önbellek kartının nasıl çalıştığını biliyor musun?

sobes.tech yapay zeka

AI'dan gelen yanıt

Android'de Bellek Önbelleği (Memory Cache), cihazın RAM belleğinde verilerin hızlı erişim için saklandığı bir mekanizmadır. Bu, ilişkisel önbellek ilkelerine dayanır.

Nasıl çalışır:

  1. Veri isteği: Önbelleğe alınabilecek veriler istendiğinde (örneğin, ağdan bir resim veya karmaşık bir işlemin sonucu), uygulama önce önbelleği kontrol eder.
  2. Önbellekte arama: Veriler önbellekte bulunursa (yani, istek anahtarı önbellekteki anahtarla eşleşiyorsa), hemen geri döndürülür, yavaş giriş/çıkış işlemlerinden veya hesaplamalardan kaçınılır. Bu "cache hit" olarak adlandırılır.
  3. Cache Miss: Veriler önbellekte bulunamazsa ("cache miss"), uygulama onları orijinal kaynaktan (ağ, veritabanı vb.) alır.
  4. Önbelleğe ekleme: Veriler alındıktan sonra, aynı anahtarla yapılacak gelecekteki istekler için önbelleğe konur.
  5. Esvai (Cache Eviction): Önbelleğin sınırlı bir boyutu vardır. Doluysa, eski veya daha az kullanılan öğeler çıkarılır, böylece yeni veriler için yer açılır. Yaygın kullanılan algoritmalar LRU (En Az Son Kullanılan) ve LFU (En Az Sık Kullanılan) içerir.

Android'de LruCache kullanarak örnek uygulama:

// Maksimum boyutla LruCache oluşturma
private LruCache<String, Bitmap> memoryCache;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Uygulama için kullanılabilir maksimum bellek boyutunu (KB cinsinden) al
    final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);

    // Belleğin 1/8'ini önbellek için kullan
    final int cacheSize = maxMemory / 8;

    memoryCache = new LruCache<String, Bitmap>(cacheSize) {
        @Override
        protected int sizeOf(String key, Bitmap bitmap) {
            // Her bir önbellek öğesinin boyutunu hesaplayan metod
            return bitmap.getByteCount() / 1024;
        }
    };
}

// Öğe önbelleğe ekleme
public void addBitmapToMemoryCache(String key, Bitmap bitmap) {
    if (getBitmapFromMemCache(key) == null) {
        memoryCache.put(key, bitmap);
    }
}

// Öğe önbellekten alma
public Bitmap getBitmapFromMemCache(String key) {
    return memoryCache.get(key);
}