Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Python Tidak Segera Melepaskan Memori Selepas `del`?
Keluaran Memori dalam Python
Dalam Python, pelepasan memori dikendalikan oleh pengumpul sampah (GC), yang secara automatik mendelokasikan objek yang tidak lagi dirujuk. Walau bagaimanapun, dalam situasi tertentu, penggunaan memori mungkin tidak dikeluarkan dengan segera selepas objek dipadamkan.
Penggunaan Memori Awal
Apabila anda menetapkan senarai besar kepada pembolehubah, seperti sebagai foo, Python memperuntukkan memori untuk menyimpan senarai dan elemennya. Dalam contoh anda, mencipta senarai 10 juta rentetan 'bar' menggunakan kira-kira 80.9 MB memori.
Pelepasan Memori Tertunda
Selepas memadamkan foo dengan del foo, anda mungkin perasan bahawa penggunaan memori sebenar hanya berkurangan kepada 30.4 MB dan bukannya kembali ke garis dasar 4.4 MB. Ini kerana GC belum lagi mengumpul dan mengeluarkan memori yang dikaitkan dengan senarai.
Jumlah Memori Yang Dilepaskan
Jumlah ingatan yang dikeluarkan selepas kutipan sampah bukan nilai tetap. Ia bergantung pada pelbagai faktor, termasuk saiz objek yang dipadamkan, keadaan semasa pengurus memori dan kekerapan GC dijalankan. Dalam kes anda, kira-kira 50.5 MB memori telah dikeluarkan.
Keluaran Memori Dikuatkuasakan
Python tidak menyediakan mekanisme langsung untuk memaksa pelepasan memori segera. Walau bagaimanapun, penyelesaian wujud:
Menggunakan Proses Kanak-kanak
Jika anda tahu bahawa anda tidak memerlukan sejumlah besar memori dalam masa terdekat, anda boleh mencipta kanak-kanak proses untuk mengendalikan tugas intensif memori. Apabila proses kanak-kanak ditamatkan, semua memori yang diperuntukkan akan dikeluarkan secara automatik.
Untuk mencipta proses kanak-kanak, anda boleh menggunakan modul pemproses berbilang:
import multiprocessing def memory_intensive_task(args): # Perform memory-intensive operations here process = multiprocessing.Process(target=memory_intensive_task, args=(args,)) process.start() process.join() # Wait for the child process to finish
Dengan menggunakan proses kanak-kanak, anda boleh memastikan ingatan yang diperuntukkan untuk tugas sementara dikeluarkan secepat mungkin.
Atas ialah kandungan terperinci Mengapa Python Tidak Segera Melepaskan Memori Selepas `del`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!