¿Los archivos mapeados en memoria en Java son como los mapas mapeados en memoria para Windows? ¿O es solo una emulación basada en memoria y operaciones comunes de archivos en Java?¿Archivos mapeados en memoria de Java?
Respuesta
Utiliza la compatibilidad con el sistema operativo para archivos mapeados en memoria.
Estoy tratando de encontrar documentación para respaldar eso, pero todavía no he encontrado nada concluyente. Sin embargo, varios fragmentos de los documentos hacen decir cosas como esta:
Muchos de los detalles de los archivos mapeados en memoria dependen intrínsecamente en el sistema operativo subyacente y son, por tanto, no especificada. El comportamiento de este método cuando la región solicitada no está completamente contenida dentro del archivo de este canal no está especificado. No se especifican si los cambios realizados en el contenido o el tamaño del archivo subyacente, por este programa u otro, se propagan al búfer. La velocidad a la que se propagan los cambios en el búfer al archivo no está especificada.
Si todo fuera simplemente emulado, no habría necesidad de tal comportamiento no especificado.
Leyendo entre las líneas de su pregunta y comentario, lo que está tratando de hacer es usar un archivo de memoria mapeada para compartir memoria/objetos entre una aplicación Java y C++.
Mi consejo es no intente hacer esto.
Hay cuestiones difíciles que deben ser abordados para hacer de este fiable:
- sincronización uso de la estructura de datos compartida las dos aplicaciones,
- asegurar que los cambios realizados por una aplicación obtener de forma fiable escritos a la memoria principal y leída por la otra,
- asegurando que los cambios se descarguen al disco en el orden esperado.
Un problema específico de Java es que no puede colocar sus objetos Java en el área de memoria asignada. En su lugar, debe serializarlos y deserializarlos de alguna manera que sea compatible con las representaciones que espera el lado de C++.
Por último, incluso si tienen éxito en el tratamiento de todas estas cuestiones, su solución es probable que sea frágil, porque depende de la conducta no especificada del sistema operativo, C++ y las implementaciones de Java que potencialmente puede cambiar si cambia versiones de cualquiera de los anteriores.
gracias por la respuesta! aviso util;) – Edward83
- 1. Archivos mapeados en memoria en Java
- 2. Archivos mapeados en memoria: pros y contras?
- 3. Cuándo usar los archivos mapeados en memoria?
- 4. Monitoreo de archivos mapeados de memoria de Windows
- 5. Registros mapeados de memoria en Python
- 6. Archivos mapeados de memoria: cómo monitorear el uso de la memoria
- 7. ¿Existe un límite práctico en la cantidad de archivos mapeados en memoria en iOS?
- 8. ¿Es posible evitar copias de datos cuando se usan archivos mapeados en memoria en C#?
- 9. Rendimiento de archivos mapeados en memoria Win32 vs. CRT fopen/fread
- 10. Cómo usar operaciones entrelazadas contra archivos mapeados en memoria en .Net
- 11. Utilizando C++ Boost archivos mapeados de memoria para crear estructuras de datos de disco posterior
- 12. Java en la estructura de archivos en memoria?
- 13. cómo descargar archivos grandes sin problemas de memoria en java
- 14. Asignación de memoria de archivos frente a CreateFile/ReadFile
- 15. Sistema de archivos en memoria para Windows
- 16. memoria eficientes en Java
- 17. compilación en memoria de Java
- 18. Modelo de memoria Java
- 19. administración de memoria java
- 20. Archivos de memoria asignados .NET
- 21. En la memoria Sistema de archivos FUSE
- 22. Análisis de archivos de texto en Java
- 23. Memoria Archivos asignados y escrituras atómicas de bloques individuales
- 24. Java: ByteArrayOutputStream eficiente en memoria
- 25. Notificación de falta de memoria en Java
- 26. Memoria máxima de Java en Windows XP
- 27. ¿Cómo perfil de memoria en Java?
- 28. Cualquier concepto de memoria compartida en Java
- 29. Puede haber pérdida de memoria en Java
- 30. Java consume demasiada memoria
¡Gracias @Jon por la respuesta! Como lo entendí, las clases java.nio (para manipular los archivos mapeados en memoria) envuelven las funciones de archivo mapeadas en memoria de la API de Windows? ¿Estoy en lo cierto?))) – Edward83
Traté de hacer algunas pruebas. Quería crear un archivo MMF y compartirlo entre dos procesos: Win32 C++ y Java con nio. Pero la prueba falló, porque como encontré, no puedo crear/abrir MMF "Nombrado" en Java. lol))) – Edward83