Unsafe.{get,put}-X-Unaligned; Efficient array comparison intrinsics
Peter Levart
peter.levart at gmail.com
Wed Feb 25 10:03:01 UTC 2015
On 02/25/2015 09:27 AM, Paul Sandoz wrote:
> On Feb 25, 2015, at 12:20 AM, John Rose <john.r.rose at oracle.com> wrote:
>
>> On Feb 24, 2015, at 7:49 AM, Andrew Haley <aph at redhat.com> wrote:
>>>> There will be only one runtime Unsafe sub-type ever observed in a
>>>> particular VM.
>>> Oh, that's very nice.
>> That doesn't help with B accesses on L platforms and vice versa.
>> Having an optional boolean parameter (gating reverseBytes) will help.
>>
Or having another set of methods (with B/L suffix). I think the desired
modes are:
- native order (platform dependent but always fastest)
- BigEndian (platform independent, fast if equal to native order)
- LittleEndian (platform independent, fast if equal to native order)
Having an order that is the opposite of native order is rarely needed, I
think, since it is platform dependent and slower at the same time.
> Yes, that's a good point.
>
>
>> Also, it makes Unsafe non-final, which frankly gives me the willies.
>> (Technical term, used by folks that have been through too many security escalations.)
>> Let's not create any new ways for industrious hackers to attack Unsafe.
>>
> I was getting nervous about this too :-)
I also felt uncomfortable, but for other reasons (like if intrinsics
still behave the same in abstract class too). At least in JDK9, Unsafe
should be hidden from any attackers, right?
Is making class final any safer than making constructor private? Are
there any known attacks on extending non-final classes with private
constructors?
Since these methods are unsafe, they naturally belong to Unsafe, but an
alternative would be an all-Java implementation in a parallel class
(Unsafe2). It wouldn't be any safer though. I just have a feeling that
if implementation is in Java, it would be best if methods were as short
as possible (for inlineability) and with as little conditional branches
that only depend on platform setup and can't be optimized away in all
modes of execution (interpreter, C1, C2).
Regards, Peter
> Paul.
More information about the core-libs-dev
mailing list