Статьи

Время выполнения измерения в Java — пример Spring StopWatch

Есть два способа измерить истекшее время выполнения в Java , используя System.currentTimeinMillis () или System.nanoTime (). Эти два метода могут использоваться для измерения прошедшего времени или времени выполнения между двумя вызовами метода или событием в Java. Вычисление истекшего времени — одна из первых вещей, которую Java-программист делает, чтобы узнать, сколько секунд или миллисекунд занимает выполнение метода или сколько времени занимает конкретный блок кода. Большинство программистов на Java знакомы с System.currentTimeInMillis (), которая существует с самого начала, в то время как в Java 1.5 представлена ​​новая версия более точной утилиты измерения времени System.nanoTime, а также несколько новых функций в языке, таких как Generics , типы Enum , auto бокс и переменные аргументы или переменные . Вы можете использовать любой из них для измерения времени выполнения метода в Java. Хотя лучше использовать System.nanoTime () для более точного измерения временных интервалов.
В этом руководстве по Java-программированию мы увидим простую Java-программу для измерения времени выполнения с помощью System.nanoTime () и служебного класса StopWatch фреймворка Spring. Эта статья является продолжением моего поста, посвященного фундаментальным концепциям Java, таким как « Как сравнивать String в Java» , « Как правильно писать метод equals в Java» и « 4 способа зацикливания HashMap в Java» . Если вы еще не прочитали их, вы можете найти их полезными.

Пример программы Java для измерения времени выполнения в Java

Вот пример кода для измерения прошедшего времени между двумя кодовыми блоками с использованием System.nanoTime, M любых библиотек Java с открытым исходным кодом, таких как Apache commons lang, Google commons и Spring, также предоставляет служебный класс StopWatch, который можно использовать для измерения прошедшего времени в Java . StopWatch улучшает читабельность, сводя к минимуму ошибки вычислений при расчете истекшего времени выполнения, но имейте в виду, что StopWatch не является поточно- ориентированным и не должен использоваться совместно в многопоточной среде, а в его документации четко сказано, что это больше подходит для разработки и тестирования, а не для базовых измерений производительности. выполнение расчета времени в производственной среде.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import org.springframework.util.StopWatch;
 
/**
 * Simple Java Program to measure elapsed execution time in Java
 * This Java Program shows two ways for measuring time in Java, by using System.nanoTime() which was
 * added in Java 5 and StopWatch which is a utility class from Spring Framework.
 */
public class MeasureTimeExampleJava {
 
  
 
    public static void main(String args[]) {
      
        //measuring elapsed time using System.nanoTime
        long startTime = System.nanoTime();
        for(int i=0; i < 1000000; i++){
            Object obj = new Object();
        }
        long elapsedTime = System.nanoTime() - startTime;
      
        System.out.println("Total execution time to create 1000K objects in Java in millis: "
                + elapsedTime/1000000);
      
        //measuring elapsed time using Spring StopWatch
        StopWatch watch = new StopWatch();
        watch.start();
        for(int i=0; i < 1000000; i++){
            Object obj = new Object();
        }
        watch.stop();
        System.out.println("Total execution time to create 1000K objects in Java using StopWatch in millis: "
                + watch.getTotalTimeMillis());
    
      
}
 
Output:
Total execution time to create 1000K objects in Java in millis: 18
Total execution time to create 1000K objects in Java using StopWatch in millis: 15
Какой из них вы должны использовать для измерения времени выполнения в Java
Это зависит от того, какие опции вам доступны, если вы работаете в версии ниже JDK 1.5, чем System.currentTimeInMillis () — лучший вариант с точки зрения доступности, тогда как после JDK 1.5 System.nanoTime отлично подходит для измерения истекшего времени, поскольку он более точен и использует точные системные часы и может измерять с точностью до нано секунды . в то время как если вы используете какую-либо из библиотек Java с открытым исходным кодом, упомянутых выше, в основном Spring, а не StopWatch также является лучшим вариантом, но, как я уже говорил, StopWatch не является поточно- ориентированным и должен использоваться только в среде разработки и тестирования. Так же, как SimpleDateFormat не является поточно-ориентированным, и вы можете использовать ThreadLocal для создания в каждом потоке SimpleDateFormat, вы можете сделать то же самое и с StopWatch. Но я не думаю, что StopWatch — это тяжелый объект, такой как SimpleDateFormat.
Это все о том, как измерить прошедшее время или время выполнения в Java . Получите привычку измерять производительность и время выполнения важных фрагментов кода, особенно методов или циклов, которые выполняются большую часть времени. Это те места, где небольшая оптимизация кода приводит к увеличению производительности.