Korzystając z JProfiler, zidentyfikowałem hot spot w moim kodzie Java, którego nie mogę zrozumieć. JProfiler wyjaśnia, że ta metoda zajmuje średnio 150 μ s (674 s bez rozgrzewki), nie wliczając czasu potrzebnego na wywołanie metod potomnych. 150 μ s może nie wydawać się wiele, ale w tej aplikacji sumuje się (i jest doświadczany przez moich użytkowników), a także wydaje się dużo w porównaniu do innych metod, które wydają mi się bardziej skomplikowane niż ten. Dlatego to dla mnie ważne.Metoda Java zajmuje pozornie dużo czasu, którego nie mogę obliczyć na
private boolean assertReadAuthorizationForFields(Object entity, Object[] state,
String[] propertyNames) {
boolean changed = false;
final List<Field> fields = FieldUtil.getAppropriatePropertyFields(entity, propertyNames);
// average of 14 fields to iterate over
for (final Field field : fields) {
// manager.getAuthorization returns an enum type
// manager is a field referencing another component
if (manager.getAuthorization(READ, field).isDenied()) {
FieldUtil.resetField(field.getName(), state, propertyNames);
changed = true;
}
}
return changed;
}
Ja sam zminimalizowałem tę metodę w różnych kierunkach, ale nigdy nie uczyłem się zbyt użytecznego. Nie mogę wystarczająco podkreślić, że raportowany przez JProfiler czas trwania (150 μ s) dotyczy jedynie kodu w tej metodzie i nie zawiera czasu potrzebnego na wykonanie getAuthorization
, isDenied
, resetField
i innych. Właśnie dlatego zaczynam od opublikowania tego fragmentu, bez większego kontekstu, ponieważ wydaje się, że problem dotyczy tego kodu, a nie jego kolejnych wywołań metod potomnych.
Może możesz argumentować, dlaczego – jeśli czujesz, że widzę duchy :) W każdym razie dziękuję za poświęcony czas!
Profilowanie wymaga okresu rozgrzewania (w przypadku JIT). Rozgrzewasz? Czy JIT jest wyłączony? – Java42
To jest dobra uwaga. Chociaż wiedziałem o tym, być może upuściłem piłkę. Będę aktualizował mój post, a wraz z ilością czasu potrzebnego na rozgrzewkę podzielę się tym, czy nadal uważam, że jest zbyt duży ... może powinienem usunąć pytanie ... może nie :) –
Czy używasz próbkowania CPU lub dynamicznego oprzyrządowania z JProfiler? –