Sono in procinto di eseguire il porting su un determinato algoritmo di elaborazione dati da Java a C++. La ragione per riscrivere il codice è la portabilità, deve essere eseguita in ambienti in cui Java non è disponibile. Tuttavia, come beneficio a parte, era previsto un miglioramento delle prestazioni.Quanto costa caro .getClass() in Java?
In sostanza, l'algoritmo legge i dati da un grafico costituito da oggetti con puntatori e calcola un risultato. Durante il calcolo vengono effettuate numerose assegnazioni di oggetti, quindi forse questo è responsabile del rallentamento. Il fatto è che il codice C++ attualmente funziona circa 10 volte più velocemente del vecchio codice Java. Questo è stato davvero inaspettato. Ho solo pensato di vedere un miglioramento di circa il 50-60%.
Purtroppo, non sono libero di inserire qui il codice per l'analisi. Sono diverse migliaia di righe, quindi non sono sicuro di quanto sarebbe comodo comunque.
Il fatto è che l'algoritmo è quasi esattamente lo stesso. L'unica grande differenza che posso pensare è in Java ci sono molte classi figlie di una singola super classe e se (object.getClass() == daughterx.class) viene chiamata più volte durante il calcolo mentre nel codice C++ solo una generale la classe è usata (poiché ci sono poche differenze di codice tra le classi figlie) e viene usato un semplice confronto di interi, ad es. if (oggetto-> tipo == 15)
Quanto è costoso il metodo Object.getClass() in Java? Cosa sta succedendo esattamente al livello basso quando viene invocato questo metodo?
@ xlc0212 Né sono una qualsiasi delle altre persone che non capiscono Java ! ;) – cheeken
@cheeken dipende dalla JVM, senza JIT, ricordo di aver letto da qualche parte che Java è anche più lento di python –
Onestamente questo suona come un non-problema. Vale la pena dedicare tempo al benchmark e al profilo del codice deprecato? A meno che tu non lo abbia fatto, non c'è modo di sapere che '.getClass()' è il collo di bottiglia. Indovinare non è un modo utile per eseguire il debug dei problemi di prestazioni, a meno che non sia possibile ridurre in modo significativo la complessità complessiva di un algoritmo (passando da un'operazione N al quadrato a un'operazione di log-N) e il set di dati è molto grande. –