Sé que Java tiene su propia colección de elementos no utilizados, pero a veces quiero eliminar la basura manualmente. ¿Hay alguna manera de hacer el trabajo así? Y teniendo en cuenta que tengo un largo o muy largo function
que declara muchas variables, ¿es una buena idea eliminar la memoria no utilizada inmediatamente después de usarla en lugar de la recolección automática al final de la función? Si elimino basura de forma manual, ¿afecta la velocidad de mi aplicación? ¡Gracias por ayudar!Eliminar la memoria de la variable no utilizada en java
Respuesta
No hay forma directa e inmediata de liberar memoria en java. Puede que intenta convencer a el recolector de basura para quitar un objeto utilizando la bien conocida:
Object obj = new Object();
// use obj
obj = null;
System.gc();
pero no hay ninguna garantía de que esta memoria se encuentran libres de inmediato.
Si bien esto se aplica a la memoria de pila, los elementos asignados de pila solo pueden liberarse cuando la función retorna.
** Hay ** una garantía de que GC hará todo lo posible para hacer algo de inmediato. Javadoc: "** Cuando el control vuelve de la llamada al método **, la Máquina Virtual Java ha hecho un gran esfuerzo para recuperar espacio de todos los objetos descartados". Simplemente no hay garantía de lo que se limpiará. –
Puede llamar al System.gc();
que podría llevar al recolector de basura a la limpieza. Pero seguro que esto afectará el rendimiento de su aplicación. En general, no tiene sentido tratar de "optimizar" nada aquí.
Puede asignar null a las variables, verificar que no haya referencias a estos objetos y llamar a System.gc(), pero es solo una sugerencia para que JVM llame a un GC, pero no hay garantía. La recopilación de basura cal ralentiza la aplicación hasta que se congela (GC del stop-the-world).
No vale la pena hacerlo manualmente, ya que el recolector de basura por lo general hará un mejor trabajo, y hacerlo por sí mismo probablemente no hará una diferencia notable en su aplicación.
Si debe, puede establecer las referencias a null y llamar al System.gc()
, y esto invocará el recolector de basura manualmente.
¿Por qué quiere eliminar la basura "manualmente"? Si es porque no tienes memoria, recuerda que Java va a ejecutar la recolección de basura antes de lanzar OutOfMemoryError
. Y si realmente no tienes memoria, entonces no hay basura que incluso tú puedas eliminar manualmente.
Declarar una variable no asigna memoria en el montón. Hacer un objeto con new
hace. Las JVM pueden hacer análisis de escape incluso para las referencias de objeto GC que no han salido del alcance pero que ya no se usan antes del final del método.
Si desea proactivamente desea liberar memoria en un punto determinado donde los recursos del sistema no son críticos, utilice una mejor sintonización JVM como el uso de los algoritmos paralelos de GC.
"Manualmente" la recolección de basura estableciendo las cosas en null
probablemente ralentiza las cosas si solo porque paga el costo de anular referencias sin sentido, o, invocando GC más veces de las necesarias.
Una sugerencia muy común es usar System.gc()
Cuál la JVM puede optar por ignorar. También puede usar el alcance, por ejemplo:
import java.io.*;
public class AutoVariableTest
{
public static void main(String[] args) throws Exception
{
String fileName = "test.txt";
{// This is local block just to keep auto variable in check
File file = new File(fileName); // file is not visible outside the scope and is available for garbage collection
BufferedReader br = null;
try{
br = new BufferedReader(new FileReader(file));
// ...
}finally{
if(br != null)
br.close();
}
}// local block end
}
}
¡Java no es adecuado si está intentando administrar la memoria!O bien, escriba su propio mecanismo de recolección de basura en JVM si tiene mucho tiempo
Si tiene la intención de reducir la cantidad de memoria utilizada después de cierto punto, puede ser mejor que use matrices para sus variables para que pueda establecer una matriz para anular una vez que ya no es necesario. De esta forma, le toma mucho menos tiempo al recolector de basura limpiar todos sus datos.
- 1. GDB variable no utilizada
- 2. Borrado de la memoria utilizada por rpy2
- 3. Eliminar una memoria variable
- 4. Java - ¿La variable de nula requiere espacio en la memoria
- 5. cómo eliminar la clase no utilizada en el proyecto de Java?
- 6. ¿Cómo calcular la memoria real utilizada por la variable de cadena?
- 7. Memoria Totalmente utilizada por Java ConcurrentHashMap (en Tomcat)
- 8. Cómo implementar la memoria caché utilizada más recientemente
- 9. r - ¿Cómo borrar la memoria utilizada por rJava?
- 10. ¿Cómo puedo eliminar una advertencia de "variable no utilizada" en Xcode?
- 11. Uso de memoria virtual de Java en Linux, demasiada memoria utilizada
- 12. ¿Para qué es la variable $ x utilizada en Chrome?
- 13. Java - ¿Cómo almacenar la contraseña utilizada en la aplicación?
- 14. Variable global estática utilizada por la función miembro en línea
- 15. Eliminar objeto de la memoria en javascript
- 16. Does Instruments muestra la memoria utilizada por UIWebView?
- 17. ¿Cómo fuerzo mi std :: map para desasignar la memoria utilizada?
- 18. La variable global parece no ocupar ningún espacio de memoria
- 19. Cómo obtener la memoria utilizada por un programa Delphi
- 20. Cómo encontrar la memoria utilizada por cualquier objeto
- 21. Encontrar la identificación única inferior no utilizada en una lista
- 22. inicialización uniforme con {} informes de variable no utilizada
- 23. ¿Cómo evita scoped_lock emitir una advertencia de "variable no utilizada"?
- 24. principiante maravilloso: cómo eliminar una variable de la memoria en shell maravilloso
- 25. this. Dispose() no libera la memoria utilizada por Form después de cerrarla.
- 26. eliminar texto específico de la variable - jquery
- 27. Cómo manejar el mensaje de la píxel: ID: W0612 Variable no utilizada
- 28. ¿Cómo encontrar la fuga de memoria en Java con JProfiler?
- 29. Determinar la memoria utilizada por la caché asp.net en el alojamiento compartido
- 30. La referencia de interfaz no utilizada no se destruye
Es una buena idea configurar sus variables a 'null' después de su uso. HotSpot lo hará por usted también, pero no con una garantía del 100%. –