У нас есть реализация кэша в нашем проекте, для которой мы использовали шаблон проектирования Singleton. Класс Cache - это одноэлементный класс, в котором содержится HashMap<String,HashMap> m
. Когда-нибудь, когда мы получим данные от Hashmap m
. возвращенный внутренний HashMap пуст. Это происходит случайным образом, и мы не знаем, почему это происходит. В нашем коде мы убедились, что на карте не вызывается оператор remove, а также отсутствует код, удаляющий эти данные.
Любые ссылки на это будут очень полезны.
Заранее спасибо.
Класс кэша: -
public Class Cache
{
public static Cache c;
private HashMap<String,HashMap> m ;
private Cache()
{
m = new HashMap<String,HashMap>();
}
public static synchronized Cache getInstance()
{
if(c == null) { c = new Cache(); }
return c;
}
public void put(String id,HashMap value)
{ m.put(id,value); }
public HashMap get(String id)
{ return m.get(id); }
}
Код для ввода значения: -
Cache c = Cache.getInstance();
c.put("CITY_CACHE",cityMap);// cityMap is a non empty map having city data
Код для получения значения: -
Cache c = Cache.getInstance();
HashMap cityMap = c.get("CITY_CACHE");
//city Map here becomes empty sometimes
Этот сценарий происходит случайно в производственной среде, и мы не можем выполнить репликацию в непроизводственной среде. Я подозреваю это из-за GC, но у меня нет никаких доказательств, чтобы доказать это.