Middle
Keş kartasının necə işlədiyini bilirsinizmi?
sobes.tech Süni İntellekt
AI-dan cavab
Android-də Yaddaş Keşi (Memory Cache) cihazın RAM yaddaşında məlumatların sürətli giriş üçün saxlanması mexanizmidir. Bu, assosiativ keşi prinsiplərinə əsaslanır.
İş prinsipi:
- Məlumat tələbi: Keşdə saxlanıla bilən məlumatlar (məsələn, şəbəkədən alınan şəkil və ya mürəkkəb əməliyyatın nəticəsi) tələb olunduqda, tətbiq əvvəlcə keşi yoxlayır.
- Keşdə axtarış: Əgər məlumatlar keşdə tapılırsa (yəni, sorğu açarı keşdəki açarla uyğun gəlirsə), onlar dərhal geri qaytarılır, yavaş giriş/çıxış əməliyyatlarından və ya hesablamalardan qaçınmaq üçün. Bu "cache hit" adlanır.
- Cache miss: Əgər məlumatlar keşdə tapılmazsa ("cache miss"), tətbiq onları orijinal mənbədən (şəbəkə, verilənlər bazası və s.) alır.
- Keşə yerləşdirmə: Məlumatlar alındıqdan sonra, onlar gələcək sorğular üçün eyni açarla keşə yerləşdirilir.
- Esvay (Cache Eviction): Keşin məhdud ölçüsü var. O, dolduqda, köhnə və ya az istifadə olunan elementlər çıxarılır, yeni üçün yer açılır. Ümumi istifadə olunan algoritmlər LRU (Ən Az Son İstifadə Edilən) və LFU (Ən Az Tez İstifadə Edilən) daxildir.
Android-də LruCache istifadə edilərək nümunə:
// Maksimum ölçülü LruCache yaradılması
private LruCache<String, Bitmap> memoryCache;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Tətbiq üçün mövcud olan maksimum yaddaş ölçüsünü əldə et (KB-də)
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
// 1/8-i cache üçün istifadə et
final int cacheSize = maxMemory / 8;
memoryCache = new LruCache<String, Bitmap>(cacheSize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
// Hər bir elementin ölçüsünü hesablamaq üçün metod
return bitmap.getByteCount() / 1024;
}
};
}
// Elementi cache-ə əlavə et
public void addBitmapToMemoryCache(String key, Bitmap bitmap) {
if (getBitmapFromMemCache(key) == null) {
memoryCache.put(key, bitmap);
}
}
// Elementi cache-dən al
public Bitmap getBitmapFromMemCache(String key) {
return memoryCache.get(key);
}