Come vedere quali parti del codice vengono eseguite più spesso?

11

Mi piacerebbe essere in grado di vedere quale codice in migliaia di righe di codice sorgente viene eseguito più spesso e richiede più tempo. Lo scopo di questo sarebbe l'ottimizzazione.

Essere in grado di vedere quali parti del codice vengono eseguite più spesso è importante per l'ottimizzazione, perché quelle parti sono dove dovrei concentrarmi per accelerare. Allo stesso tempo, naturalmente, alcuni codici vengono eseguiti molto spesso ma non hanno praticamente tempo, quindi è anche importante poter vedere quale codice impiega più tempo.

Immagino che il meglio di entrambi i mondi sia un programma che sommi la quantità di tempo che un pezzo di codice impiega, incluse TUTTE le volte che è stato eseguito (quindi per capire cosa rallenta il tuo codice nel complesso). C'è un tipo di strumenti per questo?

    
posta sinθ 10.08.2013 - 03:14
fonte

1 risposta

15

Quello che stai cercando è profilazione :

In software engineering, profiling ("program profiling", "software profiling") is a form of dynamic program analysis that measures, for example, the space (memory) or time complexity of a program, the usage of particular instructions, or frequency and duration of function calls. The most common use of profiling information is to aid program optimization.

Ci sono molte di queste applicazioni. A volte, questi sono integrati nell'IDE stesso. L'ide netbeans è uno di questi strumenti che ha un profiler integrato.

Unaltrostrumentodiquestotipoè visual vm .

Iprofilerpossonolavorareinmodidiversieunodeveessereconsapevoledelledifferenze.Unapproccioèognisecondoperfareunosnapshotdeithreadinesecuzioneevederequalimetodivengonoattualmenterichiamatiperognithread.Questoutilizzauncampionamentodiciòcheèlàfuori.

L'altroapproccioè instrument the java bytecode per segnalare l'inizio e interrompi il tempo a un'altra applicazione.

Scrivere un profiler non è molto difficile per un java esperto. IBM ha un articolo sulla scrittura del proprio profiler (con codice sorgente !). Questo è basato sul Java Interactive Profiler .

Ci sono una moltitudine di profiler là fuori - sia liberi che commerciali (che ne dite di un profiler collegato alle istanze JVM in esecuzione che possono riferire a voi (e-mail o altre notifiche) quando determinati metodi superano il runtime previsto? fino a un programma che riporta quando le richieste web hanno richiesto troppo tempo - il profilo storico per tale richiesta è stato salvato per un'ispezione successiva?). Devi solo sapere cosa stai cercando per iniziare a trovarli e andare da lì.

Una volta ottenuto il profiler, sei pronto per interpretare i risultati del profilo .

    
risposta data 10.08.2013 - 03:58
fonte

Leggi altre domande sui tag