public boolean offer(E e) { if (null == e) throw new NullPointerException(); E[] buffer = this.buffer; long mask = this.mask; long producerIndex = this.lpProducerIndex(); // -> Unsafe.getLong if (producerIndex >= this.producerLimit && !offerSlowPath(buffer, mask, producerIndex)) return false; long offset = calcElementOffset(producerIndex, mask); // ConcurrentCircularArrayQueue.calcElementOffset -> calcElementOffset soElement(buffer, offset, e); // -> Unsafe.putOrderedObject soProducerIndex(producerIndex + 1); // -> Unsafe.putOrderedLong return true; } /* C1 compilation: 232 434 3 org.jctools.queues.SpscArrayQueue::offer (77 bytes) @ 9 java.lang.NullPointerException::<init> (5 bytes) don't inline Throwable constructors @ 24 org.jctools.queues.SpscArrayQueueProducerIndexFields::lpProducerIndex (11 bytes) @ 7 sun.misc.Unsafe::getLong (0 bytes) intrinsic @ 44 org.jctools.queues.SpscArrayQueue::offerSlowPath (59 bytes) callee is too large @ 55 org.jctools.queues.ConcurrentCircularArrayQueue::calcElementOffset (6 bytes) @ 2 org.jctools.queues.CircularArrayOffsetCalculator::calcElementOffset (12 bytes) @ 64 org.jctools.util.UnsafeRefArrayAccess::soElement (10 bytes) @ 6 sun.misc.Unsafe::putOrderedObject (0 bytes) intrinsic @ 72 org.jctools.queues.SpscArrayQueueProducerIndexFields::soProducerIndex (12 bytes) @ 8 sun.misc.Unsafe::putOrderedLong (0 bytes) intrinsic */ private boolean offerSlowPath(E[] buffer, long mask, long producerIndex) { int lookAheadStep = this.lookAheadStep; // ConcurrentCircularArrayQueue.calcElementOffset -> calcElementOffset // lvElement -> Unsafe.getObjectVolatile if (null == lvElement(buffer, calcElementOffset(producerIndex + lookAheadStep, mask))) producerLimit = producerIndex + lookAheadStep; else { long offset = calcElementOffset(producerIndex, mask); // ConcurrentCircularArrayQueue.calcElementOffset -> calcElementOffset if (null != lvElement(buffer, offset)) // lvElement -> Unsafe.getObjectVolatile return false; } return true; } /* C2 compilation: 234 448 4 org.jctools.queues.SpscArrayQueue::offer (77 bytes) @ 15 org.jctools.queues.ConcurrentCircularArrayQueue::calcElementOffset (6 bytes) @ 2 org.jctools.queues.CircularArrayOffsetCalculator::calcElementOffset (12 bytes) @ 18 org.jctools.util.UnsafeRefArrayAccess::lvElement (9 bytes) @ 5 sun.misc.Unsafe::getObjectVolatile (0 bytes) intrinsic @ 40 org.jctools.queues.ConcurrentCircularArrayQueue::calcElementOffset (6 bytes) @ 2 org.jctools.queues.CircularArrayOffsetCalculator::calcElementOffset (12 bytes) @ 49 org.jctools.util.UnsafeRefArrayAccess::lvElement (9 bytes) @ 5 sun.misc.Unsafe::getObjectVolatile (0 bytes) intrinsic @ 24 org.jctools.queues.SpscArrayQueueProducerIndexFields::lpProducerIndex (11 bytes) inline (hot) @ 7 sun.misc.Unsafe::getLong (0 bytes) (intrinsic) @ 44 org.jctools.queues.SpscArrayQueue::offerSlowPath (59 bytes) inline (hot) @ 15 org.jctools.queues.ConcurrentCircularArrayQueue::calcElementOffset (6 bytes) inline (hot) @ 2 org.jctools.queues.CircularArrayOffsetCalculator::calcElementOffset (12 bytes) inline (hot) @ 18 org.jctools.util.UnsafeRefArrayAccess::lvElement (9 bytes) inline (hot) @ 5 sun.misc.Unsafe::getObjectVolatile (0 bytes) (intrinsic) @ 40 org.jctools.queues.ConcurrentCircularArrayQueue::calcElementOffset (6 bytes) inline (hot) @ 2 org.jctools.queues.CircularArrayOffsetCalculator::calcElementOffset (12 bytes) inline (hot) @ 49 org.jctools.util.UnsafeRefArrayAccess::lvElement (9 bytes) inline (hot) @ 5 sun.misc.Unsafe::getObjectVolatile (0 bytes) (intrinsic) @ 55 org.jctools.queues.ConcurrentCircularArrayQueue::calcElementOffset (6 bytes) inline (hot) @ 2 org.jctools.queues.CircularArrayOffsetCalculator::calcElementOffset (12 bytes) inline (hot) @ 64 org.jctools.util.UnsafeRefArrayAccess::soElement (10 bytes) inline (hot) @ 6 sun.misc.Unsafe::putOrderedObject (0 bytes) (intrinsic) @ 72 org.jctools.queues.SpscArrayQueueProducerIndexFields::soProducerIndex (12 bytes) inline (hot) @ 8 sun.misc.Unsafe::putOrderedLong (0 bytes) (intrinsic) C1 Compilation discarded: 235 434 3 org.jctools.queues.SpscArrayQueue::offer (77 bytes) made not entrant */