package main

import (
	"fmt"
	"runtime"
	"runtime/debug"
)

// buatSampah mengalokasikan 64 MiB data yang segera tidak terpakai lagi.
func buatSampah() {
	for range 64 {
		_ = make([]byte, 1024*1024)
	}
}

// heapSekarang membaca jumlah byte heap yang sedang dipakai.
func heapSekarang() uint64 {
	var m runtime.MemStats
	runtime.ReadMemStats(&m)
	return m.HeapAlloc
}

func main() {
	debug.SetGCPercent(-1) // matikan GC sementara
	runtime.GC()           // bersihkan sampah sisa proses awal program

	sebelum := heapSekarang()
	buatSampah()
	sesudah := heapSekarang()

	debug.SetGCPercent(100) // aktifkan kembali dengan target bawaan
	runtime.GC()            // paksa pengumpulan sampah sekarang

	setelahGC := heapSekarang()

	fmt.Println("heap bertumbuh tanpa GC  :", sesudah > sebelum)
	fmt.Println("heap menyusut setelah GC :", setelahGC < sesudah)
}
