Hi,

A common reason why Unsafe is used is to more efficiently compare two unsigned 
byte arrays, viewing those byte arrays as long arrays. See Guava [1] and a 
number of apache frameworks for similar code.

One solution is to provide such functionality in Arrays for all primitives and 
probably refs [2]:

  int Arrays.compare(byte[], byte[]);

Then it is easy to create a comparator using a method reference:

  Comparator<byte[]> c = Arrays::compare;

There could, initially, be Java implementations for those methods, including 
using Unsafe for byte[]. I gather those methods could be intrinsified to 
implementations using SIMD instructions on supported platforms. I don't know if 
that is possible today with Hotspot, but regardless i think a good start would 
be to have Java-based implementations in place.

Thoughts?

Paul.

[1] 
http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/primitives/UnsignedBytes.html#lexicographicalComparator()

[2] https://bugs.openjdk.java.net/browse/JDK-8033148

Reply via email to