The maximum number of elements that a queue can hold.
The maximum number of elements that a queue can hold.
that unbounded queues can still implement this interface
with capacity = MAX_INT
.
the number of elements that have ever been taken from the queue.
if you know how much time the queue is alive, you can calculate the rate at which elements are being dequeued.
the number of elements that have ever been added to the queue.
if you know how much time the queue is alive, you can calculate the rate at which elements are being enqueued.
,that scala.Long is used here, since scala.Int will be overflowed really quickly for busy queues.
A non-blocking enqueue.
A non-blocking enqueue.
whether the enqueue was successful or not.
A non-blocking dequeue.
A non-blocking dequeue.
either an element from the queue, or the default
param.
that if there's no meaningful default for your type, you
can alway use poll(null)
. Not the best, but reasonable price
to pay for lower heap churn from not using scala.Option here.
the current number of elements inside the queue.
that this method can be non-atomic and return the approximate number in a concurrent setting.
This is a specialized implementation of MutableConcurrentQueue of capacity 1. Since capacity 1 queues are by default used under the hood in Streams as intermediate resource they should be very cheap to create and throw away. Hence this queue is optimized (unlike RingBuffer*) for a very small footprint, while still being plenty fast.
Allocating an object takes only 24 bytes + 8+ bytes in long adder (so 32+ bytes total), which is 15x less than the smallest RingBuffer.
zio.internal.impls.OneElementConcurrentQueue object internals: OFFSET SIZE TYPE DESCRIPTION 0 4 (object header) 4 4 (object header) 8 4 (object header) 12 4 int OneElementConcurrentQueue.capacity 16 4 java.util.concurrent.atomic.AtomicReference OneElementConcurrentQueue.ref 20 4 java.util.concurrent.atomic.LongAdder OneElementConcurrentQueue.deqAdder Instance size: 24 bytes Space losses: 0 bytes internal + 0 bytes external = 0 bytes total