Pembuatan Profil Heap dan Alokasi
Menemukan titik penggunaan memori tinggi dengan profil heap
Pembuatan Profil Heap dan Alokasi adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.
Mengapa membuat profil heap?
Alokasi memori yang berlebihan memperlambat program Go karena tekanan GC. Pembuatan profil heap menunjukkan jalur kode yang mengalokasikan memori paling banyak sehingga Anda dapat mengurangi alokasi.
Mengambil profil heap
Melalui titik akhir HTTP (memerlukan net/http/pprof):
go tool pprof http://localhost:6060/debug/pprof/heapProfil heap berbasis berkas
Tulis profil heap kapan saja menggunakan runtime/pprof:
f, _ := os.Create("mem.prof")
pprof.WriteHeapProfile(f)
f.Close()inuse vs alloc
Profil heap memiliki dua tampilan: inuse_objects/inuse_space (yang sedang aktif) dan alloc_objects/alloc_space (total sejak awal). Gunakan alloc_space untuk menemukan jalur alokasi yang paling aktif.
go tool pprof -alloc_space http://localhost:6060/debug/pprof/heapgo test -memprofile
Ambil profil memori selama tolok ukur:
go test -memprofile mem.prof -benchmem -bench=BenchmarkProcess ./...MemStats
Baca statistik memori runtime secara terprogram untuk pemantauan langsung:
var ms runtime.MemStats
runtime.ReadMemStats(&ms)
fmt.Printf("Alloc: %v MiB\n", ms.Alloc/1024/1024)
fmt.Printf("NumGC: %v\n", ms.NumGC)Analisis pelolosan
Variabel yang lolos ke heap menyebabkan alokasi. Jalankan go build -gcflags=-m untuk melihat variabel mana yang lolos dan alasannya.
go build -gcflags="-m -m" ./...
// main.go:12:15: &User{...} escapes to heapMengurangi alokasi: praalokasi
Lakukan praalokasi pada irisan dengan make([]T, 0, n) saat panjang akhirnya sudah diketahui, sehingga realokasi berulang saat irisan bertambah dapat dihindari.
results := make([]Result, 0, len(input))sync.Pool untuk penggunaan ulang
Simpan objek yang dapat digunakan kembali (buffer, irisan sementara) dalam sync.Pool untuk meratakan biaya alokasi:
var pool = sync.Pool{
New: func() any { return new(bytes.Buffer) },
}
buf := pool.Get().(*bytes.Buffer)
buf.Reset()
// use buf...
pool.Put(buf)Penerima nilai vs penunjuk
Struktur besar yang diteruskan berdasarkan nilai disalin pada setiap pemanggilan. Teruskan berdasarkan penunjuk untuk menghindari penyalinan, tetapi perhatikan bahwa penunjuk dapat menyebabkan nilai lolos ke heap.
String vs []byte
Mengonversi antara string dan []byte menyebabkan alokasi. Gunakan []byte di seluruh jalur yang sering dijalankan dan konversikan ke string hanya pada batas yang memerlukan string.
Pemeriksaan singkat
Apa yang ditunjukkan oleh -alloc_space dalam profil heap pprof?
Ringkasan: Pembuatan Profil Heap
Poin utama:
- -alloc_space menunjukkan total alokasi; inuse_space menunjukkan data yang sedang aktif
- go build -gcflags=-m menunjukkan analisis pelolosan
- Lakukan praalokasi pada irisan; gunakan sync.Pool untuk penggunaan ulang yang sering
- runtime.ReadMemStats untuk pemantauan terprogram
Belajar Go dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 51
- Pelajaran
- 203
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pembuatan Profil Heap dan Alokasi” gratis?
Ya — teks lengkap “Pembuatan Profil Heap dan Alokasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pembuatan Profil Heap dan Alokasi”?
Menemukan titik penggunaan memori tinggi dengan profil heap Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Go Academy?
Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Pembuatan Profil Heap dan Alokasi” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?
Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Menulis Benchmark dengan testing.B
- Pembuatan Profil CPU dengan pprof
- Pembuatan Profil Heap dan Alokasi
- Pelacakan Eksekusi