Domanda

file

sono mappati in memoria in Java come file mappati in memoria per Windows? O è solo l'emulazione basata su operazioni di memoria e comuni di file in Java?

È stato utile?

Soluzione

Si utilizza il supporto del sistema operativo per i file di memoria mappata.

Sto cercando di trovare la documentazione per eseguire il che fino, ma non ho ancora trovato nulla conclusivo. Tuttavia, vari pezzi di docs non dicono cose in questo modo:

  

Molti dei dettagli di file mappati in memoria sono intrinsecamente dipende dal sistema operativo sottostante e sono quindi non specificata. Il comportamento di questo metodo quando la regione in questione non è completamente contenuto all'interno del file di questo canale non è specificato. Se le modifiche apportate al contenuto o dimensione del file sottostante, da questo programma o altro, si propagano nel buffer non è specificato. La velocità a cui cambia al buffer vengono propagate non è specificato.

Se tutto fosse solo emulato, non ci sarebbe alcun bisogno di tale comportamento non specificato.

Altri suggerimenti

Leggere tra le righe della sua domanda e commentare, quello che si sta cercando di fare è utilizzare un file di memoria mappata in memoria share / oggetti tra Java e l'applicazione C ++.

Il mio consiglio è non provate a fare questo .

Ci sono questioni difficili che dovranno essere affrontate per rendere questo affidabile:

  • sincronizzazione uso le due applicazioni della struttura dati condivisa,
  • in modo che le modifiche apportate da un'applicazione vengono scritti in modo affidabile memoria principale e letti da l'altro,
  • garantire che le modifiche vengono scaricate su disco nell'ordine previsto.

Un problema specifico Java è che non si può mettere gli oggetti Java tuo nell'area di memoria mappata. Invece è necessario serializzare e deserializzare in qualche modo che sia compatibile con le rappresentazioni che il lato C ++ è in attesa.

Infine, anche se non riesce ad affrontare tutti questi problemi, la soluzione è probabile che sia fragile, perché dipende dal comportamento non specificato del sistema operativo, C ++ e implementazioni Java che potenzialmente potrebbe cambiare se si modificano le versioni di una di queste.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top