Ho un server con memoria da 72 GB in esecuzione, è stato utilizzato Java 7 con GC parallelo e dimensioni heap in 25G. Ma dopo il passaggio a Java 8, un'attività particolare diventa molto più lenta. In pratica, l'attività legge un file di circa 15 GB in memoria e aggiorna alcuni dati rilevanti nel DB. Di solito ci vuole circa un'ora per completare il lavoro, ma dopo Java 8, diventa 1,5 ore.GC in Java 8 diventa ovviamente più lento rispetto a Java 7
ho provato:
- Aumentare la dimensione heap a 50 GB => non aiuta algoritmo
- Variazione GC da parallelo a CMS, diventa ancora più lento (1,8 ore)
Quindi io sono non so da dove posso iniziare a dare un'occhiata, la libreria java per eseguire l'attività è ancora compilata in Java 7 ma non sono sicuro se questo sia rilevante? Dopo il passaggio a Java 7, le prestazioni sono appena tornate.
Hai eseguito un profiler contro la tua applicazione? Quali librerie di terze parti stai usando per caricare questo file? –
L'ultimo Java 7? L'implementazione se le sottostringhe sono cambiate! Prova a confrontare i benchmark tra i due per vedere dove è andata la performance. –
Qualsiasi cosa impieghi tanto tempo trarrebbe beneficio dalla profilazione. (Qualsiasi cosa che richiede più di un minuto dovrebbe essere profilata IMHO) –