¿Cuál es la mejor forma de liberar memoria asignada por una matriz de bytes (nuevo byte [tamaño] en Java)?Memoria libre de una matriz de bytes en Java
Respuesta
Eliminando toda la referencia a esa matriz de bytes. El recolector de basura se encargará del resto.
Al crear un nuevo byte [] en Java, haces algo como
byte[] myArray = new byte[54];
para liberarlo, que debe hacer
myArray = null;
Si algo hace referencia a su matriz de bytes, como
yourArray = myArray;
necesita establecer también las otras referencias a nulo, como
yourArray = null;
En Java, la recolección de basura es automática. Si la JVM puede detectar que un pedazo de memoria ya no es alcanzable por todo el programa, entonces la JVM liberará la memoria por usted.
La JVM liberará la memoria cuando lo desee. Como una aproximación de primer orden para casi todos los programas de Java, no se preocupe por la memoria, sea feliz, la JVM le ha dado la espalda. –
Generalmente, no debería necesitar establecer una referencia a nulo para permitir que se recopile el objeto. Si necesita hacer esto, es muy probable que haya un problema serio con su implementación en mi humilde opinión. –
@Peter: Depende. Si sabe que la variable va a vivir bastante más tiempo que la matriz a la que se refería, entonces establecerla tiene sentido explícitamente. Eso es bastante raro sin embargo. –
Establecer todas las referencias a null lo convertirá en candidato para la recolección de basura automática de Java. Sin embargo, no puedes estar seguro de cuánto tardará esto en suceder. Si realmente necesita reclamar explícitamente la memoria inmediatamente, puede hacer una llamada al System.gc();
También para borrarlo puede que no necesite establecer las referencias a nulo explícitamente. Si las referencias quedan fuera del alcance, se anulan automáticamente, p. una referencia de variable local se anulará una vez que el método en el que se declara termina de ejecutarse. Por lo tanto, las variables locales generalmente se lanzan implícitamente todo el tiempo durante el tiempo de ejecución de una aplicación.
System.gc() no reclama memoria inmediatamente. Simplemente le dices a la JVM: "Por favor, si quieres, tal vez puedas limpiar todo". Es solo una sugerencia. –
System.gc() no forzará un GC. Es solo una sugerencia. Es como la diferencia entre tu compañero de habitación que dice "amigo, este lugar es un desastre, ¿qué pasa con eso?" y tu madre diciendo "¡LIMPIE ESTE INSTANTE!" En la mayoría de las implementaciones, System.gc() es simplemente tu compañero de cuarto. –
@Jonathon @Jim No estaba al tanto de eso. Los javadocs dicen "Ejecuta el recolector de basura. Llamar al método gc sugiere que la Máquina Virtual Java gasta esfuerzos para reciclar objetos no utilizados con el fin de hacer que la memoria que ocupan actualmente esté disponible para su reutilización rápida. Cuando el control vuelve de la llamada al método, Java Virtual Machine ha hecho un gran esfuerzo para recuperar espacio de todos los objetos descartados ". y en mi experiencia de llamarlo parece que se ejecutó de inmediato, pero tal vez estoy equivocado – Alb
- 1. ¿Cómo convierto una matriz de bytes Java en una matriz de bytes Scala?
- 2. Java: ¿Cómo "recortar" una matriz de bytes?
- 3. Declaración de una matriz de matrices de bytes en Java
- 4. Lectura de una matriz de bytes C# en Java
- 5. API de tipo RandomAccessFile para matriz de bytes en memoria?
- 6. Convirtiendo cualquier objeto a una matriz de bytes en java
- 7. ¿Cómo convierto una matriz de bytes a Base64 en Java?
- 8. La asignación a una matriz de bytes en Java
- 9. ¿Cómo inicializo una matriz de bytes en Java?
- 10. Memoria libre asignada en una función diferente?
- 11. matriz de bytes a matriz corta y viceversa en java
- 12. Mejor forma de convertir una matriz de bytes [] en una memoria de cadenas
- 13. Eliminando los primeros 16 bytes de una matriz de bytes
- 14. matriz de bytes en groovy
- 15. Cómo dividir una matriz de bytes
- 16. Convertir una matriz de bytes a una clase que contiene una matriz de bytes en C#
- 17. Inserte una matriz de bytes en otra matriz de bytes en una posición específica con C#
- 18. MemoryStream frente a una matriz de bytes
- 19. Java: convertir la lista de bytes en una matriz de bytes
- 20. deserializar una matriz de bytes
- 21. Comparador Java para matriz de bytes (lexicográfica)
- 22. División de una matriz de bytes
- 23. Cómo convertir una matriz de bytes en una matriz int?
- 24. libre() en la memoria de pila
- 25. Convertir cadena de Java en matriz de bytes
- 26. cómo convertir imágenes en matriz de bytes en java?
- 27. Cadena vs matriz de bytes, rendimiento
- 28. Crear un objeto de archivo Java (o equivalente) utilizando una matriz de bytes en memoria (sin un archivo físico)
- 29. matriz de bytes a unsigned int en Java
- 30. ¿Hay alguna forma mejor de invertir una matriz de bytes en la memoria?
volver a utilizarlo. La mejor desasignación jamás. – SyntaxT3rr0r