OneElementConcurrentQueue

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.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

class Object
trait Matchable
class Any

Value members

Concrete methods

override def dequeuedCount(): Long
Definition Classes
MutableConcurrentQueue
override def enqueuedCount(): Long
Definition Classes
MutableConcurrentQueue
override def isEmpty(): Boolean
Definition Classes
MutableConcurrentQueue
override def isFull(): Boolean
Definition Classes
MutableConcurrentQueue
override def offer(a: A): Boolean
Definition Classes
MutableConcurrentQueue
override def poll(default: A): A
Definition Classes
MutableConcurrentQueue
override def size(): Int
Definition Classes
MutableConcurrentQueue

Inherited methods

def offerAll(as: Iterable[A]): Chunk[A]

A non-blocking enqueue of multiple elements.

A non-blocking enqueue of multiple elements.

Inherited from:
MutableConcurrentQueue
def pollUpTo(n: Int): Chunk[A]

A non-blocking dequeue of multiple elements.

A non-blocking dequeue of multiple elements.

Inherited from:
MutableConcurrentQueue

Concrete fields

final override val capacity: 1