On Feb 28, 2014, at 11:29 PM, Martin Buchholz <marti...@google.com> wrote:
> Are word-size reads in ByteBuffer actually intrinsified? I could find no > evidence for that. Perhaps this is an important missing optimization for > hotspot to make? > > I see DirectByteBuffer, but not garden-variety ByteBuffer, using Unsafe. > share/classes/java/nio/Direct-X-Buffer.java.template > Yes, no choice :-) I see it only does it when unaligned access is supported: private long getLong(long a) { if (unaligned) { long x = unsafe.getLong(a); return (nativeByteOrder ? x : Bits.swap(x)); } return Bits.getLong(a, bigEndian); } I suppose it could detect if the address + position also aligns, but ideally that should be hoisted out of any loop so the unaligned pre/post bytes are handled separately to the aligned sequence viewed as longs, which most likely means explicit code for the comparison use-case. Now i am in two minds to whether to add ByteBuffer.compareUnsigned or add Arrays.compareUnsigned. An explosion of methods on Arrays for all types (plus to/from versions) would be annoying. Paul.