I have a class with a static member like this:
class C
{
static Map m=new HashMap();
{
... initialize the map with some values ...
}
}
AFAIK, this would consume memory practically to the end of the program. I was wondering, if I could solve it with soft references, like this:
class C
{
static volatile SoftReference<Map> m=null;
static Map getM() {
Map ret;
if(m == null || (ret = m.get()) == null) {
ret=new HashMap();
... initialize the map ...
m=new SoftReference(ret);
}
return ret;
}
}
The question is
- is this approach (and the implementation) right?
- if it is, does it pay off in real situations?
This is okay if your access to
getM
is single threaded and it only acts as a cache. A better alternative is to have a fixed size cache as this provides a consistent benefit.