Minor performance improvement to java.lang.ModuleLayer.findModule(String name)

Claes Redestad claes.redestad at oracle.com
Thu Dec 7 12:20:46 UTC 2017


Hi Andrej,

this seems like a very reasonable improvement. I can help sponsor it.

What I think is really needed in this area is some microbenchmarks that 
sets up
multiple and more complex (but somewhat realistic) Layers of modules and 
test various
queries, so that we can profile and get a tab on where improvements 
matter most.

Thanks!

/Claes

On 2017-12-07 11:00, Andrej Golovnin wrote:
> Hi all,
>
> when we try to find a module which is not in the current layer, then
> we access the map 'nameToModule' in the parent layers two times in the
> lines 849-850:
>
> 846        return layers()
> 847                   .skip(1)  // skip this layer
> 848                   .map(l -> l.nameToModule)
> 849                   .filter(map -> map.containsKey(name))  // <-- first access
> 850                   .map(map -> map.get(name))                // <--
> second access
> 851                   .findAny();
>
> This can be improved when we map to the module in the line 848 and
> then filter for non-null values:
>
> 846        return layers()
> 847                   .skip(1)  // skip this layer
> 848                   .map(l -> l.nameToModule.get(name))
> 849                   .filter(Objects::nonNull)
> 850                   .findAny();
>
> The suggested change is attached as diff.
>
> Best regards,
> Andrej Golovnin



More information about the jigsaw-dev mailing list