Ich habe Yourkit 8.0 verwendet, um eine mathematisch intensive Anwendung unter Mac OS X (10.5.7, Apple JDK 1.6.0_06-b06-57) zu erstellen Verhalten in den CPU-Profilergebnissen.Profilieren von nativen Methoden in Java - seltsame Ergebnisse
Zum Beispiel - Ich habe einen Profiling-Lauf mit Sampling, die berichtet, dass 40% der 10-Minuten-Laufzeit der Anwendung in der StrictMath.atan-Methode ausgegeben wurde. Ich fand das rätselhaft, aber ich nahm es bei seinem Wort und verbrachte etwas Zeit damit, atan durch eine extrem einfache polynomische Anpassung zu ersetzen.
Wenn ich die Anwendung erneut ausgeführt habe, dauerte es fast genau die gleiche Zeit wie zuvor (10 Minuten) - aber mein atan Ersatz zeigte sich nirgends in den Profilergebnissen. Stattdessen stiegen die Prozentsätze für die Laufzeit der anderen großen Hotspots einfach, um das auszugleichen.
Zusammengefasst:
ERGEBNISSE MIT StrictMath.atan (native Methode)
Gesamtlaufzeit: 10 Minuten
Methode 1: 20%
Methode 2: 20%
Methode 3: 20%
StrictMath.atan: 40%
ERGEBNISSE MIT vereinfachte, reine Java-atan
Gesamtlaufzeit: 10 minu TES
Methode 1: 33%
Methode 2: 33%
Methode 3: 33%
(Methods 1,2,3 führen keine atan Anrufe)
Jede Idee, was mit diesem Verhalten? Die gleichen Ergebnisse erzielte ich mit dem JProfiler von EJ-Technologies. Es scheint, als ob die JDK-Profilerstellungs-API, zumindest unter OS X, ungenaue Ergebnisse für native Methoden meldet.
Ich wäre nicht überrascht, wenn 'atan' ein intrinsischer wäre - anstatt eine Methode aufzurufen, wird der entsprechende Maschinencode inline injiziert. –
Ich habe dies auch mit verschiedenen Methoden in StrictMath unter Mac OS X 10.7 (und früheren Versionen) auch erlebt. –
Gibt es also eine Lösung für dieses Problem? – ziggystar