Anzahl Methodenaufrufe

Status
Nicht offen für weitere Antworten.

padde479

Bekanntes Mitglied
Hallo zusammen,

ich habe eine Frage zu Methodenaufrufen. Ich lasse meine Anwendung mit dem Profiler -Xrunhprof laufen. Wenn ich das zweimal hintereinander mache, ohne auch nur die geringste Kleinigkeit an dem Programm zu ändern, bekomme ich andere Ergebnisse. Alle Parameter bleiben gleich, aber der Profiler zeigt mir unterschiedliche Anzahl von Methodenaufrufen an. Woran kann das denn liegen? An der JVM? Am Native Compiler?
 
am "Sampling"

das ist so eine Art: zufällig alle 10 Millisekunden mal hinschauen, und dann notieren wo sich die JVM gerade befindet
 
Das verstehe ich aber nicht. Wenn ich an einem Programm nichts ändere sondern es lediglich zweimal Aufrufe, wie kann es dann sein, dass der Profiler mir unterschiedliche Daten liefert. Schließlich ändere ich doch nichts am Programm. Dann kann es doch auch nicht sein, dass beim ersten Lauf die Methode xy beispielsweise 1000 mal aufgerufen wird, beim zweiten Lauf hingegen 900 mal.

Liegt das vielleicht daran, dass der Binärcode in Nativecode umgewandelt wird? Oder liegt das irgendwie an der Speicherallozierung? Ist doch schon irgendwie komisch, oder? Im Netzt findet man dazu auch irgendwie nicht wirklich was hilfreiches.

Übrigens nutze ich den Profiler mit folgenden Optionen

Code:
-Xrunhprof:cpu=times,thread=y,cuttof=0,format=a
 
Hat doch Bleiglanz gerade erklärt :-/

Das ist keine echte Zählung, das ist nur eine Schätzung aufgrund einiger Stichproben. Wann die Stichproben entnommen werden ist relativ zufällig. (Edit: jedenfalls arbeiten die mir bekannten Profiler so, ich vermute mal, das wird hier nicht anders sein).
 
du kannst ja eine membervariable hochzählen wenn deine methode aufgerufen wird und am ende ausgeben. die wird dann wohl immer gleich sein..
 
Das hat mit den Stichproben usw. doch gar nichts zu tun. Wenn ein Programm ausgeführt wird im unveränderten Zustand, dann kann man doch (rein logisch betrachtet) keine unterschiedlichen Ergebnisse bekommen, oder?
 
Beni hat gesagt.:
Das ist keine echte Zählung, das ist nur eine Schätzung
versuche es doch mal mit einem counter, dann siehst du, ob die methoden jedesmal geich oft aufgerufen werden :wink:

[edit] es werden doch nicht immer dieselben stichproben genommen. (dann wären es ja auch keine stichproben mehr) [/edit]
 
Muss mich entschuldigen, "cpu=times" hab ich wohl irgendwie überlesen 😳

Dann bleibt mir zu fragen: benutzt du irgendwelche Systemressourcen oder machst du was mit Multithreading? Die Position der Maus, System.currentTimeMillis(), oder auch nur wielange ein Thread wartet / wie schnell er ist; das ändert sich ständig.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben