Garbage Collection & Memory Tips
Penjelasan
Luau memakai garbage collector otomatis (incremental, mirip Lua standar) yang membersihkan objek yang sudah tidak direferensikan lagi dari memori. Programmer tidak perlu membebaskan memori manual, tapi tetap bisa menyebabkan memory leak kalau referensi ke objek yang seharusnya sudah tidak dipakai masih tertahan — paling umum lewat koneksi event yang lupa di-`Disconnect()`, atau tabel global yang terus bertambah tanpa pernah dibersihkan. Di Roblox, Instance yang dihapus dengan `:Destroy()` akan diputus dari hierarki dan koneksi event bawaannya otomatis terputus, tapi referensi manual ke objek tersebut di variabel/tabel lain tetap harus dibersihkan sendiri supaya garbage collector benar-benar bisa mengklaim memorinya.
Contoh Konsep
-- Pola yang berpotensi leak: koneksi tidak pernah diputus
local daftarKoneksi = {}
local function pasangEfek(part)
local koneksi = part.Touched:Connect(function()
print("Disentuh")
end)
table.insert(daftarKoneksi, koneksi)
end
-- Pembersihan yang benar saat objek tidak dipakai lagi
local function bersihkanSemua()
for _, koneksi in ipairs(daftarKoneksi) do
koneksi:Disconnect()
end
daftarKoneksi = {}
end
Praktikum
Buat fungsi buatMusuh() yang menyambungkan event Touched dan menyimpan koneksinya, lalu fungsi hancurkanMusuh(musuh, koneksi) yang memutus koneksi sebelum memanggil Destroy pada musuh.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Simpan koneksi event dalam tabel per-objek (bukan global tunggal) supaya gampang melacak dan memutus koneksi mana saja yang terkait objek tertentu saat objek itu dihancurkan.