Comprendendo che la garbage collection e la gestione della memoria sono implementate in modo diverso in ambienti diversi per semplicità, questa domanda si focalizzerà su JavaScript (V8 o Seamonkey).
Mi rendo conto che la garbage collection è un mezzo per determinare se una porzione di memoria debba essere deallocata o meno. L'esempio più semplice che conosco è l'impostazione di una variabile su null
:
var x = 'foobar';
// x)-┐
// V
// ┌-┬-┬-┬-┬-┬-┐
// |f|o|o|b|a|r|
// └-┴-┴-┴-┴-┴-┘
x = null;
// x)--> null
//
// ┌-┬-┬-┬-┬-┬-┐
// |f|o|o|b|a|r| Eligible to be garbage collected
// └-┴-┴-┴-┴-┴-┘
Quindi stavo riflettendo su come posso cambiare il valore in modo sicuro in modo che non sia disponibile per il trucco? Mi rendo conto che questo è un esempio puramente inventato. Il motivo per cui lo chiedo è capire meglio come viene allocata la memoria in JavaScript e se ci sono metodi di manipolazione dei dati che eviterebbero la riallocazione della memoria, lasciando un po 'di esso a sporcare lo spazio di memoria libero.
In altre parole, posso modificare i valori di memoria in JavaScript o la riassegnazione è l'unico modo per lasciarlo nella memoria libera?
Per illustrare ulteriormente il mio esempio inventato, diciamo che voglio memorizzare una password ma poi offuscarla in modo sicuro prima di inviarla al terreno dei raccoglitori. Credo che la riassegnazione sarebbe simile a questa:
var x = 'foobar';
// x)-┐
// V
// ┌-┬-┬-┬-┬-┬-┐
// |f|o|o|b|a|r|
// └-┴-┴-┴-┴-┴-┘
x = '******';
// x)--------------┐
// V
// ┌-┬-┬-┬-┬-┬-┐┌-┬-┬-┬-┬-┬-┐
// |f|o|o|b|a|r||*|*|*|*|*|*|
// └-┴-┴-┴-┴-┴-┘└-┴-┴-┴-┴-┴-┘
// \_________/
// |
// Eligible for garbage collection
x = null;
// x)--> null
//
// ┌-┬-┬-┬-┬-┬-┐┌-┬-┬-┬-┬-┬-┐
// |f|o|o|b|a|r||*|*|*|*|*|*|
// └-┴-┴-┴-┴-┴-┘└-┴-┴-┴-┴-┴-┘
// \_________/ \_________/
// | |
// Eligible for garbage collection
Quindi posso manipolare la prima partizione di memoria in modo che i valori non vengano lasciati in memoria senza riferimento, ma sostituiti, in modo che una scansione della memoria trovi la sostituzione anziché il vecchio valore?