Package xyz.cofe.cbuffer.page
Class CachePagedDataBase<S extends CachePagedState<M,D>,M extends UsedPagesInfo,D extends DirtyPagedDataBase<M,? extends DirtyPagedState>>
- java.lang.Object
-
- xyz.cofe.cbuffer.page.CachePagedDataBase<S,M,D>
-
- Type Parameters:
S- Состояние CachePagedDataBaseM- Информация о памятиD- Информация о грязных страницах
- All Implemented Interfaces:
Flushable,ExtendablePages<M>,PagedData<M>,ReduciblePages<M>,ResizablePages<M>
- Direct Known Subclasses:
CachePagedData,CCachePagedData
public class CachePagedDataBase<S extends CachePagedState<M,D>,M extends UsedPagesInfo,D extends DirtyPagedDataBase<M,? extends DirtyPagedState>> extends Object implements ResizablePages<M>, Flushable
Кеширование страниц.
-
-
Constructor Summary
Constructors Modifier Constructor Description CachePagedDataBase(D cachePages, ResizablePages<M> persistentPages)КонструкторprotectedCachePagedDataBase(D cachePages, ResizablePages<M> persistentPages, S state)КонструкторprotectedCachePagedDataBase(S state)Конструктор
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected intallocCachePage()Выделение свободной страницыprotected intcache2persist(int cachePage)Возвращает индекс постоянной страницы для кешированной страницыprotected intcache2persist_mut(int cachePage)xyz.cofe.fn.Tuple2<Long,Long>cacheHitMiss()protected xyz.cofe.fn.Tuple2<List<Integer>,List<Integer>>cleanDirtyPages()Получение списка чистых/грязных страницprotected booleandirty(int cachePage)Проверка, что страница является "грязной"protected booleandirty_mut(int cachePage)xyz.cofe.fn.Tuple2<UsedPagesInfo,UsedPagesInfo>extendPages(int pages)Расширение кол-ва используемых страницvoidflush()Принудительная запись накопившийся изменений на диск/носитель информацииprotected intflush(int cachePage)Сохранение страницы кешаprotected intflush_mut(int cachePage)protected intflush0(int cachePage, boolean check_range, boolean check_dirty)Этим методом пользоваться аккуратно, его булевыми параметрами, сомневаетесь - тогда trueprotected booleanisClosed()protected byte[]map(int cachePage, int persistPage)Проецирование страницы из постоянной памяти на кешMmemoryInfo()Получение информации о памятиprotected intpersist2cache(int persistPage)Возвращает индекс кешированной страницы для постоянной страницыbyte[]readPage(int page)Чтение страницы.protected byte[]readPage_alloc(int page)protected byte[]readPage_mapped(int cidx, int page)xyz.cofe.fn.Tuple2<UsedPagesInfo,UsedPagesInfo>reducePages(int pages)Уменьшение кол-ва используемых страницxyz.cofe.fn.Tuple2<UsedPagesInfo,UsedPagesInfo>resizeCachePages(int pages)Изменение размера кеша.protected intunmap(int cachePage)выгрузка страницыprotected intunmapCandidate(List<Integer> pages, boolean clean)Выбор кандидата (страница кеша) на выгрузкуvoidwritePage(int page, byte[] data)Запись страницыprotected voidwritePage_alloc(int page, byte[] data)protected voidwritePage_mapped(int cidx, int page, byte[] data)-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface xyz.cofe.cbuffer.page.ResizablePages
resizePages
-
-
-
-
Field Detail
-
state
protected final S extends CachePagedState<M,D> state
-
-
Constructor Detail
-
CachePagedDataBase
protected CachePagedDataBase(S state)
Конструктор- Parameters:
state- внутреннее состояние
-
CachePagedDataBase
protected CachePagedDataBase(D cachePages, ResizablePages<M> persistentPages, S state)
Конструктор- Parameters:
cachePages- Кеш память (быстрая)persistentPages- Постоянная (медленная)
-
CachePagedDataBase
public CachePagedDataBase(D cachePages, ResizablePages<M> persistentPages)
Конструктор- Parameters:
cachePages- Кеш память (быстрая)persistentPages- Постоянная (медленная)
-
-
Method Detail
-
isClosed
protected boolean isClosed()
-
memoryInfo
public M memoryInfo()
Description copied from interface:PagedDataПолучение информации о памяти- Specified by:
memoryInfoin interfacePagedData<S extends CachePagedState<M,D>>- Returns:
- Получение информации о памяти
-
persist2cache
protected int persist2cache(int persistPage)
Возвращает индекс кешированной страницы для постоянной страницы- Parameters:
persistPage- постоянная страница, допустимые значения: от 0 и более- Returns:
- значение: от 0 и более - целевая страница кеша, или -1 (и меньше) - страница не спроецирована
-
cache2persist
protected int cache2persist(int cachePage)
Возвращает индекс постоянной страницы для кешированной страницы- Parameters:
cachePage- кешированная страница, допустимые значения: от 0 и более- Returns:
- значение: от 0 и более - постоянная страница (индекс), или -1 (и меньше) - страница не спроецирована (свободная ячейка кеша)
-
cache2persist_mut
protected int cache2persist_mut(int cachePage)
-
dirty
protected boolean dirty(int cachePage)
Проверка, что страница является "грязной"- Parameters:
cachePage- индекс страницы кеша- Returns:
- true - содержит не сохраненные изменения
-
dirty_mut
protected boolean dirty_mut(int cachePage)
-
flush
protected int flush(int cachePage)
Сохранение страницы кеша- Parameters:
cachePage- индекс страницы кеша- Returns:
- индекс persistentPage или значение меньше 0
-
flush_mut
protected int flush_mut(int cachePage)
-
flush0
protected int flush0(int cachePage, boolean check_range, boolean check_dirty)Этим методом пользоваться аккуратно, его булевыми параметрами, сомневаетесь - тогда true- Parameters:
cachePage- номер страницыcheck_range- проверка, что номер страницы указан в допустимом диапазонеcheck_dirty- проверка, что страница грязная- Returns:
- номер страницы в большой памяти
-
flush
public void flush()
Description copied from interface:FlushableПринудительная запись накопившийся изменений на диск/носитель информации
-
unmap
protected int unmap(int cachePage)
выгрузка страницы- Parameters:
cachePage- страница- Returns:
- индекс persistentPage или значение меньше 0
-
cleanDirtyPages
protected xyz.cofe.fn.Tuple2<List<Integer>,List<Integer>> cleanDirtyPages()
Получение списка чистых/грязных страниц- Returns:
- чистые/грязные страницы (cachePage)
-
unmapCandidate
protected int unmapCandidate(List<Integer> pages, boolean clean)
Выбор кандидата (страница кеша) на выгрузку- Parameters:
pages- список страниц из которых выборclean- true - это список чистых страниц,
false - это список грязных страниц- Returns:
- страница или -1 (и меньше),
-
allocCachePage
protected int allocCachePage()
Выделение свободной страницыВозможные сценарии
- В кеше есть еще не размеченная область cache2prst[x] < 0
- В кеше есть чистые страницы которые можно занять
- В кеше нет чистых страниц, необходимо выгружать страницу
Используется в
readPage_alloc(int),writePage_alloc(int, byte[])- Returns:
- индекс страницы
-
map
protected byte[] map(int cachePage, int persistPage)Проецирование страницы из постоянной памяти на кеш- Parameters:
cachePage- страница кеш-памятиpersistPage- страница постоянной памяти- Returns:
- содержание спроецированной страницы
-
readPage
public byte[] readPage(int page)
Чтение страницы.Варианты
- Страница спроецирована
- Страница не спроецирована
- необходимо - выделить свободную страницу в кеше
- если не достигнут предел по кешу
- тогда занять свободную страницу
- иначе выгрузить редко используемую страницу и занять ее
- Specified by:
readPagein interfacePagedData<S extends CachePagedState<M,D>>- Parameters:
page- индекс страницы, от 0 и более- Returns:
- массив байтов, по размеру равный
UsedPagesInfo.pageSize()или меньше, если последняя страница
-
readPage_mapped
protected byte[] readPage_mapped(int cidx, int page)
-
readPage_alloc
protected byte[] readPage_alloc(int page)
-
writePage
public void writePage(int page, byte[] data)Запись страницыВозможные варианты
Страница спроецирована (
writePage_mapped(int, int, byte[]))- изменить страницу в кеше
- отметить страницу как dirty (auto)
Страница не спроецирована (
writePage_alloc(int, byte[]))- необходимо - выделить свободную страницу в кеше
- если не достигнут предел по кешу
- тогда занять свободную страницу
- иначе выгрузить редко используемую страницу и занять ее
- если не достигнут предел по кешу
- если data меньше pageSize
- считать страницу из persist в cache
- изменить страницу в кеше
- отметить страницу как dirty (auto)
- Specified by:
writePagein interfacePagedData<S extends CachePagedState<M,D>>- Parameters:
page- индекс страницы, от 0 и болееdata- массив байтов, размер не должен превышатьUsedPagesInfo.pageSize()
-
writePage_mapped
protected void writePage_mapped(int cidx, int page, byte[] data)
-
writePage_alloc
protected void writePage_alloc(int page, byte[] data)
-
extendPages
public xyz.cofe.fn.Tuple2<UsedPagesInfo,UsedPagesInfo> extendPages(int pages)
Description copied from interface:ExtendablePagesРасширение кол-ва используемых страниц- Specified by:
extendPagesin interfaceExtendablePages<S extends CachePagedState<M,D>>- Parameters:
pages- сколько страниц нужно добавить- Returns:
- Сколько было и сколько стало памяти
-
reducePages
public xyz.cofe.fn.Tuple2<UsedPagesInfo,UsedPagesInfo> reducePages(int pages)
Description copied from interface:ReduciblePagesУменьшение кол-ва используемых страниц- Specified by:
reducePagesin interfaceReduciblePages<S extends CachePagedState<M,D>>- Parameters:
pages- сколько страниц нужно убрать- Returns:
- Сколько было и сколько стало памяти
-
resizeCachePages
public xyz.cofe.fn.Tuple2<UsedPagesInfo,UsedPagesInfo> resizeCachePages(int pages)
Изменение размера кеша.- Parameters:
pages- сколько страниц отвести под кеш- Returns:
- Сколько было и сколько стало памяти
-
-