¿Qué es el archivo asignado a la memoria en Java?

Los archivos mapeados en memoria son archivos especiales ocasionales en Java que ayudan a acceder al contenido directamente desde la memoria. La programación Java admite archivos mapeados en memoria con el paquete java.nio. La E/S mapeada en memoria utiliza el sistema de archivos para establecer una asignación de memoria virtual del usuario directamente a las páginas del sistema de archivos. Se puede tratar simplemente como una gran array. La memoria utilizada para cargar archivos asignados a la memoria está fuera de Java Heap Space.

Aquí usamos MappedByteBuffer para leer y escribir desde la memoria. Esta utilidad se puede utilizar para crear y almacenar archivos mapeados en memoria eficientes. Algunas características importantes de MappedByteBuffer son las siguientes:

  1. MappedByteBuffer y la asignación de archivos siguen siendo válidos hasta que se recolecta la basura. sun.misc.Cleaner es probablemente la única opción disponible para borrar archivos mapeados en memoria.
  2. El sistema operativo generalmente realiza la lectura y escritura en el archivo asignado a la memoria para escribir contenido en un disco.
  3. Prefiera el búfer directo al búfer indirecto para un mejor rendimiento.
  4. La memoria utilizada para cargar el archivo está fuera del montón de Java y reside en la memoria compartida, lo que nos permite dos formas diferentes de acceder al archivo. Por cierto, esto depende de si está utilizando el búfer directo o indirecto.

Hagamos un rollover e implementemos lo mismo antes de concluir las ventajas y desventajas del archivo mapeado en memoria.

Ejemplo:

Java

// Java Program to illustrate Memory Mapped File via
// RandomAccessFile to open a file using FileChannel's map()
// method
 
// Importing standard classes from respective packages
import java.io.*;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.util.Scanner;
 
// Main class
public class GFG {
 
    // The next line shows 10 MB as the max value of the
    // count
    private static int count = 10485760;
 
    // Main driver method
    public static void main(String[] args) throws Exception
    {
 
        // Display message asking user to enter the input
        // string
        System.out.print("enter character or string");
 
        // The method RandomAccessFile has an object sc and
        // is used to create a text file
 
        // Try block to check for exceptions
        try (RandomAccessFile sc
             = new RandomAccessFile("text.txt", "rw")) {
 
            // Scanner class to take objects input
            // Taking String a as input
            Scanner s = new Scanner(System.in);
 
            String a;
 
            a = s.next();
 
            // Mapping the file with the memory
            // Here the out is the object
            // This command will help us enable the read and
            // write functions
            MappedByteBuffer out = sc.getChannel().map(
                FileChannel.MapMode.READ_WRITE, 0, 10);
 
            // Writing into memory mapped file
            // taking it as 10 and printing it accordingly
            for (int i = 0; i < 10; i++) {
                System.out.println((out.put((byte)i)));
            }
 
            // Print the display message as soon
            // as the memory is done writing
            System.out.println(
                "Writing to Memory is complete");
 
            // Reading from memory mapped files
            // You can increase the size , it not be 10 , it
            // can be higher or lower Depending on the size
            // of the file
            for (int i = 0; i < 10; i++) {
                System.out.println((char)out.get(i));
            }
 
            // Display message on the console showcasing
            // successful execution of the program
            System.out.println(
                "Reading from Memory is complete");
        }
    }
}

Producción:

Hasta ahora, hemos estudiado qué y por qué usamos archivos mapeados en memoria y también hemos visto la implementación. Pero con estos méritos, también vienen los deméritos que se muestran a continuación:

Los méritos del archivo mapeado en memoria son los siguientes:

  • Rendimiento : los archivos asignados a la memoria son mucho más rápidos que los estándar.
  • Latencia compartida: el archivo se puede compartir, lo que le brinda memoria compartida entre procesos y puede tener una latencia 10 veces más baja que usar un Socket over loopback.
  • Archivos grandes: Nos permite mostrar los archivos más grandes a los que no se puede acceder de otra manera. Son mucho más rápidos y limpios.

Los inconvenientes del archivo mapeado en memoria son los siguientes:

  • Errores : uno de los inconvenientes del archivo asignado a la memoria es el número cada vez mayor de errores de página a medida que aumenta la memoria. Debido a que solo una pequeña cantidad ingresa en la memoria, la página que puede solicitar si no está disponible en la memoria puede generar una falla de página. Pero afortunadamente, la mayoría de los sistemas operativos generalmente pueden mapear toda la memoria y acceder a ella directamente usando el lenguaje de programación Java.

Publicación traducida automáticamente

Artículo escrito por saransh9342 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *