Я использую Julia 1.1 с JLD и HDF5 для сохранения файла на диск, где я встретил пару вопросов об использовании памяти.
Выпуск 1:
Сначала я определил матрицу 4 ГБ A.
A = zeros(ComplexF64,(243,243,4000));
Когда я набираю команду и смотрю на диспетчер задач Windows:
A=nothing
Потребовалось несколько минут, чтобы Джулия вернула мне эти воспоминания. Большую часть времени (в диспетчере задач) Джулия просто не освобождает использование памяти вообще, хотя команда возвращала результаты, говоря, что A мгновенно занимает 0 байтов.
varinfo()
name size summary
–––––––––––––––– ––––––––––– –––––––
A 0 bytes Nothing
Base Module
Core Module
InteractiveUtils 162.930 KiB Module
Main Module
ans 0 bytes Nothing
Выпуск 2:
Далее, когда я пытался использовать JLD и HDF5 для сохранения файла на диск. На этот раз диспетчер задач сказал мне, что при использовании команды save («test.jld», «A», A) использовалась дополнительная память объемом 4 ГБ.
using JLD,HDF5
A = zeros(ComplexF64,(243,243,4000));
save("test.jld", "A", A)
Далее, после того, как я набрал
A=nothing
Джулия не вернет мне 8 ГБ памяти.
Нахождение 3:
Интересная вещь, которую я обнаружил, заключалась в том, что, если я наберу команду еще раз
A = zeros(ComplexF64,(243,243,4000));
Диспетчер задач сказал бы мне, что наличная память была освобождена, и общее использование памяти снова составило всего 4 ГБ.
Вопрос 1:
Что происходит с управлением памятью в Юлии? Было ли это просто ошибкой Windows или какой-то командой в Юлии? Как проверить использование памяти Julia мгновенно?
Вопрос 2:
Как сказать Джулии, чтобы она немедленно высвободила использование памяти?
Вопрос 3:
Можно ли сказать, что пакет JLD не использует эти дополнительные 4 ГБ памяти?
(Лучше, кто-нибудь может сказать мне, как создать A непосредственно на диске, даже не создавая его в памяти? Я знал, что в пакете JLD есть отображение ввода-вывода с отображением в памяти. Я пробовал это, но, казалось, требовало от меня создайте матрицу A в памяти и сначала сохраните A на диск, прежде чем я смогу снова вызвать отображенную в памяти память A.)
Это длинный вопрос, поэтому спасибо, вперед!