2013-03-06 8 views
8

Ho usato JProfiler per analizzare un pezzo di codice Java che chiama codice C nativo tramite JNI e sto ottenendo strani risultati dalla finestra "CPU Views". In particolare, le informazioni sulla scheda "Call Tree" mi dicono che il metodo Java che chiama il codice nativo consuma la frazione più alta del tempo di esecuzione, ma la scheda "Hot Spots" non elenca nemmeno quel metodo. Ho anche notato una storia simile per le classi org.joda.time, che hanno una frazione relativamente ampia della CPU ma non sono segnalate come hot spot, e mi chiedo se questo è perché passano molto tempo a chiamare codice di conversione della data nativa.La vista "Hot Spot" del jprofiler tiene conto correttamente della CPU consumata dal codice nativo chiamato attraverso JNI?

Qualsiasi comprensione di questo problema sarebbe apprezzata.

EDIT: Ho appena scoperto un documento accademico molto inquietante intitolato "Valutazione dell'accuratezza dei profiler Java" (fornirei un collegamento, ma sembra che il server dell'Università del Colorado a cui fa riferimento il risultato di Google per questo file sia molto infelice ora, quindi ho dovuto estrarre una copia dal link "Quick View" di Google). Ho il sospetto che il problema con i metodi nativi sia che vengono sovrastimati perché ci sono molte chiamate per loro, sono brevi e la chiamata probabilmente determinerà un punto di snervamento; tuttavia, non sono sicuro se lo stesso si applicherebbe alle routine di conversione del tempo. Si noti che ottengo risultati significativamente diversi quando si usano la profilazione strumentata e la profilazione campionata per la stessa esecuzione di test, ei risultati strumentati concordano meglio con la mia intuizione. Raccomando la carta a chiunque si sia mai trovato a grattarsi la testa sui risultati di una corsa di profilazione. Sperando ancora che qualcuno abbia più informazioni su questo; "il profiler è sbagliato" non è un risultato molto confortante.

EDIT 2: Sembra che colorado.edu si è risolto, ecco il link: http://www-plan.cs.colorado.edu/klipto/mytkowicz-pldi10.pdf

risposta

2

I punti caldi visualizzare i metodi spettacoli con grande tempo intrinseco. Nella vista ad albero delle chiamate vedete i metodi con un tempo totale lungo nella parte superiore dell'albero delle chiamate. Questi metodi di solito non sono punti caldi.

Ciò che viene considerato come "tempo intrinseco" dipende da come sono configurati i filtri.

Si prega di vedere this help topic per una spiegazione approfondita.