public RefCountedMemory copy(long newSize) { RefCountedMemory copy = new RefCountedMemory(newSize); copy.put(0, this, 0, Math.min(size(), newSize)); return copy; }
public void close() { unreference(); } }
@SuppressWarnings("resource") public V get(K key) { RefCountedMemory mem = map.get(key); if (mem == null) return null; if (!mem.reference()) return null; try { return deserialize(mem); } finally { mem.unreference(); } }
private RefCountedMemory serialize(V value) { long serializedSize = serializer.serializedSize(value); if (serializedSize > Integer.MAX_VALUE) throw new IllegalArgumentException(String.format("Unable to allocate %s", FBUtilities.prettyPrintMemory(serializedSize))); RefCountedMemory freeableMemory; try { freeableMemory = new RefCountedMemory(serializedSize); } catch (OutOfMemoryError e) { return null; } try { serializer.serialize(value, new WrappedDataOutputStreamPlus(new MemoryOutputStream(freeableMemory))); } catch (IOException e) { freeableMemory.unreference(); throw new RuntimeException(e); } return freeableMemory; }
public int weightOf(RefCountedMemory value) { long size = value.size(); assert size < Integer.MAX_VALUE : "Serialized size cannot be more than 2GB"; return (int) size; } }, serializer);
public V get(K key) { RefCountedMemory mem = map.get(key); if (mem == null) return null; if (!mem.reference()) return null; try { return deserialize(mem); } finally { mem.unreference(); } }
private RefCountedMemory serialize(V value) { long serializedSize = serializer.serializedSize(value, ENCODED_TYPE_SIZES); if (serializedSize > Integer.MAX_VALUE) throw new IllegalArgumentException("Unable to allocate " + serializedSize + " bytes"); RefCountedMemory freeableMemory; try { freeableMemory = new RefCountedMemory(serializedSize); } catch (OutOfMemoryError e) { return null; } try { serializer.serialize(value, new EncodedDataOutputStream(new MemoryOutputStream(freeableMemory))); } catch (IOException e) { freeableMemory.unreference(); throw new RuntimeException(e); } return freeableMemory; }
public int weightOf(RefCountedMemory value) { long size = value.size(); assert size < Integer.MAX_VALUE : "Serialized size cannot be more than 2GB"; return (int) size; } }, serializer);
public RefCountedMemory copy(long newSize) { RefCountedMemory copy = new RefCountedMemory(newSize); copy.put(0, this, 0, Math.min(size(), newSize)); return copy; }
@SuppressWarnings("resource") public V get(K key) { RefCountedMemory mem = map.get(key); if (mem == null) return null; if (!mem.reference()) return null; try { return deserialize(mem); } finally { mem.unreference(); } }
public void close() { unreference(); } }
private RefCountedMemory serialize(V value) { long serializedSize = serializer.serializedSize(value); if (serializedSize > Integer.MAX_VALUE) throw new IllegalArgumentException(String.format("Unable to allocate %s", FBUtilities.prettyPrintMemory(serializedSize))); RefCountedMemory freeableMemory; try { freeableMemory = new RefCountedMemory(serializedSize); } catch (OutOfMemoryError e) { return null; } try { serializer.serialize(value, new WrappedDataOutputStreamPlus(new MemoryOutputStream(freeableMemory))); } catch (IOException e) { freeableMemory.unreference(); throw new RuntimeException(e); } return freeableMemory; }
public int weightOf(RefCountedMemory value) { long size = value.size(); assert size < Integer.MAX_VALUE : "Serialized size cannot be more than 2GB"; return (int) size; } }, serializer);
public RefCountedMemory copy(long newSize) { RefCountedMemory copy = new RefCountedMemory(newSize); copy.put(0, this, 0, Math.min(size(), newSize)); return copy; }
@SuppressWarnings("resource") public V get(K key) { RefCountedMemory mem = map.get(key); if (mem == null) return null; if (!mem.reference()) return null; try { return deserialize(mem); } finally { mem.unreference(); } }
public void onEviction(K k, RefCountedMemory mem) { mem.unreference(); } };
private RefCountedMemory serialize(V value) { long serializedSize = serializer.serializedSize(value); if (serializedSize > Integer.MAX_VALUE) throw new IllegalArgumentException(String.format("Unable to allocate %s", FBUtilities.prettyPrintMemory(serializedSize))); RefCountedMemory freeableMemory; try { freeableMemory = new RefCountedMemory(serializedSize); } catch (OutOfMemoryError e) { return null; } try { serializer.serialize(value, new WrappedDataOutputStreamPlus(new MemoryOutputStream(freeableMemory))); } catch (IOException e) { freeableMemory.unreference(); throw new RuntimeException(e); } return freeableMemory; }
public int weightOf(RefCountedMemory value) { long size = value.size(); assert size < Integer.MAX_VALUE : "Serialized size cannot be more than 2GB"; return (int) size; } }, serializer);
public RefCountedMemory copy(long newSize) { RefCountedMemory copy = new RefCountedMemory(newSize); copy.put(0, this, 0, Math.min(size(), newSize)); return copy; }
if (!old.reference()) return false; // we have already freed hence noop. old.unreference(); mem.unreference(); throw t; old.unreference(); // so it will be eventually be cleaned else mem.unreference(); return success;