Tôi vẫn còn một câu hỏi khác về thu gom rác ở Julia. Dưới đây là ví dụ tối thiểu:Julia: bộ sưu tập rác bên trong các chức năng hoạt động khác với trong không gian toàn cầu
function OscarTheGrouch()
A = rand(Float32, 20000, 20000);
A = 0;
gc();
end
Gọi RAM sử dụng để tăng 1,6 GB. Gọi gc()
sau đó làm cho nó giảm 1,6 GB.
Ngược lại, chỉ cần thực hiện các mã bên trong hàm trong phạm vi toàn cầu, tức là thực hiện
A = rand(Float32, 20000, 20000);
A = 0;
gc();
lá RAM sử dụng không thay đổi trước và sau khi thực hiện.
My previous RAM use question hóa ra đơn giản là do kết quả trung gian được lưu trữ là ans
. Tuy nhiên, gọi whos()
sau khi gọi OscarTheGrouch()
sẽ không hiển thị kết quả mảng trung gian nào được lưu trữ.
- Vì vậy, bộ nhớ được giữ ở đâu? Việc thu gom rác bên trong các chức năng có hoạt động khác (ít tích cực hơn) so với phạm vi toàn cầu?
Tôi đã bỏ qua article on Julia functions, nhưng không thấy bất kỳ điều gì hiển nhiên.
Nhiều việc là khác nhau trong phạm vi toàn cầu, chắc chắn - trình biên dịch có thể để suy ra ít hơn. Tôi không nghĩ là một trong số họ. – IainDunning
Được đăng dưới dạng sự cố tại https://github.com/JuliaLang/julia/issues/8393 –