2015-08-28 14 views
0

我想確定哪個程序在使用的術語內存和時間上更好更快。 我面對,我需要聲明一個變量的問題,我有兩個aproaches如何使用eclipse測量一個簡單的java程序的性能

  1. 使用靜態變量
  2. 使用默認的變量

我要測試的程序是速度更快,佔用更少的時間和記憶。

這可能是差異很小,但我仍然想知道哪個是快速程序。

他們無論如何都在使用它,我可以衡量一個簡單而複雜的程序的性能。

+2

可能[重複](http://stackoverflow.com/questions/2713940/eclipse-java-profiler)。 – npinti

+0

答案可能取決於您使用的JVM。或者如果你正在運行客戶端或服務器模式。或者如果你的意思是解釋模式或JIT'ed。可能還有你正在使用的操作系統。以及您正在運行的架構。我的建議:不要考慮它是否有意義*使變量靜態或不變。 – aioobe

+0

@aioobe感謝您的回覆和時間。我有一個共同的操作系統(窗口10)和Jvm(jdk 1.7。60)用於靜態變量和默認變量。所以我不認爲提供的輸入會影響性能。我真的很感激,如果你提供任何筆記的鏈接,我可以找到更多關於它的信息。我還有一個問題。它的編譯和處理時間取決於(不同的)不同的操作系統。如果答案是肯定的,那麼java如何獨立於平臺? –

回答

0

你如何做一個非常簡單和容易的基準?

long start = System.currentTimeMillis(); 
// do your operation 
System.out.println("operation took " + System.currentTimeMillis() - start + "milliseconds"); 

這會輸出操作花了多長時間。通常,如果操作不是那麼耗時,它不會檢測到任何差異。因此,你應該循環你想要進行基準測試的操作,比如10000次。

+0

我不認爲10000就足以確保JVM被熱身,並且測試的代碼片段已被(JIT)編譯。編寫JVM微型基準測試[很難](http://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark-in-java)。 – aioobe

+0

是的 - 我只是假設,他想要像'靜態int x = 5;'對'int x = 5;'進行基準測試,而不是一些複雜的計算 – Xenonite

1

您可以簡單地在操作前後使用System.currentTimeMillis()並找出差異。

但是,如果時差太小,您可能無法實現它。 (由於操作過程中的時間取決於各種其他因素)。您可能希望使用循環對大量(例如100萬次)運行相同的操作,並查找所需的平均時間。

或者您可以使用上面@ wa11a所述的一些外部分析器。

但請注意, 靜態變量在加載類時加載,其中正常變量在需要時加載(類加載後)。

因此,靜態變量會表現得更好,因爲它們已經加載了類並在那裏呆了很久。

但是,製作一個靜態變量有它自己的缺點。它不能通過使用OOP的概念來擴展。

靜態和默認變量有它們自己的用法。使用適合您的案例。

+1

靜態變量在class load時加載並持續很長時間它顯示靜態變量在處理時間上是好的,但是它增加了編譯時間並且耗費了更多的內存而不是默認變量。 –

相關問題