JDK-8300691 - final variables in for loop headers should accept updates
Liam Miller-Cushon
cushon at google.com
Fri Oct 18 00:07:28 UTC 2024
I redid the sample with the latest patch, and as expected got fewer IFs:
165 METHODDEF
31 FORLOOP
9 IF
7 TRY
6 INIT
4 WHILELOOP
3 FOREACHLOOP
1 LAMBDA
On Thu, Oct 17, 2024 at 10:18 AM Maurizio Cimadamore <
maurizio.cimadamore at oracle.com> wrote:
> I believe in the new patch Archie has, IF means IF (e.g. the variable we
> are snapshotting is declared in the if statement).
>
> But since Liam was using an earlier iteration, it is possible that the
> results here are a bit skewed.
>
> (Thanks Liam!)
>
> Maurizio
> On 17/10/2024 18:14, Brian Goetz wrote:
>
> I'm guessing, too, that many of those IFs really are hiding METHODDEF or
> FORLOOP?
>
>
> On 10/17/2024 1:12 PM, Liam Miller-Cushon wrote:
>
> I analyzed a sample of code using the changes at 08c8b1f3c64. I can
> re-analyze with the latest version, but the initial results were:
>
> 120 METHODDEF
> 74 IF
> 44 FORLOOP
> 13 WHILELOOP
> 10 TRY
> 5 FOREACHLOOP
> 2 DOLOOP
> 1 LAMBDA
>
>
> On Thu, Oct 17, 2024 at 8:08 AM Maurizio Cimadamore <
> maurizio.cimadamore at oracle.com> wrote:
>
>>
>> On 17/10/2024 16:03, Archie Cobbs wrote:
>>
>> On Thu, Oct 17, 2024 at 5:34 AM Maurizio Cimadamore <
>> maurizio.cimadamore at oracle.com> wrote:
>>
>>> Funny to see the FOREACHLOOP popping out. This code is (at least) from
>>> 17 years ago (!!) and predates any form of effectively final analysis -
>>> back then even for-each required to hoist the variable in a separate
>>> final one :-)
>>>
>>
>> I was wondering about that as well. I didn't realize that there was a
>> point where foreach() already existed and this effectively final tweak was
>> added. I don't see a relevant JEP, did it predate the JEP process?
>>
>> Effectively final support was added as part of Java 8 and Project Lambda.
>> Java 7 also had some bits of effective finality here and there, but Java 8
>> is what sealed the deal. Back then we did not have the JEP process.
>>
>>
>>
>>> I realize, the important info is not where the dummy variable is
>>> declared. It's the declaration of the variable it points to in the
>>> initializer that matters!
>>>
>>
>> D'oh, yes of course... easy to fix though.
>>
>> Thanks
>>
>>
>> Here are the new stats - these look more like what one might expect:
>>
>> 87 METHODDEF
>> 11 FORLOOP
>> 3 TRY
>> 3 IF
>> 3 FOREACHLOOP
>> 3 DOLOOP
>> 2 WHILELOOP
>> 1 CASE
>>
>> Now there are 3 FOREACHLOOP's :)
>>
>> Yowza! For each gained more than the regular loop :-)
>>
>> Maurizio
>>
>>
>> -Archie
>>
>> --
>> Archie L. Cobbs
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/amber-dev/attachments/20241017/8c29cd31/attachment.htm>
More information about the amber-dev
mailing list