Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Crotaphytus
Anmeldungsdatum: 08.05.2005 Beiträge: 213
|
Verfasst am: 21. Jun 2005 18:39 Titel: Laufzeit |
|
|
Und mal wieder ein höchst seltsames Phänomen, das ich mir nicht so recht erklären kann...
Zum Vergleich von verschiedenen Hashfunktionen werden diese in ner Schleife jeweils 1000 mal aufgerufen und die Dauer dieser Schleife mit Hilfe der Funktion nanoTime() ermittelt. So weit so gut...
Jetzt kommts aber zu folgendem sehr interessanten Effekt: Wenn man den ganzen Block (also Schleife und Zeitmessung) n paar mal hintereinander ausführt scheint die Funktion schneller zu werden. Und zwar nicht nur unwesentlich, sondern um etwa den Faktor 20... Irgendwelche Ideen, woran das liegen könnte? _________________ Genie oder Wahnsinn? Wer kann es wissen... |
|
Nach oben |
|
|
|
Tobias
Anmeldungsdatum: 15.02.2005 Beiträge: 149
|
Verfasst am: 22. Jun 2005 01:00 Titel: |
|
|
Könnte an der internen Verarbeitung des Algorithmus durch die virtuelle Maschine liegen. Wenn intelligente Cache-Operationen am werkeln sind, dann wirds schonmal schneller. Ansonsten sind natürlich deine Angaben etwas dürftig um es vollständig nachvollziehen zu können. |
|
Nach oben |
|
|
Crotaphytus
Anmeldungsdatum: 08.05.2005 Beiträge: 213
|
Verfasst am: 22. Jun 2005 13:48 Titel: |
|
|
Was würdest denn gerne wissen um es besser nachvollziehen zu können? Also am Hashalgorithmus selber kann denk ich nicht mehr so viel optimiert werden, zumindest einer davon besteht nur aus ner Multiplikation und ner Schiebeoperation.
Und was das seltsame ist: Bei den erstern tausend Durchläufen komm ich auf ne bestimmte Laufzeit pro Durchlauf. Bei den nächsten tausend nimmt die Laufzeit ein wenig ab, bei den dritten tausend hat man schließlich den heftigen Unterschied. Wenn da Sachen optimiert werden würden müsst sich das doch eigentlich früher bemerkbar machen... _________________ Genie oder Wahnsinn? Wer kann es wissen... |
|
Nach oben |
|
|
Tobias
Anmeldungsdatum: 15.02.2005 Beiträge: 149
|
Verfasst am: 22. Jun 2005 16:25 Titel: |
|
|
Nein, ich meine keine Code-Optimierung sondern Cache-Optimierung. Es geht viel Zeit verloren beim Einlesen des Codes + Interpretation des Codes. Wenn du nun immer denselben Code ausführst, dann könnten diese beiden Punkte wegfallen bzw. mit weniger Aufwand durchgeführt werden weils schonmal gemacht wurde.
Aber das ist nur eine Vermutung. Genaues kann ich dir nicht sagen. |
|
Nach oben |
|
|
Gast
|
Verfasst am: 28. Okt 2005 01:44 Titel: |
|
|
Ich denke, dass da einfach die HotSpot Technik greift. Normalerweise wird ja per JIT das ganze auf die Maschine während der Laufzeit kompiliert und die VM führts dann halt entsprechend aus. Werden dagegen gewisse Blöcke öfters ausgeführt, die auch etwas Zeit brauchen, so kommt HotSpot ins Spiel. Bei dieser Technik wird die JIT-Übersetzung für die VM nochmals optimiert, z.B. indem schnellerer Code bei etwas höherem RAM-Bedarf erzeugt wird. Dies führt dann dazu, dass Code der eben häufiger gebraucht wird, schneller abgearbeitet werden kann und ich denke zusammen mit eventuellen Caching-Operationen, kann das schon Performance-Vorteile bringen.
Eventuell ist die Laufzeit ja eh schon recht gering und ab und zu rückt ja auch der GC aus, vllt wird der GC-Thread dann mal nicht ausgeführt und somit läufts schneller. |
|
Nach oben |
|
|
|