Есть ли путь в Java, чтобы сделать что-то непосредственно перед исчерпыванием памяти. Например, сохраняя список предыдущих состояний документа (для отмены) и только удаляя очень старые состояния, когда память собирается быть исчерпанной?
Например, сохранить список предыдущих состояний документа (для отмены) и удалить очень старые состояния только тогда, когда память скоро будет исчерпана?
Вы можете что-то сделать с помощью SoftReference
. Также обратите внимание на общую документацию для пакета java.lang.ref . Если объекты доступны только через SoftReference
, они будут собраны мусором до того, как произойдет ошибка нехватки памяти. Обратите внимание, однако, что виртуальные машины не обязаны хранить эти ссылки до такого события или давать какие-либо гарантии относительно того, в каком порядке они могут быть очищены. Возможно, вам лучше всего объединить их с некоторой формой сохранения.
Да, конечно, возможно.
Я бы, вероятно, использовал список SoftReference для ваших предыдущих состояний документа. Они гарантированно удаляются до того, как возникнет исключительная ситуация нехватки памяти.
Через некоторый периодический интервал вы можете удалить из списка пустые ссылки.
Я бы также рекомендовал сохранить обычную ссылку на самое последнее состояние, чтобы вы всегда могли гарантировать хотя бы одну отмену: -)
Это будет зависеть от реализации JVM, но если вам повезет, JVM сохранит самые последние состояния и избавиться от самых старых. Это не является строго обязательным в спецификации JVM, но является рекомендуемым поведением.