Каковы законные причины для вызова MappedByteBuffer.force ()?
В любое время, когда вам нужно, чтобы данные были записаны на диск СЕЙЧАС, а не в ожидании, пока буфер не будет отображенили приложение выходит.
Например, операция «принятие» в транзакционной базе данных, реализованной с использованием MappedByteBuffers, потребует от вас немедленной записи записанных данных на диск.
[[* ОБНОВЛЕНИЕ
После (повторного) чтения javadoc для MappedByteBuffer и FileChannel я пришел к выводу, что благоразумно также вызывать force()
при закрытии приложения ... при условии, что вы хотитеобновления будут сброшены.Насколько я могу судить, спецификация не дает никаких гарантий, что данные будут сброшены отдельно в контексте вызова force()
.
END ]]
У меня сложилось впечатление, что файлы с отображением в памяти "магическим образом" отправляются на диск операционной системой, и вам НЕ нужно их сбрасывать.
Это не правильно.Если JVM умирает катастрофически (или имеет kill -9
'ed), тогда нет никакой гарантии, что сопоставленные буферы будут сброшены.Еще более неопределенно, если сама операционная система умрет.
Операция force()
предназначена для случаев, когда вам нужна уверенность.В случае успеха вам гарантировано, что ваши изменения находятся на диске.
Ваши примеры могут быть законными или не зависеть от деталей заявки.Например, выполнение force()
в ловушке отключения звучит немного опасно.Если приложение закрывается из-за того, что оно обнаружило внутреннюю ошибку, очистка буфера может на самом деле принести больше вреда ... в зависимости от того, насколько хорошо вы спроектировали структуры данных, отображаемые в память.