Como funciona a alocação de memória de um ArrayList?
Até onde eu sei, quando estamos criando umArrayList
:
ArrayList<String> list = new ArrayList<String>(SIZE);
A JVM reserva para eleuma parte contígua da memória. Quando adicionamos novos elementos à nossa lista, quando o número de elementos atinge 75% doSIZE
reserva uma parte nova e contígua da memória e copia todos os elementos.
Nossa lista está ficando cada vez maior. Estamos adicionando novos objetos e a lista precisa ser reconstruída novamente.
O que acontece agora?
A JVM está procurando um segmento contíguo de memória, mas não encontra espaço suficiente.
O Garbage Collector pode tentar remover algumas referências não utilizadas e desfragmentar a memória. O que acontece, se a JVM não conseguir reservar espaço para a nova instância da lista após esse processo?
Ele cria um novo, usando o segmento máximo possível? QualException
será jogado?
Eu li esta perguntaJava: Como o ArrayList gerencia a memória e uma das respostas é:
A referência não consome muito espaço. mas, de qualquer forma, parte do espaço é usada. Quando a matriz está ficando maior, pode ser um problema. Também não podemos esquecer que temos outras coisas que usam espaço de memória.