🎉 Il Necronomicon è stato aggiornato alla versione 2.0.0 🎉
Memory Leaks
Come riconoscere un memory leak

Come riconoscere un memory leak?

Per poter risolvere un memory leak, prima di tutto bisogna riconoscerlo. Di seguito verranno esposti dei metodi per poterli individuare.

Utilizzo dei DevTools di Chrome

Chrome dispone di un insieme di strumenti per lo sviluppatore, chiamati DevTools, che permettono di analizzare il comportamento di un sito web. Tra questi strumenti, è possibile utilizzare la tab Performance per analizzare il consumo di memoria di un sito web.

performance tab

Tramite questa tab è possibile registrare vari eventi, tra cui il consumo di memoria. Per poter registrare il consumo di memoria, è necessario selezionare la voce Memory e premere il pulsante Start recording.

memory tab

Un volta terminata la registrazione (al riempimento del buffer o arbitrariamente tramite il pulsante apposito) verranno mostrati tutti i dati raccolti durante la registrazione, tra cui un grafico rappresentante l'utilizzo della memmoria

memory tab

In questo caso l'utilizzo della memoria heap è gestita correttamente (da notare che il consumo di memoria ha dei picchi per poi riassestarsi scendendo indicando che effettivamente viene liberata la memoria inutilizzata).

Nel caso seguente invece possiamo notare che il consumo di memoria heap continua ad aumentare senza mai diminuire o comunque non tornando alla situazione iniziale.

memory tab

Questo è il sintomo di un probabile memory leak.

Tecnica dei 3 snapshot

Un'altra tab dei DevTools di Chrome è quella Memory, che permette di visualizzare lo stato della memoria in un dato momento.

Tramite uno snapshot è possibile vedere lo stato della memoria in un dato momento, e tramite la differenza tra due snapshot è possibile vedere le differenze tra due momenti.

memory tab

La tecnica dei 3 snapshot è stata sviluppata un ingegnere di Google, e consiste nel:

  1. Fare uno snapshot della memoria
  2. Fare una serie di azioni che potrebbero causare un memory leak
  3. Fare uno snapshot della memoria
  4. Ri-eseguire le azioni
  5. Fare uno snapshot della memoria
  6. Impostare in questo modo i filtri:

memory tab

In questo modo è possibile vedere le differenze tra i tre snapshot, e quindi individuare i punti dove la memoria viene allocata e non rilasciata.

Nell'esempio seguente possiamo vedere come alcuni elementi del dom vengano smontati ma non rilasciati in quanto persistano i loro riferimenti all'interno della heap:

memory tab