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.

questionAnswers(5)

yourAnswerToTheQuestion