Programming

Implementasi Manajemen Memory Dengan Fitur Garbage Collector di GoLang

Avatar photo
Written by Techfor Id

Apa itu Garbage Collector ?

Garbage Collection (Pengumpulan sampah digital)  adalah proses mengosongkan ruang memori yang tidak digunakan.  Dengan kata lain, Garbage Collector melihat objek mana yang berada di luar cakupan dan tidak dapat direferensikan lagi serta membebaskan ruang memori yang mereka konsumsi.

Proses ini terjadi secara bersamaan saat program Go berjalan dan bukan sebelum atau sesudah eksekusi program.

Akan tetapi, kekhawatiran utama dari Garbage Collector  Go adalah latensinya yang rendah, yang pada dasarnya berarti jeda singkat dalam pengoperasiannya agar dapat beroperasi secara real-time.

Di sisi lain, apa yang dilakukan program adalah membuat objek baru dan memanipulasi objek yang ada dengan pointer sepanjang waktu. Proses ini akhirnya dapat membuat objek yang tidak dapat diakses lagi karena tidak ada penunjuk yang menunjuk ke objek tersebut.

Objek ini kemudian menjadi sampah dan menunggu Garbage Collector (pengumpul sampah) membersihkannya dan mengosongkan ruang memori mereka. Setelah itu, ruang memori yang telah dibebaskan siap digunakan kembali.

Implementasi Fitur Garbage Collector di GoLang

Pustaka standar (Library) Go menawarkan fungsi yang memungkinkan kamu mempelajari operasi Garbage Collector dan mempelajari lebih lanjut tentang apa yang dilakukan mereka. Kode yang relevan disimpan sebagai gColl.go dan akan disajikan dalam tiga bagian.

Segmen kode pertama gColl.go adalah sebagai berikut:

package main

import (

   “fmt”

   “runtime”

   “time”

)

func printStats(mem runtime.MemStats) {

   runtime.ReadMemStats(&mem)

   fmt.Println(“mem.Alloc:”, mem.Alloc)

   fmt.Println(“mem.TotalAlloc:”, mem.TotalAlloc)

   fmt.Println(“mem.HeapAlloc:”, mem.HeapAlloc)

   fmt.Println(“mem.NumGC:”, mem.NumGC)

   fmt.Println(“—–“)

}

Perhatikan bahwa setiap kali kamu ingin mendapatkan statistik Garbage Collector terbaru, kamu perlu memanggil fungsi runtime.ReadMemStats (). Tujuan dari fungsi printStats () adalah untuk menghindari penulisan kode Go yang sama sepanjang waktu.

Bagian kedua dari program ini adalah sebagai berikut :

func main() {

   var mem runtime.MemStats

   printStats(mem)

   for i := 0; i < 10; i++ {

         s := make([]byte, 50000000)

         if s == nil {

                fmt.Println(“Operation failed!”)

         }

   }

   printStats(mem)

Loop for membuat banyak irisan Go (Go Slices) yang besar untuk mengalokasikan sejumlah besar memori dan memicu Garbage Collector.

Bagian terakhir gColl.go hadir dengan kode Go berikutnya, yang melakukan lebih banyak alokasi memori menggunakan Go Slice :

for i := 0; i < 10; i++ {

         s := make([]byte, 100000000)

         if s == nil {

                fmt.Println(“Operation failed!”)

          }

          time.Sleep(5 * time.Second)

   }

   printStats(mem)

}  

Berikut tampilan output gColl.go di mesin macOS Mojave:

$ go run gColl.go

mem.Alloc: 66024

mem.TotalAlloc: 66024

mem.HeapAlloc: 66024

mem.NumGC: 0

—–

mem.Alloc: 50078496

mem.TotalAlloc: 500117056

mem.HeapAlloc: 50078496

mem.NumGC: 10

—–

mem.Alloc: 76712

mem.TotalAlloc: 1500199904

mem.HeapAlloc: 76712

mem.NumGC: 20

—–  

Meskipun kamu tidak akan memeriksa pengoperasian Garbage Collector  Go sepanjang waktu, kemampuan untuk mengamati cara kerjanya pada aplikasi yang lambat dapat menghemat banyak waktu dalam jangka panjang.

Ada trik yang memungkinkan kamu mendapatkan keluaran yang lebih detail tentang cara kerja Garbage Collector  Go, yang diilustrasikan dalam perintah berikut :

$ GODEBUG=gctrace=1 go run gColl.go

Kalau kamu meletakkan GODEBUG = gctrace = 1 di depan sembarang perintah pada go run, Go akan mencetak data analitik tentang operasi Garbage Collector. Data tersebut akan berupa :

gc 4 @0.025s 0%: 0.002+0.065+0.018 ms clock,

0.021+0.040/0.057/0.003+0.14 ms cpu, 47->47->0 MB, 48 MB goal, 8 P

gc 17 @30.103s 0%: 0.004+0.080+0.019 ms clock,

0.033+0/0.076/0.071+0.15 ms cpu, 95->95->0 MB, 96 MB goal, 8 P$

Bergantung pada persyaratan sistem, trinitas nilai mungkin berbeda. Misalnya, nilai trinitas 47-> 47-> 0 MB dari keluaran sebelumnya memberi kita lebih banyak informasi tentang ukuran heap selama proses Garbage Collector.

Angka pertama adalah ukuran heap saat pengumpul sampah akan dijalankan. Nilai kedua adalah ukuran heap saat Garbage Collector mengakhiri operasinya. Nilai terakhir adalah ukuran heap aktif.

Sumber : https://hub.packtpub.com/implementing-memory-management-with-golang-garbage-collector/

About the author

Avatar photo

Techfor Id

Leave a Comment

Click to ask
Hai, Tanya-Tanya Aja
Hi ini Windy, dari techfor

Windy bisa membantu kamu memahami layanan Techfor
Seperti

1. Kursus Online By Expert
2. Partnership Event dan Konten
3. Layanan liputan multimedia
4. Dan hal lain yg ingin kamu tau

Kirim saja pesan ini serta berikan salah satu nomor diatas atau beritahukan windy lebih jelas agar dapat membantu Kamu