Middle
Ar žinai, kaip veikia talpyklos kortelė?
sobes.tech AI
Atsakymas iš AI
Memory Cache (Atminties talpykla) Android — tai mechanizmas, skirtas duomenų saugojimui į įrenginio operatyvinę atmintį, siekiant užtikrinti greitą prieigą. Ji grindžiama asociatyviosios talpyklos principais.
Kaip veikia:
- Duomenų užklausa: Kai programa prašo duomenų, kurie gali būti įkeliami į talpyklą (pavyzdžiui, vaizdas iš tinklo arba sudėtingos operacijos rezultatas), ji pirmiausia patikrina talpyklą.
- Paieška talpykloje: Jei duomenys rasti talpykloje (t. y. užklausos raktas atitinka talpyklos raktą), jie nedelsiant grąžinami, išvengiant lėtų įvesties-išvesties operacijų arba skaičiavimų. Tai vadinama "cache hit".
- Talpyklos praleidimas (Cache Miss): Jei duomenys nerandami talpykloje ("cache miss"), programa juos gauna iš pirminio šaltinio (tinklas, duomenų bazė ir kt.).
- Įdėjimas į talpyklą: Po gavimo duomenys įdedami į talpyklą būsimoms užklausoms su tuo pačiu raktu.
- Išstūmimas (Cache Eviction): Talpykla turi ribotą dydį. Kai ji užpildoma, seni arba mažiau naudojami elementai išstumiami, kad atlaisvintų vietos naujiems. Populiarūs išstūmimo algoritmai — LRU (Mažiausiai neseniai naudotas) ir LFU (Mažiausiai dažnai naudotas).
Pavyzdys Android'e naudojant LruCache:
// Sukurti `LruCache` su maksimaliu dydžiu
private LruCache<String, Bitmap> memoryCache;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Gauti maksimalią prieinamą atminties dydį (KB)
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
// Naudoti 1/8 prieinamos atminties cache
final int cacheSize = maxMemory / 8;
memoryCache = new LruCache<String, Bitmap>(cacheSize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
// Metodas, skaičiuojantis kiekvieno elemento dydį talpykloje,
// atsižvelgiant į talpyklos dydį (čia — KB)
return bitmap.getByteCount() / 1024;
}
};
}
// Elemento pridėjimas į talpyklą
public void addBitmapToMemoryCache(String key, Bitmap bitmap) {
if (getBitmapFromMemCache(key) == null) {
memoryCache.put(key, bitmap);
}
}
// Elemento gavimas iš talpyklos
public Bitmap getBitmapFromMemCache(String key) {
return memoryCache.get(key);
}