2016-03-19 24 views
0

Zamanın ve bellek kullanımı açısından hem de, bir performansını ölçmek isteyen aşağıdaki kod parçası vardır: large-file.txt 2,000,000 hatları ile bir dosyaBu kod parçasının performansı nasıl ölçülür?

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")); 
    } 
} 

.

Performansı nasıl ölçeceğimi gerçekten bilmiyorum. Bir profiler kullanmalı mıyım (programın çok kısa bir süre çalıştığı bir profiler kullanabilir miyim?), Ya da kod boyunca System.nanoTime()'u kullanmak yeterli olur ve bir kaç ortalama performans elde etmek için programı defalarca çalıştırır mıyım? Bu, bellek kullanımı açısından yardımcı olmaz - büyük dosyanın belleğe yüklenmesinden önce ve sonra Runtime.totalMemory() çağrılarını kullanamıyorum.

+3

ölçmek için Guava kronometreyi kullanabilirsiniz. Heres ilgili bir yazı: http://stackoverflow.com/questions/2441079/java-performance-measurement –

cevap

1

Bu tür şeyler göründüğünden daha doğru olsun aslında çok daha zordur Ölçme yürütme zamanı

Stopwatch stopwatch = new Stopwatch().start(); 
method call(); 
System.out.println(stopwatch.stop()) 
İlgili konular