Java 10k 文件的 IO 和 NIO 文件大小方法的微基准测试
Java Microbenchmark for IO and NIO file size method for 10k files
我需要使用 JMH 计算 Java IO 和 NIO 文件大小和修改时间 api 的性能,至少 10k 个文件。我需要这个问题的代码。
请指导如何写。
我的一个文件的示例代码如下:
@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
我需要使用 JMH 计算 Java IO 和 NIO 文件大小和修改时间 api 的性能,至少 10k 个文件。我需要这个问题的代码。 请指导如何写。
我的一个文件的示例代码如下:
@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