Hi Xuelei,

On 03/23/2016 04:26 AM, Xuelei Fan wrote:
Hi,

Please review the update for the supporting of BigInteger.TWO:

   http://cr.openjdk.java.net/~xuelei/8152237/webrev/

BigInteger.valueOf(2) is a common BigInteger value used in binary and cryptography operation calculation. The BigInteger.TWO is not exported, and hence BigInteger.valueOf(2) is used instead in applications and JDK components. The export of static BigInteger.TWO can improve performance and simplify existing code.

Thanks,
Xuelei

I think (haven't tried, just speculate) you could achieve the same performance by:

- adding final qualifier to static BigInteger.[posConst|negConst] fields
- annotating those fields with @jdk.internal.vm.annotation.Stable annotation

This way BigInteger.valueOf(-MAX_CONSTANT <= i <= MAX_CONSTANT) when called with a constant argument should fold into a constant when compiled by JIT.

The same optimization could be performed for valueOf methods of java.lang.Byte, Character, Short, Integer & Long.

@Stable annotation was a package-private annotation in java.lang.invoke, reserved for method handles infrastructure, but has since been made public and moved to a concealed package of java.base. There is already a precedent for its use outside in java.lang.invoke: in java.lang.String. For example:

static final String s = ".....";

s.charAt(0); // is folded into a constant by JIT



Regards, Peter

Reply via email to