Lua Academy · Pelajaran

Menghindari Kebocoran Memori

Pelajari pola kebocoran umum dalam Lua dan strategi untuk mencegahnya.

Pelajaran 4 dari 413 langkah

Menghindari Kebocoran Memori adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 4 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 Kebocoran Memori di Lua?

Kebocoran memori terjadi ketika objek terus menumpuk di memori karena sebuah referensi mencegah GC mengumpulkannya, meskipun program sudah tidak membutuhkannya.

Kebocoran Umum: Penumpukan Global

Menyimpan objek dalam tabel global tanpa menghapusnya adalah kebocoran klasik. Tabel global selalu menjadi akar GC.

local cache = {}  -- global-like upvalue
function storeResult(key, val)
  cache[key] = val  -- never evicted!
end

Perbaikan: Tembolok Terbatas

Batasi ukuran tembolok dan keluarkan entri lama menggunakan strategi LRU atau batas ukuran sederhana.

local MAX = 100
local function boundedStore(cache, key, val)
  if #cache >= MAX then
    table.remove(cache, 1)  -- evict oldest
  end
  cache[key] = val
end

Kebocoran Umum: Pendengar Peristiwa

Mendaftarkan closure sebagai pendengar peristiwa lalu tidak pernah membatalkan pendaftarannya membuat closure dan nilai upvalue-nya tetap hidup.

local listeners = {}
function on(event, fn)
  listeners[event] = listeners[event] or {}
  listeners[event][#listeners[event]+1] = fn
end
-- Always provide off() to deregister!

Perbaikan: Tabel Pendengar Weak

Simpan pendengar dalam tabel dengan nilai weak agar ketika objek pelanggan dikumpulkan, pendengarnya otomatis dihapus.

local listeners = setmetatable({}, {__mode = "v"})

Kebocoran Umum: Closure yang Menangkap Tabel Besar

Closure yang menangkap tabel besar membuat tabel tersebut tetap hidup selama closure itu hidup, meskipun hanya sebagian kecil tabel yang diperlukan.

local bigData = {-- 100MB of data --}
local fn = function()
  return bigData[1]  -- bigData stays alive!
end

Perbaikan: Ekstrak Nilai yang Diperlukan

Ekstrak hanya nilai yang diperlukan sebelum membuat closure, sehingga tabel besar dapat dikumpulkan.

local needed = bigData[1]
bigData = nil  -- allow collection
local fn = function() return needed end

Kebocoran Coroutine

Coroutine yang ditangguhkan tetap hidup dan menyimpan semua variabel lokalnya. Coroutine yang sudah mati (status "dead") dapat dikumpulkan. Jangan pernah kehilangan jejak coroutine yang ditangguhkan.

Penumpukan String

Menggabungkan string dalam perulangan dengan .. membuat banyak string perantara. Gunakan table.concat untuk membuat string besar secara efisien.

local parts = {}
for i = 1, 1000 do parts[i] = tostring(i) end
local result = table.concat(parts, ",")

Men-debug Kebocoran

Gunakan collectgarbage("count") sebelum dan sesudah operasi untuk mengukur pertumbuhan memori. Catat pertumbuhan yang mencurigakan guna mempersempit sumber kebocoran.

local before = collectgarbage("count")
-- ... run operation ...
collectgarbage()
local after = collectgarbage("count")
print(("Delta: %.1f KB"):format(after - before))

Alat Pembuatan Profil

Alat seperti luamemprof dan penghitung alokasi khusus debug.sethook dapat melacak jalur kode yang mengalokasikan memori paling banyak.

Pertanyaan tentang Kebocoran Memori

Pola mana yang paling mungkin menyebabkan kebocoran memori?

Ringkasan: Menghindari Kebocoran Memori

Kebocoran di Lua muncul akibat tembolok yang tidak dibatasi, pendengar yang tidak dibatalkan pendaftarannya, closure yang mencakup tabel besar, dan coroutine yang ditangguhkan lalu terlupakan. Gunakan tabel weak, tembolok terbatas, dan collectgarbage("count") untuk mendeteksi serta mencegah kebocoran.

Gratis untuk memulai

Belajar Lua dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
40
Pelajaran
159

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Menghindari Kebocoran Memori” gratis?

Ya — teks lengkap “Menghindari Kebocoran Memori” 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 “Menghindari Kebocoran Memori”?

Pelajari pola kebocoran umum dalam Lua dan strategi untuk mencegahnya. 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 4 dari 4.

Berapa lama pelajaran “Menghindari Kebocoran Memori” 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