如何衡量这段代码的性能?

时间:2016-03-19 04:44:56

标签: java performance

我有以下代码,我想在时间和内存使用方面衡量它的性能:

 public static void main(String[] args) throws IOException {
    final String bigFile = "large-file.txt";
    if (args.length == 1) {
        List<String> lines = Utils.readLinesFromFile(bigFile);
        Path path = Paths.get(bigFile);
        if (Files.exists(path)) {
            lines = Files.readAllLines(Paths.get(bigFile), StandardCharsets.UTF_8);
        }

        List<String> filteredLines  = lines.stream().filter(x -> x.startsWith(args[0])).collect(Collectors.toList());
        for (String s: filteredLines) {
            System.out.println(s);
        }
    } else {
        System.out.println(String.format("Expected one argument"));
    }
}

其中large-file.txt是一个包含2,000,000行的文件。

我真的不知道如何衡量表现。我是否应该使用分析器(我可以使用分析器,因为程序运行时很短吗?),或者在整个代码中使用System.nanoTime()并且多次运行程序以获得某种平均值是否足够?性能?但这在内存使用方面没有帮助 - 除非我可以在将大文件加载到内存之前和之后使用Runtime.totalMemory()调用进行测量。

1 个答案:

答案 0 :(得分:1)

您可以使用番石榴秒表来衡量执行时间

exec($runCMD."2>&1 1>/dev/null ",$out);