-Stosh

держиваю устаревшее Java-приложение, которое использует плоские файлы (простой текст) для сохранения. Из-за характера приложения размер этих файлов может достигать 100 МБ в день, и часто ограничивающим фактором в производительности приложения является ввод-вывод файла. В настоящее время приложение использует обычный файл java.io.FileOutputStream для записи данных на диск.

Недавно несколько разработчиков утверждали, что использование отображенных в память файлов, реализованных в собственном коде (C / C ++) и доступ к которым осуществляется через JNI, обеспечит более высокую производительность. Тем не менее, FileOutputStream уже использует нативные методы для своих основных методов (т.е. write (byte [])), поэтому он выглядит ненадежным без точных данных или, по крайней мере, отдельных примеров.

У меня есть несколько вопросов по этому поводу:

Действительно ли это утверждение верно? Будут ли в памяти отображены файлывсегда обеспечить более быстрый ввод-вывод по сравнению с Java FileOutputStream?

Предоставляет ли класс MappedByteBuffer, к которому осуществляется доступ из FileChannel, ту же функциональность, что и библиотека файлов с собственным отображением памяти, доступ к которой осуществляется через JNI? Чего не хватает в MappedByteBuffer, что может привести к использованию решения JNI?

Каковы риски использования файлов с отображенной памятью для дискового ввода-вывода в производственном приложении? То есть приложения, которые имеют непрерывную работоспособность с минимальной перезагрузкой (раз в месяц, не более). Реальные анекдоты из производственных приложений (Java или другие) предпочтительнее.

Вопрос № 3 важен - я мог бы ответить на этот вопрос самчастично написав «игрушечное» приложение, которое выполняет тестирование ввода-вывода с использованием различных опций, описанных выше, но, отправляя сообщение в SO, я надеюсь, что анекдоты / данные реального мира будут разжеваны.

[РЕДАКТИРОВАТЬ] Уточнение - каждый день работы приложение создает несколько файлов размером от 100 МБ до 1 гигабайта. В общей сложности приложение может записывать несколько гигабайт данных в день.

Ответы на вопрос(7)

Ваш ответ на вопрос