public void clear() { allocator.clear(); for (Iterator<Page> it = pages.values().iterator(); it.hasNext(); ) { Page p = it.next(); it.remove(); freePage(p); } validatePages(); }
public void destroy() { allocator.clear(); for (Iterator<Page> it = pages.values().iterator(); it.hasNext(); ) { Page p = it.next(); it.remove(); freePage(p); } validatePages(); }
public void clear() { allocator.clear(); for (Iterator<Page> it = pages.values().iterator(); it.hasNext(); ) { Page p = it.next(); it.remove(); freePage(p); } validatePages(); }
public void destroy() { allocator.clear(); for (Iterator<Page> it = pages.values().iterator(); it.hasNext(); ) { Page p = it.next(); it.remove(); freePage(p); } validatePages(); }
public boolean shrink() { final Lock ownerLock = owner.writeLock(); ownerLock.lock(); try { if (pages.isEmpty()) { return false; } else { int initialSize = pages.size(); for (Page p : release(new LinkedList<>(Collections.singletonList(pages.get(pages.size() - 1))))) { freePage(p); } return pages.size() < initialSize; } } finally { ownerLock.unlock(); } }
public boolean shrink() { final Lock ownerLock = owner.writeLock(); ownerLock.lock(); try { if (pages.isEmpty()) { return false; } else { int initialSize = pages.size(); for (Page p : release(new LinkedList<>(Collections.singletonList(pages.get(pages.size() - 1))))) { freePage(p); } return pages.size() < initialSize; } } finally { ownerLock.unlock(); } }
public void release(long address) { int lastPage = pageIndexFor(address); for (int i = pages.size() - 1; i > lastPage; i--) { Page p = pages.remove(i); allocator.expand(-p.size()); freePage(p); } validatePages(); }
public void release(long address) { int lastPage = pageIndexFor(address); for (int i = pages.size() - 1; i > lastPage; i--) { Page p = pages.remove(i); allocator.expand(-p.size()); freePage(p); } validatePages(); }
freePage(freePageSource.next());
freePage(freePageSource.next());
private boolean expandData() { int newPageSize = nextPageSize(); if (getAllocatedMemory() + newPageSize > allocator.getMaximumAddress()) { return false; } Page newPage = pageSource.allocate(newPageSize, thief, victim, this); if (newPage == null) { if (LOGGER.isDebugEnabled()) { LOGGER.debug("Data area expansion from {} failed", getAllocatedMemory()); } return false; } else if (pages.put(pages.size(), newPage) == null) { validatePages(); allocator.expand(newPageSize); if (LOGGER.isDebugEnabled()) { long before = getAllocatedMemory(); long after = before + newPageSize; LOGGER.debug("Data area expanded from {}B to {}B [occupation={}]", toBase2SuffixedString(before), toBase2SuffixedString(after), ((float) allocator.occupied()) / after); } return true; } else { freePage(newPage); validatePages(); throw new AssertionError(); } }
private boolean expandData() { int newPageSize = nextPageSize(); if (getAllocatedMemory() + newPageSize > allocator.getMaximumAddress()) { return false; } Page newPage = pageSource.allocate(newPageSize, thief, victim, this); if (newPage == null) { if (LOGGER.isDebugEnabled()) { LOGGER.debug("Data area expansion from {} failed", getAllocatedMemory()); } return false; } else if (pages.put(pages.size(), newPage) == null) { validatePages(); allocator.expand(newPageSize); if (LOGGER.isDebugEnabled()) { long before = getAllocatedMemory(); long after = before + newPageSize; LOGGER.debug("Data area expanded from {}B to {}B [occupation={}]", toBase2SuffixedString(before), toBase2SuffixedString(after), ((float) allocator.occupied()) / after); } return true; } else { freePage(newPage); validatePages(); throw new AssertionError(); } }