Сделайте что-то непосредственно перед исчерпыванием памяти

Есть ли путь в Java, чтобы сделать что-то непосредственно перед исчерпыванием памяти. Например, сохраняя список предыдущих состояний документа (для отмены) и только удаляя очень старые состояния, когда память собирается быть исчерпанной?

5
задан Bart van Heukelom 26 June 2010 в 15:59
поделиться

2 ответа

Например, сохранить список предыдущих состояний документа (для отмены) и удалить очень старые состояния только тогда, когда память скоро будет исчерпана?

Вы можете что-то сделать с помощью SoftReference . Также обратите внимание на общую документацию для пакета java.lang.ref . Если объекты доступны только через SoftReference , они будут собраны мусором до того, как произойдет ошибка нехватки памяти. Обратите внимание, однако, что виртуальные машины не обязаны хранить эти ссылки до такого события или давать какие-либо гарантии относительно того, в каком порядке они могут быть очищены. Возможно, вам лучше всего объединить их с некоторой формой сохранения.

2
ответ дан 15 December 2019 в 06:14
поделиться

Да, конечно, возможно.

Я бы, вероятно, использовал список SoftReference для ваших предыдущих состояний документа. Они гарантированно удаляются до того, как возникнет исключительная ситуация нехватки памяти.

Через некоторый периодический интервал вы можете удалить из списка пустые ссылки.

Я бы также рекомендовал сохранить обычную ссылку на самое последнее состояние, чтобы вы всегда могли гарантировать хотя бы одну отмену: -)

Это будет зависеть от реализации JVM, но если вам повезет, JVM сохранит самые последние состояния и избавиться от самых старых. Это не является строго обязательным в спецификации JVM, но является рекомендуемым поведением.

1
ответ дан 15 December 2019 в 06:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: