我需要使用JMH计算至少10 k文件的Java IO和NIO文件大小以及修改时间api的性能。我需要这个问题的代码。 请指导如何写。
我的一个文件的示例代码如下:
Runnable
提前致谢。
答案 0 :(得分:2)
假设您要单独测试文件,可以使用注释@Param
作为下一步:
@State(Scope.Thread)
public class BenchmarkFileSize {
@Param("path")
public String path;
@Benchmark
public long io() {
return new File(path).length();
}
@Benchmark
public long nio() throws IOException {
return Files.size(Paths.get(path));
}
public static void main(String[] args) throws RunnerException {
String[] paths = buildPaths();
Options opt = new OptionsBuilder()
.include(BenchmarkFileSize.class.getSimpleName())
.param("path", paths)
.forks(1)
.build();
new Runner(opt).run();
}
private static String[] buildPaths() {
// Here the code to build the array of paths to test
}
}
如果要一起测试文件,则需要使用@Setup
注释的init方法初始化要测试的路径,如下所示:
@State(Scope.Thread)
public class BenchmarkFileSize {
private List<String> paths;
@Benchmark
public long io() {
long total = 0L;
for (String path : paths) {
total += new File(path).length();
}
return total;
}
@Benchmark
public long nio() throws IOException {
long total = 0L;
for (String path : paths) {
total += Files.size(Paths.get(path));
}
return total;
}
public static void main(String[] args) throws RunnerException {
Options opt = new OptionsBuilder()
.include(BenchmarkFileSize.class.getSimpleName())
.forks(1)
.build();
new Runner(opt).run();
}
@Setup
public void buildPaths() {
// Here the code to build the list of paths to test and affect it to paths
}
}
NB:由于您需要测试大量文件,请确保为JVM分配足够的内存,否则会因GC活动或更糟糕的OOME而导致错误的结果