Study
Luau

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.

Editor Latihan

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.