groovy static vs dynamic typed

Używając groovy, a nie korzystając z dynamicznych typów można sporo zaoszczędzić na szybkości wykonania programu.

Poniższy prosty przykład:

long staticTyped() {
  long startTime = System.currentTimeMillis()
  double val
  for (i in 0..<100000) {     double t1 = System.currentTimeMillis()     double valTmp = i/t1 + Random.newInstance().nextDouble()       if (val < valTmp) {       val = valTmp     }   } System.currentTimeMillis()-startTime } def dynamicTyped() {   def startTime = System.currentTimeMillis()   def val   for (i in 0..<100000) {     def t1 = System.currentTimeMillis()     def valTmp = i/t1 + Random.newInstance().nextDouble()     if (val < valTmp) {       val = valTmp     }   } System.currentTimeMillis()-startTime } println "static typed time "+staticTyped() println "dynamic typed time "+dynamicTyped()

skutkuje w moim przypadku następującym rezultatem:

static typed time 137
dynamic typed time 1889

co jak łatwo zauważyć jest 14-sto krotną różnicą w szybkości wykonania :)

Co BARDZO ciekawe:
zmieniając deklaracj? (w pętli)
z
double t1 = System.currentTimeMillis()
na
long t1 = System.currentTimeMillis()
wynikuje także dramatycznym spadkiem prędkości wykonania (resultat na poziomie 1566ms).

Warto więc przy kilku obliczeniach sprowadzić zmienne do tego samego typu.

Informacje o @albgorski

Od 1999 roku profesjonalnie zajmuję się rozwijaniem oprogramowania. Głównie Java, ale także Groovy, PHP, HTML, JavaScript oraz Adobe Flex. Fascynują mnie metody wymiany danych, ich przechowywania oraz dostępowania. Jestem WIELKIM zwolennikiem Clean Code, TDD oraz agilistą (może lepiej lean-istą). Ekosystem Java dostarcza WIELE świetnych frawework-ów i bibliotek, a społeczność miłośników języka Java jest najlepsza pod słońcem :)
Ten wpis został opublikowany w kategorii groovy i oznaczony tagami , , , , , , , . Dodaj zakładkę do bezpośredniego odnośnika.

Możliwość komentowania jest wyłączona.