Бенчмаркинг внутри Java кода

В последнее время я изучаю бенчмарки, меня всегда интересовало протоколирование данных программы и т.д. Мне было интересно узнать, можем ли мы реализовать наш собственный код использования памяти и реализовать наш собственный код потребления времени эффективно внутри нашей программы. Я знаю, как проверить, сколько времени требуется для выполнения кода:

public static void main(String[]args){
        long start = System.currentTimeMillis();
        // code
        System.out.println(System.currentTimeMillis() - start);
    }

Я также изучил Robust Java benchmarking, Part 1: Issues, это руководство очень полное. В нем показаны негативные последствия использования System.currentTimeMillis();. Затем учебник предлагает использовать System.nanoTime(); (что делает его более точным?).

Я также посмотрел Determining Memory Usage in Java на предмет использования памяти. На сайте показано, как это можно реализовать. Код, который был предоставлен, выглядит неэффективным, потому что человек вызывает

long L = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();

После этого он вызывает System.gc(); (4 * 4) = 16 раз. Затем повторяет процесс снова. Разве это также не занимает память?

Итак, можно ли реализовать эффективный код бенчмаркинга в java-программе?

18
задан Jonas 7 December 2011 в 22:59
поделиться