2016-03-24 25 views
4

Daha hızlı yöntem nedir?Daha hızlı nedir? System.currentTimeMillis() veya Date(). GetTime()?

System.currentTimeMillis() 

veya

new Date().getTime()? 

geçen süre bilmek daha hızlı çözüm var mı?

+1

Daha hızlı ile ne demek istiyorsun? Daha az CPU döngüsünde olduğu gibi? Neden fark eder? System.nanoTime() 'yi kullanarak daha doğru bir yöntem var ama yine de iki kez almanız ve _elapsed_ zamanını kendiniz hesaplamanız gerekiyor. – Thomas

+1

[Java'da geçen süreyi nasıl ölçerim?] (Http://stackoverflow.com/questions/1770010/how-do-i-measure-time-elapsed-in-java). –

+0

Uzun kullanıyorum = System.currentTimeMillis(); long elapsedTime = now - prevTime; ' – Igor

cevap

9

Bunu yaparsanız

new Date() 

o

/** 
* Allocates a <code>Date</code> object and initializes it so that 
* it represents the time at which it was allocated, measured to the 
* nearest millisecond. 
* 
* @see  java.lang.System#currentTimeMillis() 
*/ 
public Date() { 
    this(System.currentTimeMillis()); 
} 

çağırır yüzden System.currentTimeMillis (aramaları) VE derhal atmak bir nesne oluşturur.

Çok şanslıysanız, kaçış analizi gereksiz nesneyi kaldıracak ve performans hemen hemen aynı olacaktır.

long start = System.currentTimeMillis(); 
// do something 
long time = System.currentTimeMillis() - start; 

Notlar

Ancak, ben devreye girer Analizi Escape farz olmaz ve sadece aramak:

  • nesne oluşturma hızlı olduğunu ve gereksiz olsa bile bir Date nesnesi küçük ve oluşturmak için ucuz. Bununla birlikte, a) sisteminizde bulunan nesnelerin sayısına ve b) bellek profilini denerseniz, testinizdeki genel gürültüye katkıda bulunur. Varyasyonu azaltmak (ve kodunuzu hızlandırmak) için, bellek ayırmalarını, özellikle de gereksiz olanları azaltmak istiyorsunuz.
  • Bu yalnızca 1 ms için geçerlidir ve sisteminiz çalışırken bu süreyi düzeltirse, yanlış olabilir (hatta negatif) Ancak, nadiren bunu dramatik bir şekilde yapar ve saatin yavaş yavaş zamanını düzeltir küçük bir yüzdeyle olabilir. Sistemdeki diğer şeylere bağlı olarak zamandaki değişim göz önüne alındığında, bu en büyük sorun olsaydı çok şanslı olurdu.
  • System.nanoTime() bunun yerine kullanılabilir, ancak bu kendi başına bir kayma olabilir. Daha uzun bir süre örn. saat, System.currentTimeMillis() daha doğru olabilir. Bir mikro ölçüt yazmayı deniyorsanız
  • kodun ısındığından emin olabilirsiniz. Örneğin, bu aşamada kodun ısınmaması için iyi bir şans olduğu için ilk 2 - 10 saniyeyi göz ardı edin.
İlgili konular