Integrated: 8314569: (fs) Improve normalization of UnixPath for input with trailing slashes

Sergey Tsypanov stsypanov at openjdk.org
Tue Aug 29 08:42:20 UTC 2023


On Fri, 18 Aug 2023 09:25:25 GMT, Sergey Tsypanov <stsypanov at openjdk.org> wrote:

> Avoiding `String.substring()` call in `UnixPath.normalize()` can significantly reduce normalization costs for directories on Linux:
> 
> @BenchmarkMode(Mode.AverageTime)
> @OutputTimeUnit(TimeUnit.NANOSECONDS)
> @Warmup(time = 2, iterations = 5)
> @Measurement(time = 2, iterations = 5)
> @Fork(value = 4, jvmArgs = "-Xmx1g")
> public class FileToPathBenchmark {
> 
>     @Benchmark
>     public Path toDirectoryPath(Data data) {
>         return FileSystems.getDefault().getPath(data.directoryPath);
>     }
> 
>     @State(Scope.Thread)
>     public static class Data {
>         private String directoryPath = "/tmp/tmp/tmp/";
>     }
> }
> 
> Results:
> 
> baseline
> 
> Benchmark                                                             Mode  Cnt     Score     Error   Units
> FileToPathBenchmark.toDirectoryPath                                   avgt   50    40.524 ±   0.940   ns/op
> FileToPathBenchmark.toDirectoryPath:·gc.alloc.rate                    avgt   50  3269.167 ± 101.018  MB/sec
> FileToPathBenchmark.toDirectoryPath:·gc.alloc.rate.norm               avgt   50   175.213 ±   1.200    B/op
> FileToPathBenchmark.toDirectoryPath:·gc.churn.G1_Eden_Space           avgt   50  3279.401 ± 104.252  MB/sec
> FileToPathBenchmark.toDirectoryPath:·gc.churn.G1_Eden_Space.norm      avgt   50   175.756 ±   1.681    B/op
> FileToPathBenchmark.toDirectoryPath:·gc.churn.G1_Survivor_Space       avgt   50     0.006 ±   0.001  MB/sec
> FileToPathBenchmark.toDirectoryPath:·gc.churn.G1_Survivor_Space.norm  avgt   50    ≈ 10⁻³              B/op
> FileToPathBenchmark.toDirectoryPath:·gc.count                         avgt   50  1412.000            counts
> FileToPathBenchmark.toDirectoryPath:·gc.time                          avgt   50  4144.000                ms
> 
> patched
> 
> Benchmark                                                             Mode  Cnt     Score     Error   Units
> FileToPathBenchmark.toDirectoryPath                                   avgt   50    33.134 ±   2.313   ns/op
> FileToPathBenchmark.toDirectoryPath:·gc.alloc.rate                    avgt   50  2652.997 ± 152.758  MB/sec
> FileToPathBenchmark.toDirectoryPath:·gc.alloc.rate.norm               avgt   50   115.210 ±   1.960    B/op
> FileToPathBenchmark.toDirectoryPath:·gc.churn.G1_Eden_Space           avgt   50  2654.258 ± 157.862  MB/sec
> FileToPathBenchmark.toDirectoryPath:·gc.churn.G1_Eden_Space.norm      avgt   50   115.200 ±   1.960    B/op
> FileToPathBenchmark.toDirectoryPath:·gc.churn.G1_Survivor_Space       avgt   50     0.007 ±   0.001  MB/sec
> FileToPathBenchmark.toDirec...

This pull request has now been integrated.

Changeset: 93188bd8
Author:    Sergey Tsypanov <stsypanov at openjdk.org>
Committer: Alan Bateman <alanb at openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/93188bd80c755168c7e2cb946d7474fce014021e
Stats:     5 lines in 1 file changed: 1 ins; 1 del; 3 mod

8314569: (fs) Improve normalization of UnixPath for input with trailing slashes

Reviewed-by: alanb, bpb, rriggs

-------------

PR: https://git.openjdk.org/jdk/pull/15342


More information about the nio-dev mailing list