go - 如何等待垃圾收集完成?
问题描述
我想知道有没有办法等待 GC 完成?
假设我正在运行基准测试:
BenchmarkUnlimited
(做了很多工作)BenchmarkNumCPU
(受 影响BenchmarkUnlimited
)
这里的问题是BenchmarkUnlimited
创建了大量的分配,垃圾收集所有这些都需要时间,但BenchmarkNumCPU
已经在运行,其结果可能会受到先前基准测试的影响。
有没有办法告诉 go 程序在运行下一个基准测试之前等待 GC 完成?
解决方案
runtime.GC()
Go 基准测试框架在运行每个基准测试之前已经调用。
所以没有问题 - 您可以放心,每个基准测试都是从以前的基准测试开始的。
请参阅go/src/testing/benchmark.go
:(也请注意那里的评论)
func (b *B) runN(n int) {
benchmarkLock.Lock()
defer benchmarkLock.Unlock()
defer b.runCleanup(normalPanic)
// Try to get a comparable environment for each run
// by clearing garbage from previous runs.
runtime.GC() // <========== HERE
b.raceErrors = -race.Errors()
b.N = n
b.parallelism = 1
b.ResetTimer()
b.StartTimer()
b.benchFunc(b)
b.StopTimer()
. . .
推荐阅读
- react-native - 如何在不按本机反应的情况下从异步存储中获取数据
- python - 如何继续执行其余功能以继续更新 tkinter 中的消息框?
- java - 在 Java 中概括地记录事件,而不是每次发生
- powershell - 我想在 poweshell 中删除当前正在执行的文件夹及其内容
- excel - 我如何使用 SUMIF 不返回值而不是 0
- java - 有人可以帮助我在 rest-api 中使用文本文件吗?
- c# - .NET WinForms 高 DPI 缩放 - 如何在显示设置更改后强制表单正确显示?
- javascript - 使用动态键值对创建了一个对象,但访问显示未定义
- r - 带有sf的R中质心外的多边形
- php - Laravel 支付网关 - Softon\Indipay\Exceptions\IndipayParametersMissingException