|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.mmtk.utility.deque.Deque org.mmtk.utility.deque.LocalSSB org.mmtk.utility.deque.LocalQueue org.mmtk.utility.deque.LocalDeque
public class LocalDeque
Note this may perform poorly when being used as a FIFO structure with
insertHead and pop operations operating on the same buffer. This
only uses the fields inherited from LocalQueue
, but adds
the ability for entries to be added to the head of the deque and popped
from the rear.
Field Summary |
---|
Fields inherited from class org.mmtk.utility.deque.LocalQueue |
---|
head |
Fields inherited from class org.mmtk.utility.deque.LocalSSB |
---|
queue, tail, tailBufferEnd |
Fields inherited from class org.mmtk.utility.deque.Deque |
---|
BUFFER_MASK, BUFFER_SIZE, HEAD_INITIAL_VALUE, LOG_PAGES_PER_BUFFER, META_DATA_SIZE, NEXT_FIELD_OFFSET, PAGES_PER_BUFFER, TAIL_INITIAL_VALUE, USABLE_BUFFER_BYTES |
Constructor Summary | |
---|---|
LocalDeque(SharedDeque queue)
Constructor |
Method Summary | |
---|---|
protected void |
checkHeadInsert(int arity)
Check whether there is space in the buffer for a pending insert. |
private void |
closeAndInsertHead(int arity)
Close the head buffer and enqueue it at the front of the shared buffer deque. |
void |
flushLocal()
Flush the buffer and add it to the shared queue (this will make any entries in the buffer visible to any consumer associated with the shared queue). |
private void |
headOverflow(int arity)
Buffer space has been exhausted, allocate a new buffer and enqueue the existing buffer (if any). |
private boolean |
tailStarved(int arity)
The tail is empty (or null ), and the shared deque has no buffers
available. |
protected void |
uncheckedHeadInsert(Address value)
Insert a value at the front of the deque (and buffer). |
Methods inherited from class org.mmtk.utility.deque.LocalQueue |
---|
checkDequeue, headStarved, resetLocal, uncheckedDequeue |
Methods inherited from class org.mmtk.utility.deque.LocalSSB |
---|
bufferSentinel, checkTailInsert, isFlushed, normalizeTail, reset, uncheckedTailInsert |
Methods inherited from class org.mmtk.utility.deque.Deque |
---|
bufferEnd, bufferFirst, bufferLast, bufferLast, bufferLastOffset, bufferOffset, bufferStart |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
LocalDeque(SharedDeque queue)
queue
- The shared deque to which this local deque will append
its buffers (when full or flushed).Method Detail |
---|
public final void flushLocal()
LocalSSB
flushLocal
in class LocalSSB
protected final void checkHeadInsert(int arity)
arity
- The arity of the values stored in this deque: the
buffer must contain enough space for this many words.protected final void uncheckedHeadInsert(Address value)
checkHeadInsert()
to ensure the buffer can accommodate
the insertion.
value
- the value to be inserted.private void headOverflow(int arity)
arity
- The arity of this buffer (used for sanity test only).private void closeAndInsertHead(int arity)
arity
- The arity of this buffer.private boolean tailStarved(int arity)
null
), and the shared deque has no buffers
available. If the head has sufficient entries, consume the head.
Otherwise try wait on the shared deque until either all other
clients of the reach exhaustion or a buffer becomes
available.
arity
- The arity of this buffer
true
if the consumer has eaten all of the entries
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |