This just reuses instances across multiple sessions, since the
cardinality is usually low.
Change-Id: Icd18348eee51295f50e224572c103e3b5572963b
Signed-off-by: Robert Varga <rovarga@cisco.com>
package org.opendaylight.controller.netconf.nettyutil.handler;
import com.google.common.base.Preconditions;
package org.opendaylight.controller.netconf.nettyutil.handler;
import com.google.common.base.Preconditions;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
import org.openexi.proc.HeaderOptionsOutputType;
import org.openexi.proc.common.EXIOptions;
import org.openexi.proc.common.EXIOptionsException;
import org.openexi.proc.HeaderOptionsOutputType;
import org.openexi.proc.common.EXIOptions;
import org.openexi.proc.common.EXIOptionsException;
+ /**
+ * Since we have a limited number of options we can have, instantiating a weak cache
+ * will allow us to reuse instances where possible.
+ */
+ private static final LoadingCache<Short, GrammarCache> GRAMMAR_CACHES = CacheBuilder.newBuilder().weakValues().build(new CacheLoader<Short, GrammarCache>() {
+ @Override
+ public GrammarCache load(final Short key) {
+ return new GrammarCache(key);
+ }
+ });
+
/**
* Grammar cache acts as a template and is duplicated by the Transmogrifier and the Reader
* before use. It is safe to reuse a single instance.
/**
* Grammar cache acts as a template and is duplicated by the Transmogrifier and the Reader
* before use. It is safe to reuse a single instance.
go = GrammarOptions.addPI(go);
}
go = GrammarOptions.addPI(go);
}
- return new GrammarCache(go);
+ return GRAMMAR_CACHES.getUnchecked(go);
}
EXIReader getReader() throws EXIOptionsException {
}
EXIReader getReader() throws EXIOptionsException {