0Pricing
Lua Academy · Pelajaran

Dasar-Dasar Pengumpul Sampah Lua

Pelajari cara kerja GC inkremental Lua: mark-and-sweep, ambang batas, dan collectgarbage().

Dasar-Dasar Pengumpul Sampah Lua adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.

Apa Itu Pengumpulan Sampah?

Lua menggunakan pengumpul sampah otomatis untuk mengambil kembali memori yang ditempati objek (tabel, string, closure) yang tidak lagi dapat dijangkau dari akar mana pun.

Algoritma Tandai-dan-Sapu

GC Lua menggunakan algoritma tandai-dan-sapu inkremental. Algoritma ini menandai semua objek yang dapat dijangkau mulai dari akar, lalu menyapu (membebaskan) objek yang tidak ditandai.

Pengumpulan Inkremental

GC berjalan dalam kenaikan kecil yang diselingi oleh program. Hal ini menghindari waktu jeda yang panjang. Jumlah pekerjaan per kenaikan dikendalikan oleh parameter langkah GC.

Fungsi collectgarbage

collectgarbage(opt, arg) mengendalikan GC secara langsung.

collectgarbage("collect")      -- run a full GC cycle
collectgarbage("stop")         -- stop automatic GC
collectgarbage("restart")      -- restart automatic GC
print(collectgarbage("count")) -- KB of memory in use

Parameter GC

collectgarbage("setpause", n) mengatur jeda antara siklus GC (200 = memori menjadi dua kali lipat sebelum siklus berikutnya). "setstepmul" mengendalikan kecepatan GC.

collectgarbage("setpause", 200)    -- default
collectgarbage("setstepmul", 200)  -- default

Referensi Lemah dan GC

Biasanya, referensi membuat objek tetap hidup. Referensi lemah tidak demikian — GC dapat mengumpulkan objek meskipun tabel lemah menunjuk ke objek tersebut.

GC Generasional (Lua 5.4)

Lua 5.4 memperkenalkan mode GC generasional opsional. Objek muda dikumpulkan lebih sering, sedangkan objek lama lebih jarang. Aktifkan atau nonaktifkan dengan collectgarbage("generational").

Pemicu Tekanan Memori

GC berjalan otomatis saat penggunaan memori melebihi ambang batas (yang ditetapkan oleh jeda). Mengalokasikan banyak tabel sementara meningkatkan tekanan GC dan dapat memperlambat program Anda.

Mengurangi Tekanan GC

  • Gunakan kembali tabel alih-alih mengalokasikan tabel baru.
  • Hindari membuat banyak closure berumur pendek dalam perulangan yang sering dijalankan.
  • Alokasikan terlebih dahulu larik dengan ukuran yang diketahui.

Internalisasi String

Lua menginternalkan semua string — string yang identik berbagi satu objek. Artinya, pembuatan string memerlukan hash O(n), tetapi perbandingan memerlukan O(1). String pendek sangat ringan.

Finalizer (__gc)

Tabel dapat memiliki metamethod __gc yang dipanggil oleh GC sebelum objek dibebaskan. Ini berguna untuk melepaskan sumber daya eksternal seperti handle file atau pointer C.

Pertanyaan tentang GC

Apa yang dikembalikan oleh collectgarbage("count")?

Ringkasan: Dasar-Dasar GC Lua

GC inkremental tandai-dan-sapu Lua secara otomatis mengambil kembali memori yang tidak dapat dijangkau. Gunakan collectgarbage untuk memantau dan mengendalikan pengumpulan. Kurangi tekanan dengan menggunakan kembali tabel dan menghindari alokasi berlebihan di jalur yang sering dijalankan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Dasar-Dasar Pengumpul Sampah Lua” gratis?

Ya — teks lengkap “Dasar-Dasar Pengumpul Sampah Lua” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Dasar-Dasar Pengumpul Sampah Lua”?

Pelajari cara kerja GC inkremental Lua: mark-and-sweep, ambang batas, dan collectgarbage(). Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Lua Academy?

Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Dasar-Dasar Pengumpul Sampah Lua” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?

Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Dasar-Dasar Pengumpul Sampah Lua
  2. Kunci Lemah dan Nilai Lemah
  3. Finalizer dengan __gc
  4. Menghindari Kebocoran Memori
← Kembali ke Lua Academy