/* * Copyright (c) 2014, Oracle America, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * * Neither the name of Oracle nor the names of its contributors may be used * to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. */ package org.jzf; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.BenchmarkMode; import org.openjdk.jmh.annotations.CompilerControl; import org.openjdk.jmh.annotations.Fork; import org.openjdk.jmh.annotations.Measurement; import org.openjdk.jmh.annotations.Mode; import org.openjdk.jmh.annotations.OutputTimeUnit; import org.openjdk.jmh.annotations.Param; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; import org.openjdk.jmh.annotations.Warmup; import java.io.*; import java.net.*; import java.nio.file.*; import java.util.*; import java.util.stream.*; import java.util.concurrent.TimeUnit; @State(Scope.Benchmark) @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.MILLISECONDS) @Warmup(iterations = 5, time = 500, timeUnit = TimeUnit.MILLISECONDS) @Measurement(iterations = 10, time = 500, timeUnit = TimeUnit.NANOSECONDS) @Fork(5) public class MyBenchmark { private FileSystem fs; private List entriesS; private List entriesP; @Setup public void setup() throws Throwable { fs = FileSystems.getFileSystem(URI.create("jrt:/")); entriesS = new ArrayList<>(); entriesP = new ArrayList<>(); Files.walk(fs.getPath("/"), 10) .forEach( p -> { entriesP.add(p); entriesS.add(p.toString()); }); System.err.println("Total: " + entriesS.size()); } private static int cnt; private static void dosomething(Path p) { cnt++; } private static void dosomething(String s) { cnt++; } /* @Benchmark public void testLookupStr() throws IOException { Map env = Collections.emptyMap(); cnt = 0; try (FileSystem fs0 = FileSystems.newFileSystem(URI.create("jrt:/"), env)) { for (String s : entriesS) { if (Files.exists(fs0.getPath(s))) dosomething(s); } } } */ @Benchmark public void testLookupStr() throws IOException { Map env = Collections.emptyMap(); cnt = 0; for (String s : entriesS) { if (Files.exists(fs.getPath(s))) dosomething(s); } } @Benchmark public void testItr() throws IOException { cnt = 0; Files.walk(fs.getPath("/"), 10) .forEach( p -> dosomething(p)); } @Benchmark public void testLookupPath() throws IOException { cnt = 0; for (Path p : entriesP) { if (Files.exists(p)) dosomething(p); } } @Benchmark public void testExists() throws IOException { cnt = 0; for (Path p : entriesP) { if (Files.exists(p)) dosomething(p); } } @Benchmark public void testIsDirectory() throws IOException { cnt = 0; for (Path p : entriesP) { if (Files.isDirectory(p)) dosomething(p); } } @Benchmark public void testIsRegularFile() throws IOException { cnt = 0; for (Path p : entriesP) { if (Files.isRegularFile(p)) dosomething(p); } } @Benchmark public void testToRealPath() throws IOException { cnt = 0; for (Path p : entriesP) { dosomething(p.toRealPath()); } } }