Lua - Pengumpulan Sampah

Lua menggunakan manajemen memori otomatis yang menggunakan pengumpulan sampah berdasarkan algoritma tertentu yang ada di dalam Lua. Sebagai hasil dari manajemen memori otomatis, sebagai pengembang -

  • Tidak perlu khawatir tentang mengalokasikan memori untuk objek.
  • Tidak perlu membebaskannya saat tidak diperlukan lagi kecuali menyetelnya ke nihil.

Lua menggunakan pengumpul sampah yang berjalan dari waktu ke waktu untuk mengumpulkan objek mati saat tidak lagi dapat diakses dari program Lua.

Semua objek termasuk tabel, data pengguna, fungsi, utas, string, dan sebagainya tunduk pada manajemen memori otomatis. Lua menggunakan tanda inkremental dan pengumpul sapuan yang menggunakan dua angka untuk mengontrol siklus pengumpulan sampahnya yaitugarbage collector pause dan garbage collector step multiplier. Nilai-nilai ini dalam persentase dan nilai 100 seringkali sama dengan 1 secara internal.

Jeda Pengumpul Sampah

Jeda pemulung digunakan untuk mengontrol berapa lama pemulung harus menunggu sebelumnya; itu dipanggil lagi oleh manajemen memori otomatis Lua. Nilai kurang dari 100 berarti Lua tidak akan menunggu siklus berikutnya. Demikian pula, nilai yang lebih tinggi dari nilai ini akan mengakibatkan pengumpul sampah menjadi lambat dan kurang agresif. Nilai 200, berarti kolektor menunggu total memori yang digunakan menjadi dua kali lipat sebelum memulai siklus baru. Karenanya, bergantung pada sifat dan kecepatan aplikasi, mungkin ada kebutuhan untuk mengubah nilai ini untuk mendapatkan kinerja terbaik dalam aplikasi Lua.

Pengganda Langkah Pengumpul Sampah

Pengganda langkah ini mengontrol kecepatan relatif pengumpul sampah dengan alokasi memori dalam program Lua. Nilai langkah yang lebih besar akan menyebabkan pengumpul sampah menjadi lebih agresif dan juga meningkatkan ukuran langkah dari setiap langkah tambahan pengumpulan sampah. Nilai yang kurang dari 100 sering kali dapat menyebabkan pengumpul sampah tidak menyelesaikan siklusnya dan umumnya tidak disukai. Nilai defaultnya adalah 200, yang berarti pengumpul sampah berjalan dua kali lebih cepat dari alokasi memori.

Fungsi Pengumpul Sampah

Sebagai pengembang, kami memiliki kendali atas manajemen memori otomatis di Lua. Untuk ini, kami memiliki metode berikut.

  • collectgarbage("collect") - Menjalankan satu siklus pengumpulan sampah lengkap.

  • collectgarbage("count") - Mengembalikan jumlah memori yang saat ini digunakan oleh program di Kilobyte.

  • collectgarbage("restart") - Jika pengumpul sampah telah dihentikan, itu restart.

  • collectgarbage("setpause")- Menetapkan nilai yang diberikan sebagai parameter kedua dibagi 100 ke variabel jeda pengumpul sampah. Penggunaannya seperti dibahas sedikit di atas.

  • collectgarbage("setstepmul")- Menetapkan nilai yang diberikan sebagai parameter kedua dibagi 100 ke variabel pengali langkah sampah. Penggunaannya seperti dibahas sedikit di atas.

  • collectgarbage("step")- Menjalankan satu langkah pengumpulan sampah. Semakin besar argumen kedua, semakin besar langkah ini. Pengumpulan sampah akan menampilkan nilai true jika langkah yang dipicu adalah langkah terakhir dari siklus pengumpulan sampah.

  • collectgarbage("stop") - Menghentikan pengumpul sampah jika sedang berjalan.

Contoh sederhana menggunakan contoh pengumpul sampah ditunjukkan di bawah ini.

mytable = {"apple", "orange", "banana"}

print(collectgarbage("count"))

mytable = nil

print(collectgarbage("count"))

print(collectgarbage("collect"))

print(collectgarbage("count"))

Saat kita menjalankan program di atas, kita akan mendapatkan output sebagai berikut. Harap dicatat bahwa hasil ini akan bervariasi karena perbedaan dalam tipe sistem operasi dan juga fitur manajemen memori otomatis Lua.

23.1455078125   149
23.2880859375   295
0
22.37109375     380

Anda dapat melihat pada program di atas, setelah pengumpulan sampah selesai, itu mengurangi memori yang digunakan. Tapi, tidak wajib menyebut ini. Bahkan jika kita tidak memanggilnya, itu akan dijalankan secara otomatis pada tahap selanjutnya oleh juru bahasa Lua setelah periode yang telah ditentukan.

Jelas, kita dapat mengubah perilaku pengumpul sampah menggunakan fungsi-fungsi ini jika diperlukan. Fungsi ini memberikan sedikit kemampuan tambahan bagi pengembang untuk menangani situasi yang kompleks. Bergantung pada jenis memori yang dibutuhkan untuk program, Anda mungkin atau mungkin tidak menggunakan fitur ini. Tetapi sangat berguna untuk mengetahui penggunaan memori dalam aplikasi dan memeriksanya selama pemrograman itu sendiri untuk menghindari hasil yang tidak diinginkan setelah penerapan.