Czy istnieje sposób w Javie, aby coś zrobić, zanim zabraknie pamięci. Na przykład, zachowując listę poprzednich stanów dokumentu (do cofnięcia) i usuwając bardzo stare stany, gdy pamięć ma się wyczerpać?Zrobić coś, zanim zabraknie pamięci
Odpowiedz
Na przykład, zachowując listę poprzednich stanów dokumentu (do cofnięcia) i usuwając tylko bardzo stare stany, gdy pamięć ma się wyczerpać?
Być może będziesz w stanie coś zrobić z SoftReference
. Zauważ także ogólną dokumentację dla pakietu java.lang.ref. Jeśli obiekty są dostępne tylko za pośrednictwem SoftReference
, zostaną one usunięte, zanim wystąpi błąd braku pamięci. Należy jednak pamiętać, że maszyny wirtualne nie są zobowiązane do przechowywania tych odniesień przed takim zdarzeniem ani nie udzielają gwarancji co do kolejności, w jakiej mogą one zostać rozliczone. Możesz najlepiej połączyć je z pewną formą wytrwałości.
Tak, jest to z pewnością możliwe.
Prawdopodobnie użyłbym listy SoftReference s dla poprzednich stanów dokumentu. Gwarantujemy, że zostaną one usunięte przed wystąpieniem wyjątku braku pamięci.
W pewnym odstępie okresowym można usunąć puste wartości z listy.
Polecam również prowadzenie normalnego odniesienie do najnowszego stanu tak, że zawsze można zagwarantować przynajmniej jeden cofnąć :-)
Będzie to zależało od realizacji JVM, ale jeśli masz szczęście JVM będzie zachować najnowsze stany i pozbyć się najstarszych. Nie jest to ściśle wymagane w specyfikacji JVM, ale jest zalecanym zachowaniem.
możliwy duplikat http://stackoverflow.com/questions/2679330/catching-java-lang-outofmemoryerror, http://stackoverflow.com/questions/1692230/is-it-possible-to-catch-out- of-memory-exception-in-java i http://stackoverflow.com/questions/3058198/can-the-jvm-recover-from-an-outofmemoryerror-without-a-restart – BalusC
Chcą złapać OOME, to chodzi o zapobieganie temu. –