JDK 11 RFR of 8200478: For boxing conversion javac uses Long.valueOf which does not guarantee caching according to its javadoc

Jonathan Gibbons jonathan.gibbons at oracle.com
Wed Apr 25 15:57:27 UTC 2018


Joe,

While I note that the primary text has been modified to include long 
types, the italic comment that follows still ends with the following:

Notice that integer literals of type|long|are allowed, but not required, 
to be shared.

-- Jon


On 4/25/18 8:18 AM, joe darcy wrote:
> Hi David,
>
> On 4/25/2018 5:08 AM, David Holmes wrote:
>> Hi Joe,
>>
>> On 25/04/2018 10:30 AM, joe darcy wrote:
>>> Hello,
>>>
>>> Please review the patch below to update the specification of 
>>> Long.valueOf(long) to require caching on [-128, 127]. The JDK 
>>> implementation of this functionality has always cached in that 
>>> region, even though it is not required.
>>
>> Seems very explicit that there is no requirement for Long to do 
>> caching. So why should that change? Or put another way what has 
>> changed that invalidates that clearly stated position?
>>
>
> JLS 9 changed the requirements on autobox caching going from Java SE 8 
> to 9:
>
> https://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.1.7
>
> vs
>
> https://docs.oracle.com/javase/specs/jls/se9/html/jls-5.html#jls-5.1.7
>
> The Long.valueOf method is used to implement autoboxing and its 
> caching spec wasn't updated accordingly at the time.
>
> Cheers,
>
> -Joe



More information about the core-libs-dev mailing list