Сделайте что-нибудь перед тем, как закончится память - PullRequest
5 голосов
/ 26 июня 2010

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

Ответы [ 2 ]

2 голосов
/ 26 июня 2010

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

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

1 голос
/ 26 июня 2010

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...