MappedByteBuffer - отображение страниц в физической памяти

Насколько я понимаю, MappedByteBufferпосле звонка FileChannel.map "отображает" содержимое файла в память, но не обязательно загружает весь файл. Таким образом, если я начну читать, например, с позиции pos(0), страница может фактически быть загружена с диска в это время, например, первые 4096 байт файла, в основная память (вне кучи, так как это буфер прямой памяти).

Мой вопрос - что произойдет, если я позвоню load() метод в буфере? Будет ли это, в лучшем случае, попытаться отобразить ВЕСЬ файл в память, например, точно загрузить 1 ГБ данных, учитывая, что это количество, которое я отобразил?

1 ответ

Решение

Будет ли он пытаться отобразить ВЕСЬ файл в память, например, точно загрузить 1 ГБ данных, учитывая, что это сумма, которую я отобразил?

В основном да. JVM попытается сделать это.

Но "лучшее усилие" означает, что не гарантируется, что весь файл будет загружен. И нет никакой гарантии, что файл останется загруженным.

Поведение в конечном итоге определяется операционной системой (которая управляет ресурсами виртуальной памяти), и оно будет зависеть от того, сколько физической памяти имеется в системе, что нужно другим приложениям и, возможно, от других вещей.

Другие вопросы по тегам