В последнее время я изучаю бенчмарки, меня всегда интересовало протоколирование данных программы и т.д. Мне было интересно узнать, можем ли мы реализовать наш собственный код использования памяти и реализовать наш собственный код потребления времени эффективно внутри нашей программы. Я знаю, как проверить, сколько времени требуется для выполнения кода:
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-программе?