Hola considero que tengo tres variables de matriz de a[dynamic], b[dynamic], c[dynamic]
. Pueden ser de cualquier tamaño ahora quiero destruir la variable decir a. Estoy seguro de que no usaré la variable por más tiempo. cualquier idea y sugerencia son bienvenidasEliminar una memoria variable
Respuesta
Puede indicar al recolector de basura que una matriz puede ser liberado mediante la asignación de null
a ella:
int[] a = new int[someSize];
int[] b = new int[someSize];
....
// I no longer need 'a'
a = null;
// ... but I can still use 'b'
Sin embargo, hay una serie de cosas para tomar nota:
Esto no lo hace libera el espacio. Más bien, está haciendo que la matriz elegible sea liberada por el recolector de basura. Es posible que el GC no logre liberarse durante mucho tiempo.
De hecho, la matriz solo es elegible para la recolección de basura si es no alcanzable. Si ha asignado una referencia a la matriz a otra variable (aún en vivo) u objeto alcanzable, el GC no la reclamará.
Rara vez tiene sentido hacerlo en aplicaciones de Java reales. Es una práctica normal simplemente permitir que las variables salgan del alcance en el curso normal del cómputo . Solo explícitamente
null
una variable (o campo de objeto o elemento de matriz) como esa si la variable no va a quedar fuera del alcance durante mucho tiempo Y se refiere a una gran matriz/objeto o red.
1 - Cualquier aplicación JVM razonable sabrá que las variables locales salen de alcance cuando un método salidas. Si la JVM rastrea los ámbitos en una granularidad más fina es específica de la implementación, y (para ser honesto) I no sé cómo las JVM manejan esto en la práctica.
Tenga en cuenta que casi cualquier cosa es técnicamente conformes a los requisitos JLS .... siempre que el GC no elimina accesible (es decir, no basura) Los objetos que incluye una JVM hipotética que no hace la recolección de basura en absoluto !
ya yo también tuve ese pensamiento. ¿Eliminará la memoria? ¿Quiero llamar al gc después de asignar null? – special
solo puede solicitar que gc reciba una llamada, pero no puede garantizar que – mprabhat
1) El GC liberará la matriz y recuperará el espacio ... eventualmente. 2) NO debe llamar al GC explícitamente para acelerar el proceso. Deje que el GC funcione cuando lo necesite y no interfiera. (Si llama a 'System.gc()' usted mismo, puede no tener ningún efecto. Y si hace que el GC se ejecute, es probable que este no sea el momento correcto ... desde el punto de vista de la eficiencia del GC .) –
Stephen C ha respondido a su pregunta, aunque para el tipo no primitivo, también quisiera asegurarse de que todos los objetos dentro de su matriz estén marcados como nulos si no los necesita, esto asegurará que no tenga pérdida de memoria.
Algo así como:
for(Object obj : myObjectArray){
obj = null;
}
luego hacer su matriz nula referencia
myObjectArray = null;
Después de que la referencia a la matriz es nula, todos los índices de la matriz se vuelven inalcanzables. Hacerlos nulos primero no tiene impacto. Ahora, * puede * haber otras referencias a la matriz o a sus índices, pero ese es un problema aparte sin relación con esto. – entonio
@entonio - De acuerdo. En la mayoría de las situaciones, anular es innecesario, y si no es necesario, es un desperdicio de ciclos de CPU. Y además, siempre existe la posibilidad de que erróneamente 'null 'cosas demasiado temprano o demasiado agresivo. IMO, es mejor que NO lo hagamos ... a menos que tenga una buena razón para creer que no anular * causará * una pérdida significativa de memoria. –
Para eliminar todo elemento de arrayList
arrayList.removeAll(arrayList);
- 1. Eliminar la memoria de la variable no utilizada en java
- 2. ¿Una variable en sí misma consume memoria?
- 3. principiante maravilloso: cómo eliminar una variable de la memoria en shell maravilloso
- 4. jQuery eliminar una variable de URL
- 5. PHP eliminar "referencia" de una variable.
- 6. ¿Eliminar el elemento de una variable Makefile?
- 7. ¿Cómo eliminar una variable de una matriz sesión de PHP
- 8. ¿Cómo puedo imprimir la dirección de memoria de una variable?
- 9. ¿Hay alguna manera de ver cuánta memoria usa una variable?
- 10. ¿Cómo se asigna la memoria para una variable estática?
- 11. Cómo eliminar "0." líder en una variable R numérica
- 12. Acceder a una variable local después de "eliminar esto"
- 13. eliminar el primer carácter de una variable con jQuery
- 14. Eliminar objeto de la memoria en javascript
- 15. eliminar texto específico de la variable - jquery
- 16. ¿Se puede eliminar o eliminar una variable C en cualquier momento durante la ejecución de un programa?
- 17. ¿Cómo poner una variable en una dirección absoluta dada en la memoria (con GCC)
- 18. Eliminar una clave de una matriz asociativa
- 19. Java - ¿La variable de nula requiere espacio en la memoria
- 20. Variable de seguimiento o cambio de memoria en Xcode?
- 21. Eliminar imagen en WPF en Listbox (pérdida de memoria)
- 22. ¿Cómo puedo eliminar la memoria sucia residente en Objective-C?
- 23. Cómo eliminar elementos DOM sin pérdidas de memoria?
- 24. ¿Eliminar elementos específicos de la memoria caché de Django?
- 25. Cómo eliminar la memoria caché de UIWebview o dealloc UIWebview
- 26. iOS: ¿Cómo eliminar objetos de la memoria con ARC habilitado?
- 27. La variable global parece no ocupar ningún espacio de memoria
- 28. Does System.Web.Caching.Cache ¿Eliminar los objetos purgados de la memoria caché?
- 29. Eliminar toda la memoria compartida y los semáforos en Linux
- 30. Qt: ¿"nuevo sin eliminar" causa pérdidas de memoria con controles?
Heard del recolector de basura? – adarshr
¿Por qué quieres hacer esto? ¿Entiendes lo que hace el recolector de basura? –
¡Supongo que te estás moviendo de C a Java! –