/** {@inheritDoc} */ public Object getOnce(Object key, Object aux) throws IOException { if (key == null) throw new IllegalArgumentException(); final ByteBuffer buf; synchronized (this) { buf = m_lruMap.remove(key); } if (buf != null) { final CacheObjectBroker broker = m_cache.getCacheObjectBroker(); buf.position(0); return broker.decodeFromByteBuffer(buf, aux); } return m_cache.readFromStore(key, aux); }
/** {@inheritDoc} */ public void put(Object key, Object obj) { if (key == null || obj == null) throw new IllegalArgumentException(); final CacheObjectBroker broker = m_cache.getCacheObjectBroker(); final int objSize = broker.getEncodedSizeOf(obj); while (true) { final ByteBuffer buf; try { buf = m_bufAlloc.allocByteBuffer(objSize); } catch (OutOfMemoryError e) { if (spillOneObject()) continue; throw e; } broker.encodeToByteBuffer(buf, obj); synchronized (this) { m_lruMap.put(key, buf); m_curSize += objSize; } break; } }