Question

sont des fichiers mappés en mémoire en Java tels que les fichiers mappées mémoire pour Windows? Ou est-ce que l'émulation basée sur la mémoire et les opérations courantes de fichiers en Java?

Était-ce utile?

La solution

Il utilise le support du système d'exploitation pour les fichiers de mémoire mappées.

Je suis en train de trouver de la documentation pour appuyer cette affirmation, mais je ne l'ai pas encore trouvé concluante de quoi que ce soit. Cependant, différents bits des docs ne dire des choses comme ceci:

  

La plupart des détails de fichiers mappés en mémoire dépendent intrinsèquement sur le système d'exploitation sous-jacent et sont donc non précisées. Le comportement de cette méthode lorsque la région demandée est pas complètement contenu dans le dossier de ce canal est non spécifié. Que les modifications apportées au contenu ou la taille du fichier sous-jacent, par ce programme ou d'une autre, sont propagées dans la mémoire tampon est non spécifiée. La vitesse à laquelle change la mémoire tampon se propagent dans le fichier est non spécifiée.

Si tout était juste émulé, il n'y aurait pas besoin d'un tel comportement non spécifié.

Autres conseils

Lecture entre les lignes de votre question et de commentaires, ce que vous essayez de faire est d'utiliser un fichier de mémoire mappée pour partager la mémoire / objets entre Java et l'application de C.

Mon conseil est ne pas essayer de le faire .

Il y a des questions difficiles qui devront être adressées à rendre ce fiable:

  • synchroniser les deux applications l'utilisation de la structure de données partagées,
  • assurer que les modifications apportées par une application fiable obtenir écrite à la mémoire principale et lu par l'autre,
  • assurer que les changements soient effectués sur disque dans l'ordre prévu.

Un problème Java spécifique est que vous ne pouvez pas mettre votre objets Java dans la zone de mémoire mappée. Au lieu de cela, vous devez serialize et les désérialiser d'une manière compatible avec les représentations que le côté C ++ attend.

Enfin, même si vous ne réussissez à aborder toutes ces questions, votre solution est fragile sans doute parce qu'elle dépend du comportement non précisé de l'OS, les implémentations C ++ et Java qui peuvent potentiellement changer si vous changez les versions de tout de ce qui précède.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top