On Thu, 7 Sep 2023 12:24:58 GMT, Rémi Forax <fo...@openjdk.org> wrote:

>> This PR proposes to slightly improve some iterators of `AbstractMap`:
>> 
>> * Code reuse
>> * A field declared `final`
>> * Add missing `@Override` annotations
>
> Hello,
> In Java, sharing code may have a runtime cost (or not) depending on the shape 
> of the code, because the VM may have to speculate on the class of some value 
> at runtime.
> Here, in hasNext() and remove(), the VM has to find the class of the field 
> 'i' at runtime.
> 
> Iterators are performance sentive (they are used in for loop) and for that 
> they need the escape analysis to work.
> If the iterator code is polymorphic, so part of the code may be unknown so 
> the escape analysis will consider that the iterator escape. So usually, it's 
> a good practice to not share the iterator code.
> 
> Also the field should be package private (or even maybe private) but not 
> protected. Protected is very rare in Java because usually classes that share 
> implementation details are in the same package (or in the same nestmate nest).

@forax Note that HashMap uses a similar subclassing idiom for the iterators of 
the keySet, values, and entrySet collections in order to share the iterator 
logic:

https://github.com/openjdk/jdk/blob/jdk-21%2B35/src/java.base/share/classes/java/util/HashMap.java#L1626

-------------

PR Comment: https://git.openjdk.org/jdk/pull/15615#issuecomment-1710574566

Reply via email to