Размер элемента в EhCache - PullRequest
       4

Размер элемента в EhCache

3 голосов
/ 22 февраля 2011

Я установил простой кэш, используя Integer для ключа и Double для значения. После заполнения кеша соотношение cache.calculateInMemorySize() / cache.getMemoryStoreSize() является постоянным и составляет 344 байта на элемент. Я ожидаю служебных данных, но моя полезная нагрузка составляет (32 + 64) 96 бит или 12 байтов, поэтому накладные расходы составляют колоссальные 332 байта - или я совершенно не понимаю, как это работает? Если нет, то что я могу сделать, чтобы уменьшить накладные расходы?

Кэш предназначен для хранения только памяти. Мы хотим разместить там все, поэтому переполнение и истечение срока действия не нужны, и поскольку мы можем довольно быстро заполнять данные из внешнего источника данных (просто недостаточно быстро, чтобы использовать его в качестве основного источника данных), постоянство также не требуется.

Использование версии 2.4.0.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2012

Исходя из ваших требований:

Кэш предназначен для хранения только памяти.Мы хотим разместить там все, поэтому переполнение и истечение срока действия не нужны, и поскольку мы можем довольно быстро заполнять данные из внешнего источника данных (просто недостаточно быстро, чтобы использовать его в качестве основного источника данных), постоянство также не требуется.

Я пришел к выводу, что вам вообще не нужно использовать какие-либо сторонние механизмы кэширования.Вместо этого вы можете воспользоваться простым HashMap ..., поскольку ваши кэшированные элементы никогда не истекают и всегда помещаются в памяти.Кроме того, вы не будете включать Jar-файлы EhCache в свой путь к классам и загружать его классы!

Вот пример кода:

public class MyCustomCache
{
  private Map<Integer, Double> myMap = new HashMap<Integer, Double>();

  public Double getCachedValueByKey(Integer key)
  {
    return myMap.get(key);
  }

  public void putValue2Cache(Integer key, Double value)
  {
    myMap.put(key, value);
  }

  public Double removeValueFromCache(Integer key)
  {
    return myMap.remove(key);
  }
}
0 голосов
/ 21 марта 2012

Я предполагаю, что полезная нагрузка - это вещи, которые на самом деле кэшируются. Вы также включаете размер клавиш? Я считаю, что CalculateInMemorySize также включает ключи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...