Подтвердить что ты не робот

Как найти время, необходимое для запуска Java-программы?

У меня есть Java-приложение, над которым я работаю, и я только что понял, что программа должна вернуть значение менее чем за минуту, но не знаю, как найти или отобразить время, затраченное на запуск программы. Как найти время, необходимое для запуска программы?

4b9b3361

Ответ 1

Вы можете сравнить время, используя System.nanoTime(). Это вернет время в наносекундах.

Возвращает текущее значение наиболее точного доступного системного таймера в наносекундах.

Вы можете использовать это так:

long startTime = System.nanoTime();

// code

long endTime = System.nanoTime();
System.out.println("Took "+(endTime - startTime) + " ns"); 

Полезные ссылки:

Ответ 2

Нет встроенного способа узнать, как долго работает ваша программа. Тем не менее, вы могли бы в начале программы просто сохранить текущее время, так что через некоторое время вы увидите, сколько времени прошло.

public class MyProgram {
    private static long startTime = System.currentTimeMillis();

    public static void main(String[] args) {
        // Do stuff...

        // At the end
        long endTime = System.currentTimeMillis();
        System.out.println("It took " + (endTime - startTime) + " milliseconds");
    }
}

Ответ 3

Если у вас есть Spring в качестве зависимости вашего проекта (или вы не против добавить его), вы можете использовать StopWatch. Как следует из названия, после инициализации он будет считать время, пока вы его не остановите. Затем вы можете проверить время, необходимое для выполнения задачи. Несколько StopWatches могут быть использованы одновременно для нескольких задач, сохраняя код в чистоте.

Помимо поддержания вашего кода в чистоте, StopWatches помогает с форматированием времени и другими служебными методами.

public void myMethod(){
    StopWatch stopWatch = new StopWatch();

    stopWatch.start("Task1");
    // ...
    // Do my thing
    // ...
    stopWatch.stop();
    System.out.println("Task executed in " + stopWatch.getTotalTimeSeconds() + "s");
}

Ответ 4

Если вы просто хотите узнать, как долго работает ваша программа, используйте System.currentTimeMillis() в начале и конце вашей программы.

Ответ 5

Вы можете использовать 2 API, предоставляемые классом System

  1. System.currentTimeMillis() Если код занимает время в миллисекундном диапазоне
  2. System.nanoTime() Если код занимает время в наносекундном диапазоне

Образец кода

public class TestTimeTaken {
    public static void main(String args[]) throws InterruptedException{
        long startTimeNanoSecond = System.nanoTime();
        long startTimeMilliSecond = System.currentTimeMillis();

        //code
        Thread.sleep(1000);
        //code

        long endTimeNanoSecond = System.nanoTime();
        long endTimeMilliSecond = System.currentTimeMillis();

        System.out.println("Time Taken in "+(endTimeNanoSecond - startTimeNanoSecond) + " ns");
        System.out.println("Time Taken in "+(endTimeMilliSecond - startTimeMilliSecond) + " ms");


    }
}

Ответ 6

Это типичная утилита для аспектов, например, Spring AOP:

@Aspect
public class TimerAspect {

    private static final Logger LOG = Logger.getLogger(TimerAspect.class);

    @Around("com.xyz.myapp.MyClass.myMethod()")
    public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
        long startTime = System.nanoTime();
        Object retVal = pjp.proceed();
        long endTime = System.nanoTime();
        LOG.info(String.format("Call to %s.%s with args %s took %s ns", pjp.getTarget(), pjp.getSignature(), Arrays.toString(pjp.getArgs()), endTime - startTime));
        return retVal;
    }
}

И в контексте вашего приложения:

<aop:aspectj-autoproxy/>
<bean id="myAspect" class="org.xyz.TimerAspect"/>   

Ответ 7

Мне нравится использовать класс Apache Commons StopWatch, когда у меня есть библиотека.

import org.apache.commons.lang3.time.StopWatch;

// ...

StopWatch stopWatch = new StopWatch();
String message = "Task : %s (%s) seconds";

// ...

stopWatch.split();
System.out.println(String.format(message, "10", stopWatch.toSplitString()));

// ...

stopWatch.split();
System.out.println(String.format(message, "20", stopWatch.toSplitString()));

stopWatch.stop();