Remove the assert in Integer.valueOf()
Alex Lam S.L.
alexlamsl at gmail.com
Mon Apr 23 22:32:41 UTC 2012
Just curious - I am assuming that assertions are disabled during the
test runs, so wouldn't one expect the "assert" statements to be
ignored / removed?
Obviously it didn't in this case, yet I thought we are expecting
constant conditionals to be optimised, e.g. if (a == null) {...} to be
removed if "a" can never be null?
Alex.
On Mon, Apr 23, 2012 at 7:01 PM, Rémi Forax <forax at univ-mlv.fr> wrote:
> On 04/23/2012 07:43 PM, Mario Torre wrote:
>>
>> 2012/4/23 Rémi Forax<forax at univ-mlv.fr>:
>>
>>> The issue is that Hotspot also count the bytecodes related to assert
>>> in its inlining heuristic.
>>> If the assert is commented, the inlining tree is good.
>>
>> [...]
>>
>>> Given that Integer.valueOf() is a method used very often and that if the
>>> inlining fails,
>>> the escape analysis will not remove the allocation,
>>> I think it's a good idea to comment this assert.
>>
>> Hi Rémi,
>>
>> I'm not sure if it's a good idea or not to remove the assert.
>>
>> What happens if we replace the assert with a specific check, is it
>> still not inlined?
>>
>> Cheers,
>> Mario
>
>
> Hi Marrio,
> if you add a check, you augment the size of the bytecode
> and unluckily the Hostspot inlining heuristic is based on the size of the
> bytecode.
>
> I've also forgotten to mention that this assert is useless given the code
> the static block of Integer.IntegerCache.
>
> static final int low = -128;
> static final int high;
> static {
> // high value may be configured by property
> int h = 127;
> String integerCacheHighPropValue =
>
> sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
> if (integerCacheHighPropValue != null) {
> int i = parseInt(integerCacheHighPropValue);
> i = Math.max(i, 127);
> // Maximum array size is Integer.MAX_VALUE
> h = Math.min(i, Integer.MAX_VALUE - (-low));
> }
> high = h;
>
> ...
> }
>
> cheers,
> Rémi
>
More information about the core-libs-dev
mailing list