Qualche giorno fa ho letto un articolo molto interessante: –“How Memory Leaks Happen in a Java Application”–.
Uno dei vantaggi del linguaggio Java è quello di gestire la deallocazione degli oggetti in maniera automatica attraverso il “garage collector”. In particolari circostanze questa gestione può fallire e possono verificarsi dei memory leak.
In informatica, un memory leak (“perdita o fuoriuscita di memoria”) è un particolare tipo di consumo non voluto di memoria dovuto alla mancata deallocazione dalla stessa, di variabili/dati non più utilizzati da parte dei processi. (Wikipedia)
I memory leak non dipendono da una errata implementazione del garbage collector, ma da un uso improprio degli oggetti costruiti dall’applicazione. È un classico problema di -PEBCAK* (Problem Exists Between Chair And Keyboard), ed è tra i più difficili da diagnosticare.
L’articolo che ho letto si trova qui: https://stackify.com/memory-leaks-java/
Anche per chi non conosce perfettamente l’inglese, risulta facilmente comprensibile. Ho chiesto all’autore l’autorizzazione a tradurlo e riportarlo sul sito.
Nel frattempo, vi invito a darvi un’occhiata.
Vengono trattati i seguenti punti:
- cos’è un memory leak in Java
- Java Heap Leaks
- Riferimento a oggetti attraverso proprietà statiche
- Chiamata a String.intern() su stringhe molto grandi
- Stream non chiusi
- Connessioni non chiuse
- Aggiungere oggetti senza implementare hashCode() e equals() in un HashSet
- Come scovare cause di leaking nella tua applicazione
- Gargage Collection con log verbose
- Effettuare la profilazione
- Revisionare il codice
- Conclusioni
Buona lettura… 🙂