RFR: 8060130: Simplify the synchronization of defining and getting java.lang.Package
Stanimir Simeonoff
stanimir at riflexo.com
Sat Oct 11 15:45:01 UTC 2014
The commented annotation in ClassLoader.java must be removed (line 268)
// @GuardedBy("itself")
Stanimir
On Fri, Oct 10, 2014 at 6:10 PM, Claes Redestad <claes.redestad at oracle.com>
wrote:
> Hi all,
>
> please review this patch which attempts to clean up synchronization and
> improve scalability when
> defining and getting java.lang.Package objects.
>
> webrev: http://cr.openjdk.java.net/~redestad/8060130/webrev.02/
> bug: https://bugs.openjdk.java.net/browse/JDK-8060130
>
> Testing: jtreg, UTE vm.parallel_class_loading.testlist, various benchmarks
>
> Torturing the retrieval code with a simple microbenchmark[1] shows that
> the existing code
> could cause bottlenecks, but also that the proposed patch works slightly
> faster even in
> uncontended cases:
>
> Benchmark Mode Samples Score Score error
> Units
> baseline, 1 thread:
> o.s.SimpleBench.getClassPackage thrpt 10 11.621 0.618
> ops/us
> o.s.SimpleBench.getPackage thrpt 10 41.754 3.381
> ops/us
> o.s.SimpleBench.getPackages thrpt 10 0.009 0.000
> ops/us
>
> baseline, 2 threads:
> o.s.SimpleBench.getClassPackage thrpt 10 7.884 1.977
> ops/us
> o.s.SimpleBench.getPackage thrpt 10 17.013 8.079
> ops/us
> o.s.SimpleBench.getPackages thrpt 10 0.004 0.001
> ops/us
>
> patch applied, 1 thread:
> o.s.SimpleBench.getClassPackage thrpt 10 13.519 0.170
> ops/us
> o.s.SimpleBench.getPackage thrpt 10 59.999 0.988
> ops/us
> o.s.SimpleBench.getPackages thrpt 10 0.019 0.001
> ops/us
>
> patch applied, 2 threads:
> o.s.SimpleBench.getClassPackage thrpt 10 19.181 3.688
> ops/us
> o.s.SimpleBench.getPackage thrpt 10 79.708 31.220
> ops/us
> o.s.SimpleBench.getPackages thrpt 10 0.025 0.006
> ops/us
>
> /Claes
>
> [1]
> package org.sample;
>
> import org.openjdk.jmh.annotations.*;
>
> @State(Scope.Thread)
> public class SimpleBench {
>
> @Benchmark
> public Package[] getPackages() {
> return Package.getPackages();
> }
>
> @Benchmark
> public Package getClassPackage() {
> return this.getClass().getPackage();
> }
>
> @Benchmark
> public Package getPackage() {
> return Package.getPackage("java.util.zip");
> }
> }
>
>
More information about the core-libs-dev
mailing list