MappedByteBuffer - отображение страниц в физической памяти
Насколько я понимаю, MappedByteBuffer
после звонка FileChannel.map
"отображает" содержимое файла в память, но не обязательно загружает весь файл. Таким образом, если я начну читать, например, с позиции pos(0), страница может фактически быть загружена с диска в это время, например, первые 4096 байт файла, в основная память (вне кучи, так как это буфер прямой памяти).
Мой вопрос - что произойдет, если я позвоню load()
метод в буфере? Будет ли это, в лучшем случае, попытаться отобразить ВЕСЬ файл в память, например, точно загрузить 1 ГБ данных, учитывая, что это количество, которое я отобразил?
1 ответ
Будет ли он пытаться отобразить ВЕСЬ файл в память, например, точно загрузить 1 ГБ данных, учитывая, что это сумма, которую я отобразил?
В основном да. JVM попытается сделать это.
Но "лучшее усилие" означает, что не гарантируется, что весь файл будет загружен. И нет никакой гарантии, что файл останется загруженным.
Поведение в конечном итоге определяется операционной системой (которая управляет ресурсами виртуальной памяти), и оно будет зависеть от того, сколько физической памяти имеется в системе, что нужно другим приложениям и, возможно, от других вещей.