Estoy tratando de implementar un algoritmo genético y tengo el problema de que la memoria del montón se vuelve demasiado grande. En la medida en que arroja un error. Me temo que tiene algo que ver con mi matriz de población. Mostré el uso de la memoria mientras ejecutaba el programa y reconocí que está creciendo y creciendo y nunca se libera.
Considere la siguiente configuración:
let used = {} class Trainer { static breed = function(elite) { //code for making a new generation return brood } constructor() { this.population = [] } async evolve(data, options, callback) { // potential point where the error may be // because I see the memory growing and never getting smaller // but I think it should get smaller because I don't // reference the old generation any more or do I ? while (error >= threshold) { // train each member of the population async // and than make a new population out of the elite const elite = this.population.slice(0, 10) this.population = Trainer.breed(elite) <--- ¯\_(ツ)_/¯ callback(info) used = process.memoryUsage() } } } const trainer = new Trainer const data = getData() const options = makeOptions() function log(info) { console.log(info) console.log(used) } async function test() { await trainer.evolve(data, options, log) } test()Ahora tengo algunas preguntas.
¿Es cierto que en cada generación ya no se hace referencia a la matriz anterior y se recolecta la basura y se libera algo de espacio en la memoria?
¿Cómo puedo analizar el uso de la memoria por cada función para mejorar dentro de dónde puede estar el problema en mi código?
Debido a que el código es muy grande, traté de simplificar mi problema. Pero si está interesado en el código completo, eche un vistazo a mi repositorio: https://github.com/kiro7shiro/image-generator Puede encontrar la configuración descrita arriba en "/cli/image-generator-evolve. js" archivo.