JDialog instanciarlo cada vez o solo ocultarlo | Java

En nuestras aplicaciones de escritorio usando Swing muchas veces o casi siempre es necesario el uso del componente JDialog principalmente para que el usuario ingrese cierta información y posteriormente almacenar dicha información.

Después de haber creado un JDialog, por lo general nos encontramos con la incógnita de cuál es el uso correcto para tratar de ahorrar la mayor cantidad de recursos y especialmente liberar memoria RAM de manera adecuada y no tener el error de falta de memoria, por tal motivo he realizado tres pequeñas pruebas que son las siguientes:

1Declarar una vez e instanciar al abrir

En esta prueba instanciamos el JDialog declarada de forma global 10000 veces y utilizamos el método setVisible(true) y dispose() dentro de un ciclo for; al finalizar la ejecución hubo un consumo aproximado de 1.100 MB lo que implica más de 1 GB de memoria.

AddCustomerDialog dialog;

for (int i = 0; i < 10000; i++) {
    dialog=new AddCustomerDialog();     
    dialog.setVisible(true);
    dialog.dispose();
}

2 Declarar e instanciar una única vez

En este punto lo que se hizo es declarar una única vez de forma global e instanciarlo y en el bucle for solo mostramos y cerramos cabe resaltar que al iniciar el JFrame ya hubo un consumo extra de memoria de aproximadamente 10 MB pero una vez que acabó el ciclo tenemos un consumo aproximado de 75 MB incluidos los 10 MB   iniciales.
AddCustomerDialog dialog= new AddCustomerDialog();
for (int i = 0; i < 10000; i++) {               
    dialog.setVisible(true);
    dialog.dispose();
}

3 Declarar dentro del ciclo en un método

En este punto declaramos la variable de forma local es decir creamos un método y dentro del ciclo for hacemos el mismo procedimiento pero declarando e instanciando dentro del ciclo y se tuvo un consumo aproximado de 85 MB.
for(int i = 0; i < 10000; i++){
    AddCustomerDialog dialog = new AddCustomerDialog();
    dialog.setVisible(true);
    dialog.dispose();
}

Conclusión

Como podemos observar tenemos dos posibilidades tanto el punto 2 como el 3, ya que estos métodos son los que mejor manejan el consumo de memoria, pero ahora va a depender si el JDialog lo estás llamando desde otras funciones y necesariamente requieres que sea declarado de forma global, también puedes leer acerca de usar variables locales o globales aquí.

En mi opinión es mejor utilizar la tercera forma ya que lo vas a englobar en un método y lo llamas ya sea mediante un botón o algún evento y el recolector de basura de Java se encargará de eliminar la referencia una vez cierres el JDialog, ya que no lo tendrás declarado de forma global; mientras no llames de forma abrupta como en los ejemplos tu aplicación va a estar optimizada en cuanto a consumo de memoria se refiere.

Comentarios

Entradas populares