Pergunta

Os arquivos mapeados de memória em Java são como arquivos mapeados de memória para o Windows? Ou é apenas emulação com base na memória e operações comuns de arquivo em Java?

Foi útil?

Solução

Ele usa o suporte do sistema operacional para arquivos mapeados de memória.

Estou tentando encontrar documentação para apoiar isso, mas ainda não encontrei nada conclusivo. No entanto, vários bits dos documentos Faz Diga coisas assim:

Muitos dos detalhes dos arquivos mapeados de memória são inerentemente dependentes do sistema operacional subjacente e, portanto, não são especificados. O comportamento desse método quando a região solicitada não está completamente contida no arquivo deste canal não é especificado. Se as alterações feitas no conteúdo ou tamanho do arquivo subjacente, por este programa ou outro, são propagadas ao buffer não são especificadas. A taxa na qual as alterações no buffer são propagadas para o arquivo não são especificadas.

Se tudo fosse emulado, não haveria necessidade de esse comportamento não especificado.

Outras dicas

Lendo nas entrelinhas da sua pergunta e comentário, o que você está tentando fazer é usar um arquivo mapeado de memória para compartilhar memória/objetos entre um aplicativo Java e C ++.

Meu conselho é Não tente fazer isso.

Existem questões difíceis que precisariam ser abordadas para tornar isso confiável:

  • Sincronizando o uso da estrutura de dados compartilhados pelos dois aplicativos,
  • garantindo que as mudanças feitas por um aplicativo sejam escritas de maneira confiável na memória principal e lidas pelo outro,
  • Garantir que as mudanças sejam descartadas para disco na ordem esperada.

Um problema específico do Java é que você não pode colocar seus objetos Java na área mapeada da memória. Em vez disso, você precisa serializar e desserrá -los de alguma maneira compatível com as representações que o lado C ++ está esperando.

Finalmente, mesmo se você conseguir abordar todos esses problemas, é provável que sua solução seja frágil porque depende do comportamento não especificado das implementações de OS, C ++ e Java Isso potencialmente pode mudar Se você alterar as versões de qualquer um dos itens acima.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top