Programmer C# tidak mengelola memori secara manual, tetapi memahami apa yang terjadi di balik layar membuat kode lebih efisien dan bebas kejebakan. Section ini membahas memori dari sudut pandang runtime: di mana data diletakkan, bagaimana objek dialokasikan, dan kapan ruang memori diklaim kembali.

# Stack dan Heap

Kenali dua area memori utama runtime .NET, yaitu call stack untuk data sementara dan managed heap untuk objek yang dikelola garbage collector.

Buka →
# Value dan Reference Semantics

Pahami perbedaan semantik nilai dan semantik referensi di C# serta dampaknya terhadap alokasi memori dan perilaku program.

Buka →
# Object Allocation

Lihat bagaimana operator new mengalokasikan objek di managed heap dan cara mengukur jumlah byte yang dialokasikan dengan GC.GetAllocatedBytesForCurrentThread.

Buka →
# Reference Lifetime

Pelajari bagaimana usia objek ditentukan oleh rujukan yang masih terpakai dan bagaimana GC mengklaim kembali objek tanpa rujukan.

Buka →
# Garbage Collection

Kenali cara garbage collector menemukan objek tanpa rujukan dan mengklaim kembali memorinya, lengkap dengan pengukuran hitungan koleksi.

Buka →
# Large Object Heap

Pelajari Large Object Heap (LOH), area khusus di managed heap untuk objek berukuran 85.000 byte ke atas, beserta implikasinya.

Buka →
# Generations dan GC

Pahami konsep generasi 0, 1, dan 2 pada garbage collector .NET serta proses promosi objek yang selamat dari siklus GC.

Buka →
# Finalizer

Pelajari finalizer sebagai jaring pengaman terakhir runtime, beserta keterbatasannya yang serius pada waktu eksekusi dan beban GC.

Buka →
# WeakReference

Gunakan WeakReference untuk merujuk objek tanpa menahannya dari pengklaiman GC, misalnya pada cache yang boleh dibuang kapan saja.

Buka →
# Memory Pressure

Ukur tekanan memori dari laju alokasi managed dan informasikan pemakaian memori unmanaged kepada GC melalui GC.AddMemoryPressure.

Buka →
# Allocation Reduction

Teknik menekan jumlah alokasi managed: StringBuilder untuk penyambungan, span dan MemoryExtensions untuk pemrosesan tanpa alokasi.

Buka →
# Memory Management Best Practices

Rangkum praktik terbaik pengelolaan memori di C#: ukur dulu, andalkan using untuk resource, dan jaga rujukan agar tetap ramping.

Buka →