Fare qualcosa di poco prima a corto di memoria
-
30-09-2019 - |
Domanda
C'è un modo in Java per fare qualcosa prima di esaurire la memoria. Ad esempio, tenere un elenco di precedenti documento afferma (per undo) e solo la rimozione di molto vecchi stati quando la memoria sta per esaurirsi?
Soluzione
Per esempio, tenere un elenco di precedenti documento afferma (per undo) e solo la rimozione di molto vecchi stati quando la memoria sta per esaurirsi?
Si può essere in grado di fare qualcosa con SoftReference
. Si noti anche la documentazione generale per il java .lang.ref pacchetto. Se gli oggetti sono raggiungibili solo attraverso un SoftReference
, saranno garbage collection prima che si verifichi un errore di memoria. Si noti comunque che le macchine virtuali non sono tenuti a mantenere tali riferimenti prima di un tale evento o fare alcuna garanzia sulla quale ordine potrebbero essere cancellati in. Si potrebbe essere meglio la loro combinazione con una qualche forma di persistenza.
Altri suggerimenti
Sì, è certamente possibile.
Io probabilmente usare un elenco di SoftReference s per le precedenti afferma il documento. Questi sono garantiti da smaltire prima che si verifichi un'eccezione di memoria.
A un certo intervallo periodico, è possibile pulire i riferimenti nulli fuori dalla lista.
Io consiglio anche mantenere un normale riferimento allo stato più recente in modo da poter garantire sempre almeno un undo: -)
Essa dipenderà l'attuazione JVM, ma se siete fortunati la JVM non mancherà di tenere gli stati più recenti e smaltire i più vecchi. Questo non è strettamente necessario nella JVM specifiche, ma è il comportamento consigliato.