2015-06-01 12 views

risposta

6

non si può.

Se il runtime non può allocare memoria per append, potrebbe non essere in grado di ripristinare o comunicare "Risorsa temporanea non disponibile" all'utente. Ad esempio, potrebbe essere necessario allocare GC per eseguire la pulizia oppure lo scheduler potrebbe tentare di allocare un nuovo thread. Perché non c'è modo di controllare rigorosamente le allocazioni in un programma Go, non c'è modo di gestire con grazia l'esaurimento della memoria.

Tutte le condizioni OOM terminano un programma Go.

+0

Questa domanda mi fa incuriosire, ci deve essere un modo per gestirlo con più grazia. Che ne dici di verificare preventivamente le condizioni di memoria del sistema e dare l'avviso prima di arrivare al punto di panico? – evanmcdonnal

+0

@evanmcdonnal: Come verificherebbe preventivamente? Quello che consideri "usato" potrebbe non essere ciò che il kernel considera usato. Non puoi fare affidamento sul ritorno di malloc, perché ti dà sempre un puntatore quando è attivo overcommit. Il kernel può anche liberare memoria quando necessario, causando il "controllo" per restituire i falsi positivi. (e questo è solo su Linux, dovresti fare questo multipiattaforma) – JimB

+0

Non sono sicuro, era solo un'idea su come migliorare l'applicazione. Se avessi saputo di un pacchetto che poteva dirmi in modo affidabile dove l'utilizzo della mia memoria era relativo al massimo consentito dal runtime, l'avrei usato per scrivere una risposta nel tentativo di descrivere ciò che ho descritto. Potrebbe non esserci un modo affidabile per farlo. Tuttavia, personalmente prenderei i falsi positivi/non la perfetta prevenzione degli errori su errori brutti irrecuperabili. In questa circostanza, la barra per "abbastanza buono" non è molto elevata. – evanmcdonnal

Problemi correlati