final Lock ownerLock = owner.writeLock(); if (thief || owner.isThief()) { if (!ownerLock.tryLock()) { return Collections.emptyList(); released.push(releasedPages); try { if (owner.evictAtAddress(remove, true) || moveAddressDown(remove)) { for (Page p : releasedPages) { if (targets.remove(p)) {
final Lock ownerLock = owner.writeLock(); if (thief || owner.isThief()) { if (!ownerLock.tryLock()) { return Collections.emptyList(); released.push(releasedPages); try { if (owner.evictAtAddress(remove, true) || moveAddressDown(remove)) { for (Page p : releasedPages) { if (targets.remove(p)) {
private boolean moveAddressDown(long target) { int sizeOfArea = owner.sizeOf(target); if (address < target && owner.evictAtAddress(address, false)) { long relocated = allocator.allocate(sizeOfArea); if (relocated >= 0) { if (relocated < target) { writeBuffers(relocated, readBuffers(target, sizeOfArea)); if (!owner.moved(target, relocated)) { throw new AssertionError("Failure to move mapping during release"); if (address < target && owner.evictAtAddress(address, false)) { long relocated = allocator.allocate(sizeOfArea); if (relocated >= 0) { if (relocated < target) { writeBuffer(relocated, readBuffer(target, sizeOfArea)); owner.moved(target, relocated); allocator.free(target); return true;
private boolean moveAddressDown(long target) { int sizeOfArea = owner.sizeOf(target); if (address < target && owner.evictAtAddress(address, false)) { long relocated = allocator.allocate(sizeOfArea); if (relocated >= 0) { if (relocated < target) { writeBuffers(relocated, readBuffers(target, sizeOfArea)); if (!owner.moved(target, relocated)) { throw new AssertionError("Failure to move mapping during release"); if (address < target && owner.evictAtAddress(address, false)) { long relocated = allocator.allocate(sizeOfArea); if (relocated >= 0) { if (relocated < target) { writeBuffer(relocated, readBuffer(target, sizeOfArea)); owner.moved(target, relocated); allocator.free(target); return true;
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(); } }
private boolean compress() { long lastAddress = allocator.getLastUsedPointer(); int sizeOfArea = owner.sizeOf(lastAddress); long compressed = allocator.allocate(sizeOfArea); if (compressed >= 0) { if (compressed < lastAddress) { writeBuffers(compressed, readBuffers(lastAddress, sizeOfArea)); if (owner.moved(lastAddress, compressed)) { allocator.free(lastAddress); return true; } } allocator.free(compressed); return false; } else { return false; } }
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(); } }
private boolean compress() { long lastAddress = allocator.getLastUsedPointer(); int sizeOfArea = owner.sizeOf(lastAddress); long compressed = allocator.allocate(sizeOfArea); if (compressed >= 0) { if (compressed < lastAddress) { writeBuffers(compressed, readBuffers(lastAddress, sizeOfArea)); if (owner.moved(lastAddress, compressed)) { allocator.free(lastAddress); return true; } } allocator.free(compressed); return false; } else { return false; } }