Файлы, отображенные в памяти Java? - PullRequest
8 голосов
/ 24 ноября 2010

Являются ли отображаемые в память файлы в Java похожими на отображаемые в память файлы для Windows?Или это только эмуляция, основанная на общих операциях с памятью и файлами в Java?

Ответы [ 2 ]

10 голосов
/ 24 ноября 2010

Используется поддержка ОС для отображаемых в память файлов.

Я пытаюсь найти документацию, подтверждающую это, но пока не нашел ничего убедительного. Тем не менее, различные биты документов do говорят что-то вроде этого:

Многие детали отображаемых в памяти файлов по своей природе зависят от базовой операционной системы и поэтому не определены. Поведение этого метода, когда запрашиваемая область не полностью содержится в файле этого канала, не определено. Будут ли изменения, внесенные в содержимое или размер базового файла этой или другой программой в буфер, неизвестно. Скорость, с которой изменения в буфере передаются в файл, не указана.

Если бы все было просто эмулировано, не было бы необходимости в таком неуказанном поведении.

9 голосов
/ 24 ноября 2010

Читая между строк вашего вопроса и комментария, вы пытаетесь использовать отображенный в памяти файл для разделения памяти / объектов между приложениями Java и C ++.

Мой совет: не пытайтесь сделать это .

Существуют сложные проблемы, которые необходимо решить, чтобы сделать это надежным:

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

Специфическая проблема Java заключается в том, что вы не можете поместить свои объекты Java в область отображения памяти. Вместо этого вы должны сериализовать и десериализовать их некоторым способом, который совместим с представлениями, которые ожидает сторона C ++.

Наконец, даже если вам удастся решить все эти проблемы, ваше решение, вероятно, будет хрупким, поскольку оно зависит от неуказанного поведения реализаций ОС, C ++ и Java , которое потенциально может измениться , если вы изменить версии любого из вышеперечисленных.

...