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

John Rose john.r.rose at oracle.com
Fri Feb 21 00:28:46 UTC 2014

On Feb 20, 2014, at 12:09 PM, David Holmes <david.holmes at oracle.com> wrote:

> If the sentinel values were the default zero values there would be no issue

This is an instance of the "stable value" pattern; see the javadoc for java/lang/invoke/Stable.

Using zero for the sentinel in this pattern is the safest option.

If I'm reading the JMM argument right, using a non-default value (perhaps even an explicitly set zero value) relies on accidental effects from nearby final variables, which is fragile even if correct on HotSpot or in a future JMM.

If zero is also a valid result, and the "+1" values everywhere are odious, make a wrapper method that returns the corrected value, and applies the correction in just one place.  That is much preferable to risking an initial race condition on your stable value.

— John

More information about the core-libs-dev mailing list