JDK 9 RFR of JDK-8035279: Clean up internal deprecations in BigInteger
peter.levart at gmail.com
Thu Feb 27 19:02:45 UTC 2014
On 02/27/2014 04:06 PM, Paul Sandoz wrote:
>> >Back then I presented an alternative solution which solves that:
>> >...and as can be seen, does not use volatile read/write to publish BigIntegers - that's why it is important that internal implementation of such immutable classes like BigInteger is tolerant to unsafe publication...
> Interesting, nice use of a linked list. Not sure that is safe publication of cacheLine into powerCache, the last element in a line could be observed as null, plus although it is unlikely, the compiler could shuffle up the array element store?
Any element of powerCacheIndex array of arrays and/or any element of
it's BigInteger sub-arrays can be observed as null and the code
accounts for that. You can view the scheme as two-level cache. The 1st
level is 'powerCacheIndex' where BigIntegers and BigIntegers are
published unsafely. If non-null values are observed, they are correct,
if null values are observed, the code looks through into the 2nd level
'powerCache' array of linked-lists which is a properly synchronized
lazily initialized cache of values where each is calculated at most once.
More information about the core-libs-dev