60 likes | 199 Views
Profiling v Javě. Richard Lipka Department of Computer Science and Engineering Faculty of Applied Sciences University of West Bohemia, Pilsen , Czech Republic. Možnosti. Zachytávání událostí JVM Tools Interface API
E N D
Profiling v Javě Richard Lipka Department of Computer Science and Engineering Faculty of Applied Sciences University of West Bohemia, Pilsen, Czech Republic
Možnosti • Zachytávání událostí • JVM Tools Interface API • Lze poslouchat libovolné události v programu / JVM a reagovat spuštěním vlastního programu • Vzorkování • Aktuální stav VM a heapdump • Instrumentace bytecode / programu • Doplnění sledovacích instrukcí • Ručně • Vlastní instrumentace
Ruční měření • Sledování času • currentTimeMilis() – čas v milisekundách • nanoTime() – „čas“ v nanosekundách (ale trvá cca 20* déle), vlastní timer • Vzorkování • Thread.getStackTrace() – kde jsem ve vlákně (lze i z konzole – jstack <pid>) • Sledování paměti • freeMemory(), totalMemory(), maxMemory() – lze použít za běhu programu • Jmap a JHat – k dispozici v JRE, kompletní memorydump • -XX: parametry (PrintClassHistogram, …)
VisualVM • Součást NetBeans, existuje i samostatná verze a plugin do Eclipse • Sleduje • Běh aplikace (stav vláken v čase) • Profilování CPU (co se právě dělá, kde aplikace tráví čas) • Profilování paměti (jaké objekty se vytváří)
VisualVM a NetBeans • Integrováno podobně jako debugger • Lze vložit profilovací body • Lze nastavit podmínky pro spouštění akcí • Snapshot systému • Memorydump • Dokáže procházet a zpracovávat heap • Přehled všech tříd a instancí, počty instancí … • Analýza referencí • OQL jazyk pro hledáníselecta fromjava.util.LinkedListawherea.size > 10