Utilizzando JProfiler, ho identificato un punto caldo nel mio codice Java a cui non riesco a dare un senso. JProfiler spiega che questo metodo richiede in media 150 μ s (674 μ s senza riscaldamento), senza contare il tempo necessario per chiamare i metodi discendenti. 150 μ s potrebbe non sembrare molto, ma in questa applicazione si aggiunge (ed è sperimentato dai miei utenti) e sembra anche molto, rispetto ad altri metodi che mi sembrano più complessi di questo. Quindi è importante per me.Il metodo Java richiede parecchio tempo che non riesco a giustificare
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;
}
Ho minimizzato questo metodo in diverse direzioni, ma non mi è mai stato di grande aiuto. Non posso sottolineare abbastanza che la durata riportata da JProfiler (150 μ s) riguarda solo il codice in questo metodo e non include il tempo necessario per eseguire getAuthorization
, isDenied
, resetField
e così via. Questo è anche il motivo per cui inizio con la pubblicazione di questo frammento, senza molto contesto, poiché il problema sembra essere con questo codice e non con le sue successive chiamate al metodo discendente.
Forse si può discutere perché – se si sente che sto vedendo fantasmi :) Comunque, grazie per il vostro tempo!
Il profilo richiede un periodo di riscaldamento (per JIT). Ti stai riscaldando? JIT è disabilitato? – Java42
Questo è un buon punto. Anche se lo sapevo, forse avrei lasciato cadere la palla lì. Aggiornerò il mio post, e con il tempo necessario dopo alcuni round di riscaldamento, sono diviso sull'opportunità o meno che sia eccessivo ... forse dovrei eliminare la domanda ... forse no :) –
Stai usando il campionamento della CPU o la strumentazione dinamica con JProfiler? –