Являются ли файлы с памятью в Java похожими на файлы с памятью для Windows? Или это только эмуляция, основанная на общих операциях памяти и файлов в Java?Java-файлы с отображением памяти?
ответ
Он использует поддержку ОС для файлов с отображением памяти.
Я пытаюсь найти документацию, чтобы поддержать это, но я еще не нашел ничего убедительного. Тем не менее, различные биты документации делать говорят такие вещи, как это:
Многие из деталей, отображенные в памяти файлы являются по своей сути зависит от используемой операционной системы и, следовательно, не определено. Поведение этого метода, когда запрашиваемая область не полностью содержится в файле этого канала, не указана. Независимо от того, будут ли изменения, внесенные в содержимое или размер базового файла, этой программой или другим, распространяются в буфер, не указывается. Скорость, с которой изменения в буфере распространяются в файл, не указана.
Если все было просто эмулировано, не было бы необходимости в таком неуказанном поведении.
Чтение между строками вашего вопроса и комментария, то, что вы пытаетесь сделать, это использовать файл с отображением памяти для обмена памятью/объектами между Java и C++-приложением.
Мой совет: не пытайтесь это делать.
Есть сложные вопросы, которые необходимо будет решить, чтобы сделать это надежно:
- синхронизации использования двух приложений в общей структуре данных,
- обеспечения того, чтобы изменения, сделанные одним приложением получить надежно написано в основной памяти и считывается другим,
- , гарантируя, что изменения будут сброшены на диск в ожидаемом порядке.
Специфическая проблема Java заключается в том, что вы не можете поместить свои объекты Java в область с отображением памяти. Вместо этого вам придется сериализовать и десериализовать их каким-то образом, что совместимо с представлениями, которые ожидает сторона C++.
Наконец, даже если вы преуспела в решении всех этих вопросов, ваше решение может быть хрупким, потому что это зависит от неопределенного поведения ОС, C++ и реализаций Java , которые потенциально могут изменить если изменить версии любой из вышеперечисленных.
Спасибо @ Jon за ответ! Как я понял вас: классы java.nio (для манипулирования файлами с отображением памяти) обертывают Windows API. Я прав?))) – Edward83 2010-11-23 22:41:45
Я попытался сделать какой-то тест. Я хотел создать один MMF и поделиться им между двумя процессами: Win32 C++ и Java с nio. Но тест не удался, потому что, поскольку я нашел, я не могу создать/открыть «Именованный» MMF в Java. lol))) – Edward83 2010-11-23 23:24:40