我正在编写一个golang应用程序以缓存在内存字节数组中。如果没有更多可用内存,则应丢弃/重用旧的“页面”。
我正在测试"out of memory"
事件,但是recover()
无法正常工作。
在其他页面上,我读到“您不能。所有OOM条件都终止Go程序。”。
在 golang 中还有更好的方法吗?
如果我在单独的线程中尝试它,它只会使该线程崩溃吗?
在下面的代码中,如果内存不足的话,如何修复TryMake返回nil?
package main
import (
"math"
)
//TryMake try to allocate memory
func TryMake(bytesize uint32) (buf []byte) {
defer func() {
if recover() != nil {
buf = nil
}
}()
buf = make([]byte, bytesize)
return buf
}
//TestTryMake test
func TestTryMake() {
var mk [602]*[]byte
for i := 0; i < len(mk); i++ {
bf := TryMake(math.MaxInt32)
mk[i] = &bf
if mk[i] == nil {
print("last ", i)
}
}
print("all completed ", len(mk))
}
func main() {
TestTryMake()
}