Есть два способа измерить истекшее время выполнения в 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: 18Total 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 . Получите привычку измерять производительность и время выполнения важных фрагментов кода, особенно методов или циклов, которые выполняются большую часть времени. Это те места, где небольшая оптимизация кода приводит к увеличению производительности.
Ссылка: Как измерить истекшее время выполнения в Java — Пример StopWatch от нашего партнера JCG Джавина Пола в блоге Javarevisited .