On 03/07/2015 07:48 PM, Andrew Haley wrote:
On 03/07/2015 05:57 PM, Remi Forax wrote:
Hi Andrew,
I've just read carefully the JDK part and I'm mostly ok with it.

in Unsafe, all private methods should be static
You're going to have to explain that.  Firstly, why?  There's no real
performance advantage, and secondly, how is a static method supposed
to invoke the virtual methods in Unsafe?  I suppose it could use
theUnsafe.blah() but that would be worse than a simple virtual call.

I mean all private methods that doesn't starts with "put*",
convEndian, toUnsignedInt/toUnsignedLong, pick, make*, pickPos.



and I think that isBigEndian() and unalignedAccess() native methods
should be called once in a static block and their results
cached/stored as static final fields.
That's not unreasonable.

In that case the public version of isBigEndian() and
unalignedAccess() should just return the value of the static final
fields.
OK.

Also I'm wondering if this method are really unsafe, exporting the
endianess or the support of unaligned access doesn't seem unsafe too
me;
It's not, but the we have a public API to get the endianness of this
machine in java.nio,ByteOrder.nativeOrder() and I really don't want to
create another one.  With regard to unalignedAccess() I don't really
mind making it public static but it's of marginal use in that form
IMO.  Maybe some user code could make use of this information, in
which case it shouldn't be in Unsafe at all.

maybe there is a security issue ?; if not, the static final
fields should be public and the public methods removed.
Sorry, I don't want to do that.  Accessor methods for such things
should stay as methods, not public fields.

OK.


Andrew.

Rémi

Reply via email to