Ho ancora un'altra domanda sulla raccolta dei rifiuti in Julia. Ecco un esempio minimo:Julia: la garbage collection all'interno delle funzioni funziona in modo diverso rispetto allo spazio globale
function OscarTheGrouch()
A = rand(Float32, 20000, 20000);
A = 0;
gc();
end
Calling OscarTheGrouch()
cause utilizzo RAM per aumentare di 1,6 GB. Chiamando lo gc()
in seguito, il codice diminuirà di 1,6 GB.
Al contrario, semplicemente eseguendo il codice all'interno della funzione di scope globale, cioè, l'esecuzione
A = rand(Float32, 20000, 20000);
A = 0;
gc();
foglie RAM utilizzare invariato prima e dopo l'esecuzione.
My previous RAM use question risultato essere semplicemente dovuto al fatto che i risultati intermedi vengono memorizzati come ans
. Tuttavia, chiamando dopo aver chiamato OscarTheGrouch()
non viene visualizzato alcun risultato di array intermedio.
- Quindi, dove si trova la memoria? La garbage collection all'interno delle funzioni si comporta in modo diverso (meno aggressivo?) Rispetto all'ambito globale?
Ho scostato il article on Julia functions, ma non ho visto nulla di ovvio.
Molte cose sono diverse in ambito globale, di sicuro - il compilatore è in grado di dedurre meno. Non penso sia uno di loro. – IainDunning
Pubblicato come un problema su https://github.com/JuliaLang/julia/issues/8393 –