On 02/17/2015 10:53 AM, Andrew Haley wrote: > I see. So the question could also be whether escape analysis would > notice that a ByteBuffer does not escape. I hope to know that soon.
Close but no cigar. long getLong(byte[] bytes, int i) { return ByteBuffer.wrap(bytes).getLong(i); } Everything gets inlined nicely and the ByteBuffer is not created, but a store fence remains because of the final fields in HeapByteBuffer. So the resulting code for getLong (minus the prologue and epilogue) looks like this: 0x000003ff7426dc34: ldr w11, [x2,#12] ;*arraylength ; - java.nio.ByteBuffer::wrap@3 (line 396) ; - bytebuffertests.ByteBufferTests3::getLong@1 (line 23) ; implicit exception: dispatches to 0x000003ff7426dca4 ;; B2: # B5 B3 <- B1 Freq: 0.999999 0x000003ff7426dc38: dmb ish ;*synchronization entry ; - java.nio.HeapByteBuffer::<init>@-1 (line 84) ; - java.nio.ByteBuffer::wrap@7 (line 373) ; - java.nio.ByteBuffer::wrap@4 (line 396) ; - bytebuffertests.ByteBufferTests3::getLong@1 (line 23) 0x000003ff7426dc3c: sub w12, w11, w3 ;*isub ; - java.nio.Buffer::checkIndex@10 (line 545) ; - java.nio.HeapByteBuffer::getLong@18 (line 465) ; - bytebuffertests.ByteBufferTests3::getLong@5 (line 23) 0x000003ff7426dc40: cmp w3, #0x0 0x000003ff7426dc44: b.lt 0x000003ff7426dc70 ;*iflt ; - java.nio.Buffer::checkIndex@1 (line 545) ; - java.nio.HeapByteBuffer::getLong@18 (line 465) ; - bytebuffertests.ByteBufferTests3::getLong@5 (line 23) ;; B3: # B6 B4 <- B2 Freq: 0.999999 0x000003ff7426dc48: cmp w12, #0x8 0x000003ff7426dc4c: b.lt 0x000003ff7426dc88 ;*if_icmple ; - java.nio.Buffer::checkIndex@11 (line 545) ; - java.nio.HeapByteBuffer::getLong@18 (line 465) ; - bytebuffertests.ByteBufferTests3::getLong@5 (line 23) ;; B4: # N92 <- B3 Freq: 0.999998 0x000003ff7426dc50: add x10, x2, w3, sxtw 0x000003ff7426dc54: ldr x10, [x10,#16] 0x000003ff7426dc58: rev x0, x10 ;*invokestatic reverseBytes ; - java.nio.Bits::swap@1 (line 61) ; - java.nio.HeapByteBuffer::getLong@41 (line 466) ; - bytebuffertests.ByteBufferTests3::getLong@5 (line 23) If it weren't for the stray DMB ISH it'd be almost perfect. Andrew.