gpt4 book ai didi

10k 文件的 IO 和 NIO 文件大小方法的 Java Microbenchmark

转载 作者:行者123 更新时间:2023-12-02 03:24:12 26 4
gpt4 key购买 nike

我需要使用 JMH 计算至少 10 k 个文件的 Java IO 和 NIO 文件大小以及修改时间 api 的性能。我需要解决这个问题的代码。请指导如何写。

我的一个文件的示例代码如下:

@State(Scope.Thread)
public class MyBenchmark
{
public String path = new String("/home/demo.txt");

@Benchmark
public File baseline()
{
return new File(path);
}


// @Warmup(iterations = 10, time = 3, timeUnit = TimeUnit.SECONDS)
@Benchmark
public long getFileSize()
{
return new File(path).length();
}

@Benchmark
public long getFileSize_NIO1()
{
try
{
return Files.size(FileSystems.getDefault().getPath(path));
}
catch (IOException e)
{ }
return 0;
}


}

提前致谢。

最佳答案

假设您想单独测试这些文件,可以使用注释@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
}
}

注意:由于您有很多文件要测试,请确保为 JVM 分配足够的内存,否则您将因 GC Activity 或更糟糕的 OOME 而得到错误结果

关于10k 文件的 IO 和 NIO 文件大小方法的 Java Microbenchmark,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39205771/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com