Глубокая копия в симуляторе эволюции, создающая утечку памяти

Посмотрите на функцию FIND_IN_SET для MySQL.

SELECT * 
    FROM shirts 
    WHERE FIND_IN_SET('1',colors) > 0

1
задан petezurich 18 January 2019 в 10:27
поделиться

1 ответ

Я думаю, что может произойти, что ваша реализация рекурсивна, и из-за этого GC никогда не сможет выпустить все ваши предыдущие копии! (Или, может быть, есть какая-то другая причина, по которой ГХ не может выпустить эти предметы)

В эволюционном программировании вам часто нужно только сохранить определенное количество самых результативных «детей», если я правильно помню. Вы должны хранить отдельный список этих детей и вставлять новых в список, но также обязательно удалять старые! Теперь также убедитесь, что ваша реализация не является рекурсивной, и больше нет ссылок на старые экземпляры. Если вы сделаете это правильно, GC правильно освободит все экземпляры, которые вы не используете, и ваши проблемы могут просто исчезнуть:)


РЕДАКТИРОВАТЬ: после комментария OP:


[ 115] Я не совсем уверен, что делает функция mutate_neuralnetwork. Но, глядя на ваш код и принимая во внимание тот факт, что копирование становится все более медленным, возможно, ваша структура данных рекурсивна. То есть если copied_animal содержит ссылку на предыдущий экземпляр, который, в свою очередь, ссылается и даже на более раннюю версию, и тогда вы можете представить, что в какой-то момент цепочка становится настолько длинной, что ее копирование занимает много времени. Это были бы старые ссылки. Убедитесь, что у вас нет рекурсивной структуры данных, ИЛИ иногда установка переменных на None может помочь GC определить, что они больше не нужны.

0
ответ дан gerwin 18 January 2019 в 10:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: