J'ai utilisé Yourkit 8.0 pour profiler une application mathématiquement intensive fonctionnant sous Mac OS X (10.5.7, Apple JDK 1.6.0_06-b06-57), et j'ai remarqué des étranges comportement dans les résultats de profilage du processeur. Par exemple - J'ai effectué une analyse de profilage en utilisant l'échantillonnage, qui a indiqué que 40% du temps d'exécution de 10 minutes de l'application était passé dans la méthode StrictMath.atan. J'ai trouvé cela déroutant, mais je l'ai pris à son mot et a passé un peu de temps en remplaçant atan avec un ajustement polynomial extrêmement simple. Lorsque j'ai réexécuté l'application, cela a pris presque exactement la même durée qu'avant (10 minutes) - mais mon remplacement atan ne s'est révélé nulle part dans les résultats de profilage. Au lieu de cela, les pourcentages d'exécution des autres hotspots majeurs ont simplement augmenté pour compenser.Profiling méthodes natives en Java - résultats étranges
Pour résumer:
RESULTATS AVEC StrictMath.atan (méthode native)
d'exécution Total: 10 minutes
Méthode 1: 20%
Méthode 2: 20%
Méthode 3: 20%
StrictMath.atan: 40%
RÉSULTATS AVEC Java simplifiée, pur atan
Durée d'exécution totale: 10 minu tes
Méthode 1: 33%
Méthode 2: 33%
Méthode 3: 33%
(Méthodes 1,2,3 ne pas effectuer des appels atan)
Toute idée est avec ce comportement? J'ai obtenu les mêmes résultats en utilisant JProfiler d'EJ-Technologies. Il semble que l'API de profilage JDK signale des résultats inexacts pour les méthodes natives, au moins sous OS X.
Je ne serais pas surpris si 'atan' était intrinsèque - au lieu d'appeler une méthode, le code machine équivalent est injecté en ligne. –
Je l'ai expérimenté aussi avec différentes méthodes dans StrictMath sur Mac OS X 10.7 (et versions antérieures aussi). –
Alors, y a-t-il une solution à ce problème? – ziggystar