Rumah >pembangunan bahagian belakang >Golang >Pertanyaan Golang mengambil ingatan

Pertanyaan Golang mengambil ingatan

王林
王林asal
2023-05-15 09:39:373729semak imbas

Golang ialah bahasa pengaturcaraan yang sangat baik yang digunakan secara meluas dalam pembangunan aplikasi pelayan dan pengkomputeran awan. Penggunaan memori adalah isu yang mesti dipertimbangkan oleh setiap aplikasi Artikel ini akan memperkenalkan cara untuk menanyakan penggunaan memori program di Golang.

1. Pengurusan memori Golang

Di Golang, pengurusan memori dilaksanakan oleh mekanisme kutipan sampah. Pengaturcara tidak perlu memperuntukkan dan melepaskan memori secara manual Pengkompil dan sistem masa jalan akan menguruskan memori secara automatik, yang mengurangkan beban pembangun.

Algoritma kutipan sampah Golang menggunakan gabungan algoritma sapu tanda dan algoritma salin. Apabila sistem masa jalan mengesan kehadiran objek yang tidak dirujuk, ia secara automatik menandakannya sebagai objek sampah dan mengosongkannya semasa pengumpulan sampah berikutnya. Selain itu, Golang juga meletakkan objek kecil pada timbunan dan menggunakan algoritma salinan mudah untuk kitar semula.

Kadangkala, kita perlu menanyakan penggunaan memori program untuk lebih memahami prestasi program dan keperluan pengoptimuman. Seterusnya, kami akan memperkenalkan cara menggunakan Golang untuk menanyakan jejak memori program.

2. Alat pertanyaan memori Golang

  1. pprof

pprof ialah alat analisis prestasi yang disediakan oleh Golang. Ia boleh menganalisis penggunaan CPU dan memori program ini dianalisis.

Mula-mula, import pakej pprof dalam kod:

import (
    "net/http"
    _ "net/http/pprof"
)

Kemudian dalam fungsi utama program, tambahkan kod berikut:

go func() {
    http.ListenAndServe("localhost:8080", nil)
}()

Dengan cara ini, selepas program bermula, kami Anda boleh menggunakan alat pprof dengan melawati "http://localhost:8080/debug/pprof/".

Kita boleh memasukkan "http://localhost:8080/debug/pprof/heap" dalam penyemak imbas untuk menyemak penggunaan memori timbunan program, seperti yang ditunjukkan dalam rajah di bawah:

Akhir sekali, kita boleh menggunakan alat baris arahan go tool pprof untuk menganalisis data yang direkodkan. Sebagai contoh, kita boleh menggunakan arahan berikut untuk melihat fungsi yang menggunakan paling banyak memori dalam program:

go tool pprof http://localhost:8080/debug/pprof/heap
  1. runtime.MemStats

Selain pprof, Golang juga menyediakan masa jalanan Jenis MemStats boleh digunakan untuk mendapatkan statistik memori program.

Kita boleh mendapatkan statistik memori melalui kod berikut:

import (
    "runtime"
    "unsafe"
)

func getMemStats() runtime.MemStats {
    var mem runtime.MemStats
    runtime.ReadMemStats(&mem)
    return mem
}

Dengan memanggil fungsi getMemStats, kita boleh mendapatkan statistik memori berikut:

  • Alloc: Sudah Jumlah jumlah memori objek yang diperuntukkan tetapi belum dikeluarkan, dalam bait
  • TotalAlloc: jumlah keseluruhan memori yang diperuntukkan oleh sistem semasa masa jalan, dalam bait
  • Sys: The total program jumlah memori yang diminta oleh sistem pengendalian, dalam bait;
  • NumGC: bilangan kutipan sampah yang dilakukan oleh sistem semasa masa jalankan; statistik memori program:
  • mem := getMemStats()
    fmt.Printf("Alloc: %v bytes
    ", mem.Alloc)
    fmt.Printf("TotalAlloc: %v bytes
    ", mem.TotalAlloc)
    fmt.Printf("Sys: %v bytes
    ", mem.Sys)
    fmt.Printf("NumGC: %v
    ", mem.NumGC)
3. Pengoptimuman penggunaan memori

Walaupun pengurusan memori Golang adalah automatik, pengaturcara masih perlu mempertimbangkan isu penggunaan memori. Berikut ialah beberapa teknik pengoptimuman penggunaan memori biasa:

Kurangkan pemecahan memori

  1. Peruntukan dan pelepasan memori yang kerap akan membawa kepada pemecahan memori dan menduduki terlalu banyak memori. Kita boleh menggunakan sync.Pool untuk menggunakan semula beberapa objek dan mengurangkan penjanaan pemecahan memori.

Elakkan menggunakan pembolehubah global

  1. Pembolehubah global akan sentiasa wujud sepanjang kitaran hayat program dan menduduki sejumlah memori. Untuk mengurangkan jejak memori program, kita harus cuba mengelak daripada menggunakan pembolehubah global dan sebaliknya menggunakan pembolehubah tempatan atau berkongsi data melalui laluan parameter.

Kurangkan penyalinan memori

  1. Penyalinan memori merupakan faktor utama dalam mengisi memori. Kita harus cuba mengelakkan salinan memori yang tidak diperlukan dan sebaliknya menggunakan penunjuk atau kepingan untuk mengelakkan salinan memori.

Gunakan pengkomputeran penstriman apabila memproses sejumlah besar data

  1. Apabila memproses sejumlah besar data, kita harus menggunakan pengkomputeran penstriman untuk mengelakkan limpahan memori. Pengkomputeran penstriman boleh mengira data dalam kelompok dan hasil keluaran, yang secara relatifnya lebih mesra dari segi penggunaan memori.

Penggunaan perpustakaan standard

  1. Pustaka standard Golang telah menyediakan beberapa struktur data biasa dan pelaksanaan algoritma Kami boleh menggunakan alatan dalam perpustakaan standard untuk mengelakkan pertindihan Reinvent the wheel untuk mengurangkan jumlah kod dan penggunaan memori.
Ringkasan:

Artikel ini memperkenalkan cara untuk menanyakan penggunaan memori program di Golang. Kita boleh menggunakan alat pprof untuk analisis, atau kita boleh mendapatkan statistik memori melalui runtime.MemStats. Selain itu, artikel ini juga memperkenalkan beberapa teknik pengoptimuman penggunaan memori yang biasa digunakan, saya harap ia akan membantu semua orang.

Atas ialah kandungan terperinci Pertanyaan Golang mengambil ingatan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn