¿El método ArrayList.clear () libera memoria?

Si no me equivoco, ArrayList contiene el valor de las ubicaciones de memoria en las que se almacenan las variables que ha agregado a la Lista. Por lo tanto, mi suposición es que cuando se llama al método ArrayList.clear () sólo libera los valores mencionados (de las ubicaciones de memoria), pero no libera las ubicaciones de memoria en sí. Voy a tratar de ilustrar esto con un ejemplo:

Digamos que tienes el estado actual de la memoria:

[Memory location] (type of variable) *value* [1000] (int) 32 [1002] (int) 12 [1003] (float) 2.5 

Y los agrega a la lista myList, por lo que contiene punteros a las ubicaciones de memoria 1000, 1002, 1003.

Cuando llama a myList.clear () los punteros serán anulados, pero las ubicaciones de memoria 1000, 1002, 1003 todavía contendrían valores previamente dados. ¿Me equivoco?

Está correcto porque la memoria es borrada asincrónicamente por el recolector de basura y no directamente por tales funciones de biblioteca. clear sólo anularía todos ellos y actualizaría el estado de ArrayList consecuencia.

Si alguno o todos estos elementos no son referenciados por ninguna otra parte de su código, se convierten en elegibles para la recolección de basura, y pueden ser destruidos + des-asignados en cualquier momento desde poco después de esa llamada hasta el final del tiempo.

clear sólo elementos de matriz de respaldo nulos

 public void clear() { modCount++; for (int i = 0; i < size; i++) elementData[i] = null; size = 0; } 

Pero si llamamos ArrayList.trimToSize after clear matriz de respaldo after clear se encoge

 public void trimToSize() { modCount++; int oldCapacity = elementData.length; if (size < oldCapacity) { elementData = Arrays.copyOf(elementData, size); } } 

No, no aclarará la memoria. Después de usted clear() .

Vea el código fuente de clear ()

  public void More ...clear() { 474 modCount++; 475 476 // Let gc do its work 477 for (int i = 0; i < size; i++) 478 elementData[i] = null; 479 480 size = 0; 481 } 

El método está haciendo que los elementos sean elegibles para Garbage Collector.No los limpie de inmediato. Una vez que el GC se ejecuta, se han ido.

La respuesta a su pregunta, no liberará la memoria. Sólo eliminará todas las referencias de objeto. Ahora estos objetos pueden o no pueden ser recogidos por el recolector de basura dependiendo de cómo se refieren en otros lugares. Por ejemplo, el objeto 1 se refiere -> objeto 2 ArrayList se refiere -> objeto 2 ArrayList se refiere -> objeto 3

En este caso, después de Arraylist.clear (), el objeto 3 será elegible para la limpieza pero no el objeto 2.

  • Android no libera Bitmap de la memoria
  • Canal de entrada cerrado del consumidor o se produjo un error. eventos = 0x8
  • Pérdida de memoria a pesar de usar weakreference
  • Tamaño máximo de montón nativo en Android?
  • ¿Cómo puedo crear Libgdx.so desde el origen para Android con el rastreo gdb habilitado?
  • El teléfono no puede conectarse a Eclipse en modo de depuración
  • Límite de memoria interna para la tableta sin función de tarjeta SD
  • Decodificación de mapas de bits en Android con el tamaño correcto
  • ¿Hay una manera de compactar memoria en android para bajar la marca de agua alta?
  • Fuga de memoria AsyncTask
  • ¿Los oyentes crean fugas de memoria si no se eliminan de una actividad destruida?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.