On Fri, 24 Sep 2021 11:50:21 GMT, Сергей Цыпанов <github.com+10835776+stsypa...@openjdk.org> wrote:
>> Currently on each invocation of `URLClassPath.FileLoader.getResource()` >> `normalizedBase` URL is recalculated using same final `baseURL` from parent >> class. This can be avoided giving significant improvement in memory >> consumption. Consider the benchmark: >> >> @State(Scope.Benchmark) >> @BenchmarkMode(Mode.AverageTime) >> @OutputTimeUnit(TimeUnit.NANOSECONDS) >> @Fork(jvmArgsAppend = {"-Xms2g", "-Xmx2g"}) >> public class URLClassPathBenchmark { >> private final ClassLoader classLoader = getClass().getClassLoader(); >> >> @Benchmark >> public URL getResource() { >> return >> classLoader.getResource("file:./config/application.properties"); >> } >> } >> >> it demonstrates improvement brought in by this patch: >> >> before >> Benchmark Mode >> Cnt Score Error Units >> URLClassPathBenchmark.getResource avgt >> 50 2840,746 ± 22,206 ns/op >> URLClassPathBenchmark.getResource:·gc.alloc.rate avgt >> 50 645,313 ± 8,072 MB/sec >> URLClassPathBenchmark.getResource:·gc.alloc.rate.norm avgt >> 50 2403,258 ± 17,639 B/op >> URLClassPathBenchmark.getResource:·gc.churn.G1_Eden_Space avgt >> 50 656,624 ± 116,090 MB/sec >> URLClassPathBenchmark.getResource:·gc.churn.G1_Eden_Space.norm avgt >> 50 2450,175 ± 440,011 B/op >> URLClassPathBenchmark.getResource:·gc.churn.G1_Survivor_Space avgt >> 50 0,123 ± 0,149 MB/sec >> URLClassPathBenchmark.getResource:·gc.churn.G1_Survivor_Space.norm avgt >> 50 0,459 ± 0,556 B/op >> URLClassPathBenchmark.getResource:·gc.count avgt >> 50 67,000 counts >> URLClassPathBenchmark.getResource:·gc.time avgt >> 50 117,000 ms >> >> after >> Benchmark Mode >> Cnt Score Error Units >> URLClassPathBenchmark.getResource avgt >> 100 2596,719 ± 9,786 ns/op >> URLClassPathBenchmark.getResource:·gc.alloc.rate avgt >> 100 448,780 ± 1,684 MB/sec >> URLClassPathBenchmark.getResource:·gc.alloc.rate.norm avgt >> 100 1528,040 ± 0,005 B/op >> URLClassPathBenchmark.getResource:·gc.churn.G1_Eden_Space avgt >> 100 479,905 ± 23,369 MB/sec >> URLClassPathBenchmark.getResource:·gc.churn.G1_Eden_Space.norm avgt >> 100 1634,314 ± 79,821 B/op >> URLClassPathBenchmark.getResource:·gc.churn.G1_Survivor_Space avgt >> 100 0,101 ± 0,097 MB/sec >> URLClassPathBenchmark.getResource:·gc.churn.G1_Survivor_Space.norm avgt >> 100 0,345 ± 0,329 B/op >> URLClassPathBenchmark.getResource:·gc.count avgt >> 100 98,000 counts >> URLClassPathBenchmark.getResource:·gc.time avgt >> 100 218,000 ms > > Сергей Цыпанов has updated the pull request incrementally with one additional > commit since the last revision: > > 8274276: Make URLClassPath.Loader.getBaseURL() final OK - LGTM. I have run tier1 and tier2 on your changes in our CI and nothing unexpected came up. ------------- Marked as reviewed by dfuchs (Reviewer). PR: https://git.openjdk.java.net/jdk/pull/5677