JDK 9 RFR of JDK-8035279: Clean up internal deprecations in BigInteger

Peter Levart peter.levart at gmail.com
Wed Feb 26 12:56:18 UTC 2014

On 02/25/2014 09:38 PM, Brian Burkhalter wrote:
> On Feb 20, 2014, at 1:42 AM, Paul Sandoz wrote:
>> Not sure the static powerCache field, in the original code, needs to be volatile either:
>> 1137     private static volatile BigInteger[][] powerCache;
> Is there consensus on whether "volatile" is necessary here?

I think it has to be volatile. The powerCache implementation was added 
in the following changeset:


...and improved later in the following:


It uses a copy-on-write technique to extend the cache with new values 
when needed. volatile is mandatory here to safely publish the newly 
constructed array-of-arrays and the newly constructed sub-array to other 
threads. Without volatile, other threads could see null slots where 
BigInteger[] and/or BigInteger objects should be...

Regards, Peter

> Thanks,
> Brian

More information about the core-libs-dev mailing list