Sto imparando l'elisir e voglio essere sicuro di capire come funziona la garbage collection nella macchina virtuale di Erlang.
La mia comprensione è questa:
- Ogni processo a livello di VM ha il proprio heap
- Se quell'heap non si riempie prima che termini, viene scartato con il processo e non è necessario alcun GC
- Gli heap che si riempiono sono quelli raccolti individualmente, in parallelo, quindi GC non "ferma" il mondo ", solo quel processo
È corretto?
risposte:
11 per risposta № 1Prendere la raccolta dei rifiuti. Quando è il momento di raccogliere rifiuti in altri lingue, l'intero sistema deve fermarsi mentre il garbage collector piste. Questo approccio è perfetto se il tuo programma è dovrebbe funzionare una volta, scrivere un po 'di output e quindi uscire. Ma in applicazioni di lunga durata, come desktop, mobile o server programmi, questa strategia si traduce in interfacce utente a volte bloccate e lente tempi di risposta. I programmi di Erlang, d'altra parte, possono avere migliaia di heap indipendenti che vengono raccolti separatamente dai rifiuti; in questo modo, la penalità delle prestazioni della raccolta dei rifiuti è ripartita tempo, quindi un'applicazione a lunga esecuzione non si fermerà misteriosamente rispondendo di volta in volta mentre gira i raccoglitori.
Evan Miller, creatore del famoso framework Chicago Boss.
Quindi credo che i raccoglitori di rifiuti di erlangcontemporaneamente, cioè, i vari heap sono garbage collection indipendentemente l'uno dall'altro. Se esiste una parallelizzazione dipende dal fatto che il tuo nodo sia eseguito su più core o meno, ma in tal caso la raccolta dei dati inutili viene eseguita in parallelo, sì.