Unsafe.{get,put}-X-Unaligned; Efficient array comparison intrinsics
David Holmes
david.holmes at oracle.com
Sun Mar 8 23:32:41 UTC 2015
On 9/03/2015 9:21 AM, Remi Forax wrote:
>
> On 03/09/2015 12:11 AM, David Holmes wrote:
>> On 7/03/2015 4:50 AM, Andrew Haley wrote:
>>> I've tried to so everything I've been asked. If this version passes
>>> muster with everyone I'll Javadoc all the public methods and fields
>>> and put it up for RFA next week.
>>>
>>> I guess it's going to need a lot of testing and security analysis.
>>>
>>> I added versions of all {put,get} methods with the boolean bigEndian
>>> argument. This makes HeapByteBuffer much cleaner, and it does not
>>> need to know the machine endianness at all. I hope that's OK.
>>>
>>> Andrew.
>>>
>>>
>>> http://cr.openjdk.java.net/~aph/unaligned.hotspot.4/
>>> http://cr.openjdk.java.net/~aph/unaligned.jdk.4/
>>
>> I think it is cleaner and more efficient if Unsafe maintains BE as an
>> instance variable (initialized at construction) and that isBigEndian()
>> simply returns that. The native check should only need to be called
>> once in the lifetime of the VM.
>>
>> David
>>
>
> BE doesn't need to be an instance, method of Unsafe are instance methods
> just to enforce security,
> you can not call them if you don"t have an instance of Unsafe (and
> getUnsafe() does the security check).
>
> BE is private so it doesn't have to be an instance field it can be
> static field.
Yes it could but why should it be? You have a singleton instance with
all instance methods, so cached state should be in an instance field not
a static one.
> And I agree with you that the native isBigEndian() should be called once
> in the lifetime of the VM.
>
> so the idea is to write:
>
> public boolean isBigEndian() {
> return BE;
> }
> private static final boolean BE = isBigEndian0();
>
> private static native boolean isBigEndian0();
Other than the static parts that is what I was suggesting :)
Cheers,
David
> cheers,
> Rémi
>
More information about the core-libs-dev
mailing list