Junior — Middle
Jak systematizovat situaci, kdy je žádost o paměť úspěšná, ale zdrojů není dostatek k jejímu poskytnutí?
sobes.tech AI
Odpověď od AI
V Go, když úspěšně proběhne žádost o alokaci paměti (například přes make nebo new), ale skutečně není k dispozici dostatek zdrojů pro plné využití, obvykle se objeví situace související s nedostatkem paměti nebo fragmentací.
Pro systematizaci takových případů lze:
- Zpracovávat chyby vrácené funkcemi alokace paměti, pokud existují (ačkoliv make a new obvykle nevracejí chybu, ale vyvolávají panic při kritickém nedostatku).
- Používat profilování a sledování paměti (pprof, runtime.MemStats) pro sledování využití zdrojů.
- V případě panic z nedostatku paměti použít recover pro zpracování a zaznamenání.
Příklad zpracování panic při nedostatku paměti:
func safeAlloc() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Paměť nebyla alokována:", r)
}
}()
_ = make([]byte, 1<<40) // pokus o alokaci velmi velkého slice
}
Tímto se systémové zpracování omezuje na správu chyb a sledování stavu paměti v aplikaci.