En mi clase Data Structures, hemos estudiado la clase Java ArrayList y cómo crece la matriz subyacente cuando un usuario agrega más elementos. Eso se entiende. Sin embargo, no puedo entender cómo exactamente esta clase libera memoria cuando se eliminan muchos elementos de la lista. En cuanto a la fuente, hay tres métodos que eliminan elementos:Java: Cómo ArrayList gestiona la memoria
public E remove(int index) {
RangeCheck(index);
modCount++;
E oldValue = (E) elementData[index];
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null; // Let gc do its work
return oldValue;
}
public boolean remove(Object o) {
if (o == null) {
for (int index = 0; index < size; index++)
if (elementData[index] == null) {
fastRemove(index);
return true;
}
} else {
for (int index = 0; index < size; index++)
if (o.equals(elementData[index])) {
fastRemove(index);
return true;
}
}
return false;
}
private void fastRemove(int index) {
modCount++;
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null; // Let gc do its work
}
Ninguno de ellos reducir el array almacén de datos. Incluso empecé a preguntarme si la memoria libre nunca ocurre, pero las pruebas empíricas demuestran que sí lo hace. Entonces debe haber alguna otra forma en que se haga, pero ¿dónde y cómo? Revisé las clases para padres también sin éxito.
Por favor reformatee su código. Stackoverflow no entiende [código], edite su publicación, seleccione el fragmento de código y presione el botón "Código" para formatearlo. – Behrang
Sí, esta es mi primera publicación y estaba en el proceso de averiguar cómo usar el formato. Alguien me ayudó :) – cka3o4nik