On Tue, 26 Sep 2023 14:19:55 GMT, Technici4n <d...@openjdk.org> wrote:
> Fixes the issue (hopefully) by resolving automatic modules and automatic > module dependencies after propagation of non-automatic transitive > dependencies. The module tests run. > > I also added a few asserts to validate that the automatic modules don't read > themselves (previously this was the case with > 1 automatic module). Should > these asserts be added in more places or is this enough? > > Alan also mentioned a conflict with the spec, I'm not sure which spec is > being referred to. The documentation of `ResolvedModule#reads` states `A > possibly-empty unmodifiable set`, implying that the set can be empty. > > Finally, `Configuration#reads` states `// The sets stored in the graph are > already immutable sets` but that does not seem to be true. Should something > be done about this to limit allocation? > > Please let me know! > Cheers The attached patch helps a lot when there's only automatic modules, but not so much with many non-automatic modules. See for example this updated "test": https://gist.github.com/Technici4n/5ac0744bb85604ed9f81c610151cc884 and the following output: (numbers not scientific) [standard jdk 20] Time for 100 modules = 0.0s Time for 200 modules = 0.1s Time for 300 modules = 0.3s Time for 400 modules = 0.4s Time for 500 modules = 1.0s Time for 600 modules = 1.7s Time for 700 modules = 2.5s Time for 800 modules = 4.6s Time for 900 modules = 5.9s Time for 1000 modules = 6.6s [with Alan's patch] Time for 100 modules = 0.0s Time for 200 modules = 0.0s Time for 300 modules = 0.1s Time for 400 modules = 0.2s Time for 500 modules = 0.3s Time for 600 modules = 0.5s Time for 700 modules = 0.9s Time for 800 modules = 1.5s Time for 900 modules = 1.9s Time for 1000 modules = 1.9s ------------- PR Comment: https://git.openjdk.org/jdk/pull/15926#issuecomment-1735822630