From 09a3e67849a5edecf06427e7324401770627fd0b Mon Sep 17 00:00:00 2001 From: Benoit Sigoure Date: Sat, 5 Nov 2011 21:00:34 -0700 Subject: [PATCH] HBASE-4752 Don't create an unnecessary LinkedList when evicting from the BlockCache. --- .../hadoop/hbase/io/hfile/CachedBlockQueue.java | 12 ++++-------- .../hadoop/hbase/io/hfile/LruBlockCache.java | 7 +++---- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/apache/hadoop/hbase/io/hfile/CachedBlockQueue.java b/src/main/java/org/apache/hadoop/hbase/io/hfile/CachedBlockQueue.java index 963bc8f..ba6b286 100644 --- a/src/main/java/org/apache/hadoop/hbase/io/hfile/CachedBlockQueue.java +++ b/src/main/java/org/apache/hadoop/hbase/io/hfile/CachedBlockQueue.java @@ -19,7 +19,6 @@ */ package org.apache.hadoop.hbase.io.hfile; -import java.util.LinkedList; import java.util.PriorityQueue; import org.apache.hadoop.hbase.io.HeapSize; @@ -84,14 +83,11 @@ public class CachedBlockQueue implements HeapSize { } /** - * @return a sorted List of all elements in this queue, in descending order + * @return The next element in this queue, or {@code null} if the queue is + * empty. */ - public LinkedList get() { - LinkedList blocks = new LinkedList(); - while (!queue.isEmpty()) { - blocks.addFirst(queue.poll()); - } - return blocks; + public CachedBlock poll() { + return queue.poll(); } /** diff --git a/src/main/java/org/apache/hadoop/hbase/io/hfile/LruBlockCache.java b/src/main/java/org/apache/hadoop/hbase/io/hfile/LruBlockCache.java index 28d7787..1611f6c 100644 --- a/src/main/java/org/apache/hadoop/hbase/io/hfile/LruBlockCache.java +++ b/src/main/java/org/apache/hadoop/hbase/io/hfile/LruBlockCache.java @@ -21,7 +21,6 @@ package org.apache.hadoop.hbase.io.hfile; import java.lang.ref.WeakReference; import java.nio.ByteBuffer; -import java.util.LinkedList; import java.util.PriorityQueue; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.locks.ReentrantLock; @@ -424,11 +423,11 @@ public class LruBlockCache implements BlockCache, HeapSize { } public long free(long toFree) { - LinkedList blocks = queue.get(); + CachedBlock cb; long freedBytes = 0; - for(CachedBlock cb: blocks) { + while ((cb = queue.poll()) != null) { freedBytes += evictBlock(cb); - if(freedBytes >= toFree) { + if (freedBytes >= toFree) { return freedBytes; } } -- 1.7.7.420.g8a0a5