Primitive boolean array packing

Andrew Haley aph at redhat.com
Sun Oct 7 17:51:20 UTC 2018


On 10/07/2018 04:13 PM, Aleksey Shipilev wrote:
> On 10/07/2018 02:38 PM, B. Blaser wrote:
>> Thanks Aleksey, you're absolutely right but a programmer can still
>> disable this feature and use regular boolean arrays if necessary.
> 
> I fully expect the JVM feature/flag what optionally breaks the Java
> specification will be flat out rejected.

It doesn't break the Java specification:

    Notes

    The baload instruction is used to load values from both byte and
    boolean arrays. In Oracle's Java Virtual Machine implementation,
    boolean arrays - that is, arrays of type T_BOOLEAN (§2.2,
    §newarray) - are implemented as arrays of 8-bit values. Other
    implementations may implement packed boolean arrays; the baload
    instruction of such implementations must be used to access those
    arrays.

> My educated guess from the subword atomic operations over
> VarHandles: the local latency of uncontended CAS would still be too
> significant to ignore. Over years, we hoped CAS overhead would
> become negligible, but it still isn't

Probably so. Numbers would be nice.

-- 
Andrew Haley
Java Platform Lead Engineer
Red Hat UK Ltd. <https://www.redhat.com>
EAC8 43EB D3EF DB98 CC77 2FAD A5CD 6035 332F A671


More information about the compiler-dev mailing list