Materi Tutorial

Memory Management Python

Tutorial Memory Management Python - Heap Stack dan Garbage Collection

Salah satu alasan Python begitu populer adalah karena pengembang tidak perlu memusingkan manajemen memori secara manual seperti di C atau C++. Python menangani alokasi dan dealokasi memori secara otomatis.

Namun, memahami bagaimana Python mengelola memori di balik layar sangat penting untuk menulis kode yang efisien, terutama saat menangani data dalam jumlah besar.

1. Heap dan Stack

Python menggunakan dua jenis memori:

2. Reference Counting

Strategi utama Python dalam manajemen memori adalah Reference Counting.

Setiap objek di Python memiliki "penghitung referensi" (reference counts). Angka ini menunjukkan berapa banyak variabel yang merujuk ke objek tersebut.

import sys

a = []
# Get ref count (biasanya lebih tinggi dari perkiraan karena argumen sys.getrefcount sendiri juga referensi sementara)
print(sys.getrefcount(a)) 

b = a
print(sys.getrefcount(a)) # Bertambah

del b
print(sys.getrefcount(a)) # Berkurang

3. Garbage Collection (GC)

Reference counting punya satu kelemahan fatal: Circular References (Referensi Berputar).

a = []
b = []
a.append(b)
b.append(a) # Circular reference

Jika a dan b dihapus, reference count mereka tidak akan pernah jadi 0 karena mereka saling menunjuk. Di sinilah Garbage Collector (GC) berperan.

GC Python adalah mekanisme terpisah yang berjalan secara periodik untuk mendeteksi dan membersihkan "sampah" circular references ini.

Anda bisa mengontrol GC secara manual menggunakan modul gc:

import gc

# Paksa jalankan garbage collection
gc.collect()

# Matikan garbage collection otomatis
gc.disable()

Tips: Jarang sekali Anda perlu menyentuh modul gc kecuali untuk optimasi tingkat tinggi.

4. Tips Menghemat Memori

  1. Gunakan Generator: Seperti dibahas di tutorial sebelumnya, generator tidak memuat semua data ke RAM.
  2. Gunakan __slots__ di Class: Jika Anda membuat jutaan instance class kecil, __slots__ bisa menghemat RAM secara signifikan dengan menonaktifkan __dict__ dinamis per instance.
class HematMemori:
    __slots__ = ['nama', 'umur'] # Hanya boleh punya atribut ini
    def __init__(self, nama, umur):
        self.nama = nama
        self.umur = umur
  1. Hati-hati dengan Global Variables: Objek global tidak akan pernah dihapus sampai program berhenti, kecuali dihapus manual.

Kesimpulan

Edit tutorial ini
Belajarpython x DevMode Community
OFFICIAL COMMUNITY

Gabung Komunitas Developer & Kreator Digital

Dapatkan teman coding, sharing project, networking dengan expert, dan update teknologi terbaru.

Bebas spam. Unsubscribe kapan saja. DEVMODE Community