Perché un oggetto immutabile in Scala ha bisogno di meno memoria di uno mutabile?

2

In Programmazione in Scala , c'è questa dichiarazione:

For instance an empty mutable map in its default representation of HashMap takes up about 80 bytes and about 16 more are added for each entry that’s added to it. An empty immutable Map is a single object that’s shared between all references, so referring to it essentially costs just a single pointer field.

Perché una mappa mutevole richiede più spazio?

    
posta abelard2008 26.12.2015 - 09:22
fonte

2 risposte

3

La condivisione è solo una parte della risposta.

La mappa mutabile deve contenere tutti i campi che saranno necessari quando gli elementi sono aggiunti, dato che i metodi di chiamata non possono cambiare la classe dell'oggetto.

Con mappe immutabili, puoi avere una classe speciale per le mappe vuote, che non ha bisogno di qualsiasi campi (eccetto quelli che eredita), mentre le mappe a partita singola hanno un campo per la chiave e un campo per il valore e possono accedervi senza ulteriori riferimenti. Chiamare metodi che aggiungono elementi restituisce solo un nuovo oggetto di una classe diversa, il che non è un problema.

    
risposta data 26.12.2015 - 13:30
fonte
2

Hai praticamente risposto alla tua domanda qui: l'oggetto immutabile può essere condiviso tra ogni istanza identica dell'oggetto, ma quella mutabile non può perché ciò significherebbe che le cose vanno terribilmente storte quando aggiungi qualcosa alla mappa .

In teoria, l'oggetto mutabile avrebbe potuto essere implementato con una semantica copy-on-write che consentisse la condivisione di mappe mutabili identiche, ma non è questa la via che Scala ha deciso di abbandonare.

    
risposta data 26.12.2015 - 09:30
fonte

Leggi altre domande sui tag