
Cuando trabajas con Java, normalmente con proyectos pequeños, no tienes que preocuparte por la memoria que tengas disponible o la que se esté usando. Pero llega un momento en el que el proyecto se vuelve mayor y las necesidades de memoria del mismo aumentan, y no suele hacerlo de forma lineal.
Sea como sea el proyecto en el que estés, siempre es conveniente realizar una buena gestión de la memoria y, en la medida de lo posible, eliminar referencias que no vayamos a volver a usar, permitiendo así que el colector de basura libere los recursos de las mismas.
Aún llevando un buen control de las diferentes variables y objetos en tu proyecto, es bueno saber en qué medida afectan ciertas situaciones al preciado recurso de la memoria. Para ello, vamos a explicar como podemos ver la memoria libre, usada, total y máxima del entorno de la Máquina Virtual de Java mientras ejecuta nuestro código.
Para ello, vamos a hacer uso del entorno de ejecución de la aplicación, obteniendo los datos buscados del mismo. Te lo mostramos en el siguiente código de ejemplo:
1 2 3 4 5 6 7 8 9 10 11 | public static void main (String args[]){ int dataSize = 1024 * 1024; Runtime runtime = Runtime.getRuntime(); System.out.println ("Memoria máxima: " + runtime.maxMemory() / dataSize + "MB"); System.out.println ("Memoria total: " + runtime.totalMemory() / dataSize + "MB"); System.out.println ("Memoria libre: " + runtime.freeMemory() / dataSize + "MB"); System.out.println ("Memoria usada: " + (runtime.totalMemory() - runtime.freeMemory()) / dataSize + "MB"); } |
Como puedes ver en el código, lo primero que hacemos es crearnos una variable de tipo entero con un valor de 1024 * 1024, o lo que es lo mismo, 1 MB. Como la memoria nos va a venir en bytes, al dividirla por esta variable el resultado se nos mostrará en Megabytes.
Posteriormente, asignamos a la variable runtime el entorno de ejecución de la aplicación actual, para acto seguido, imprimir por consola los datos pertenecientes a las distintos valores de memoria buscados:
- runtime.maxMemory() – Obtiene la memoria máxima.
- runtime.totalMemory() – Obtiene la memoria total.
- runtime.freeMemory() – Obtiene la memoria libre.
Para obtener el valor de la memoria actualmente usada simplemente restaremos, a la memoria total, la memoria libre.
De esta forma, en cualquier momento en la ejecución de tu aplicación, puedes tener constancia de la cantidad de memoria que en ciertas circunstancias puede llegar a consumir tu código.
