2011-07-11 45 views
26

Đối với những người đã quen với java, tôi có một ứng dụng mà tôi đã làm việc và chỉ nhận ra rằng chương trình phải trả về một giá trị trong chưa đầy một phút, nhưng không biết cách tìm hoặc hiển thị thời gian thực hiện để chạy chương trình. Bất kỳ sự giúp đỡ này sẽ được đánh giá rất nhiều. Cảm ơnCách tìm thời gian để chạy chương trình java?

+0

Bạn muốn nói "Cách tìm thời gian để chạy chương trình java?" ? –

+0

@Harry Joy yeah đúng như ý tôi. – MK1

+0

Tôi xin lỗi nhưng câu hỏi của bạn chưa đủ rõ ràng. Tôi nghĩ rằng nhật thực là không liên quan ở đây. Thời gian chạy cũng không liên quan vì nó gây nhầm lẫn. JDK có lớp Runtime và bạn có thể nhận được cá thể singleton của nó bằng cách gọi Runtime.getRuntime() nhưng nó có vẻ không phải là những gì bạn đang tìm kiếm. Vui lòng thử nghĩ lại câu hỏi của bạn và viết lại. – AlexR

Trả lời

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

Xem

+2

Cảm ơn Jigar. Câu trả lời của bạn thực sự là quan trọng. – chepukha

+0

có lý do ;; và Sysout? – user227353

+0

không có lỗi đánh máy, sửa chữa –

12

Không có cách nào built-in để xem cho chương trình của bạn đã được chạy trong bao lâu. Tuy nhiên, bạn có thể vào lúc bắt đầu của chương trình chỉ cần lưu trữ thời gian hiện tại, do đó đôi khi sau đó bạn có thể thấy bao nhiêu thời gian đã trôi qua.

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"); 
    } 
} 
1

Nếu bạn chỉ muốn biết chương trình của bạn chạy bao lâu System.currentTimeMillis() ở đầu và cuối chương trình.

0

Đây là một usecase điển hình cho các khía cạnh, ví dụ sử dụng 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; 
    } 
} 

Và trong bối cảnh ứng dụng của bạn:

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

Nếu bạn có mùa xuân như phụ thuộc của dự án của bạn (hoặc don' t tâm thêm nó), bạn có thể sử dụng StopWatch. Như tên cho thấy, một khi được khởi tạo, nó sẽ đếm thời gian cho đến khi bạn dừng nó lại. Sau đó, bạn có thể kiểm tra thời gian đã thực hiện cho một tác vụ. Nhiều Đồng hồ bấm giờ có thể được sử dụng đồng thời cho nhiều tác vụ giữ mã sạch.

Bên cạnh việc giữ mã của bạn sạch sẽ, StopWatches giúp định dạng thời gian và các phương pháp tiện ích khác.

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

    stopWatch.start("Task1"); 
    // ... 
    // Do my thing 
    // ... 
    stopWatch.stop(); 
    System.out.println("Task executed in " + StopWatch.getTotalTimeSeconds() + "s"); 
} 
Các vấn đề liên quan