Controller ensureInLayer is slow when using addReads/addOpens for Layers with large numbers of modules

Thomas Watson tjwatson at us.ibm.com
Thu Mar 9 16:09:03 UTC 2017


> From: Alan Bateman <Alan.Bateman at oracle.com>
> To: Thomas Watson/Austin/IBM at IBMUS, jigsaw-dev at openjdk.java.net
> Date: 03/09/2017 10:07 AM
> Subject: Re: Controller ensureInLayer is slow when using addReads/
> addOpens for Layers with large numbers of modules
> 
> There wasn't any text in your mail (don't know if this was intentional 
> or not).
> 
> In any case, this is trivially improved, it just hasn't come up before, 
> probably because the Controller API is somewhat niche.
> 
> -Alan
> 

Sorry, my mail system adds stuff that the mailing list doesn't like, let 
me try this again:

The Controller ensureInLayer method has this.

        private void ensureInLayer(Module source) {

            if (!layer.modules().contains(source))

                throw new IllegalArgumentException(source + " not in 
layer");

        }
 
The implementation of Layer.modules() is terribly expensive when trying to 
collect the complete set of modules only to perform a contains check.  Can 
this be changed to something more simple like this:
 

        private void ensureInLayer(Module source) {

            if (!layer.equals(source.getLayer()))

                throw new IllegalArgumentException(source + " not in 
layer");

        }
 
It also seems like Layer.modules() should be optimized since the set of 
modules never changes for a Layer instance.  But that method has to do a 
new set collection each call.

Tom



More information about the jigsaw-dev mailing list